Объясните строчку в коде

Форум пользователей пакета Maple

Модератор: Admin

Serjuk
Сообщения: 1
Зарегистрирован: Вт июн 01, 2010 8:40 pm

Объясните строчку в коде

Сообщение Serjuk » Вт июн 01, 2010 8:50 pm

Здравствуйте,вообщем у меня условие :решить элиптическую задачу,а именно задачу Дирихле для уравнения Пуассона.Она решена и работает правильно,но не могу понять/объяснить строчку..Помогите пожалуйста.
Вот код программы:

Код: Выделить всё

> restart; with(plots);
> X := Pi;
 h1 := (1/4)*Pi;
 N1 := trunc(X/h1);
 Y := Pi;
 h2 := (1/3)*Pi;
 N2 := trunc(Y/h2);
 H := 1;
L := 1;
 Mu[1] := proc (y) options operator, arrow; 1 end proc;
 Mu[2] := proc (x) options operator, arrow; 0 end proc;
 Mu[3] := proc (t) options operator, arrow; 0 end proc;
 Mu[4] := proc (t) options operator, arrow; 0 end proc;
 f := proc (x, y) options operator, arrow; sin(2*X)*cos(Y) end proc;
Mu[5] := proc (x, y) options operator, arrow; 0 end proc; tau := sqrt(X^2/N1^2+Y^2/N2^2)/(Pi*sqrt(1/X^2+1/Y^2));
 E := 0.1e-1;
 M := 3;
 A := 1;

> for n from 0 to N1 do x[n] := h1*n end do;
 for l from 0 to N2 do y[l] := h2*l end do;
 for m from 0 to M do t[m] := tau*m end do;
>
> Progoncax := proc (U, h, N)
 local n, chi, mu, a, c, b, q, alpha, beta;
 global x, t, m, l;
chi[1] := 0;
 chi[2] := 0;
 mu[1] := 1;
 mu[2] := 0;
 for n to N-1 do
 a[n] := -1/h1^2;
b[n] := -1/h1^2;
 c[n] := 2/h1^2+2/tau;
 q[n] := evalf(-2*U[m, n, l]/tau-(U[m, n, l-1]-2*U[m, n, l]+U[m, n, l+1])/h2^2-sin(2*x[n])*cos(y[l]))
 end do;
 alpha[1] := chi[1];
beta[1] := mu[1];
 for n to N-1 do
 alpha[n+1] := evalf(b[n]/(c[n]-a[n]*alpha[n]));
 beta[n+1] := evalf((a[n]*beta[n]+q[n])/(c[n]-a[n]*alpha[n]))
 end do;
 U[m+1, N, l] := evalf((mu[2]+chi[2]*beta[N])/(1-alpha[N]*chi[2]));
 for n from N-1 by -1 to 0 do
 U[m+1, n, l] := evalf(alpha[n+1]*U[m+1, n+1, l]+beta[n+1]) end do end proc;
> Progoncay := proc (U, h, N)
 local chi, mu, a, c, b, q, alpha, beta, l;
 global F; function, x, t, m, n;
chi[1] := 1;
chi[2] := 0;
 mu[1] := 0;
 mu[2] := 0;
for l to N-1 do
a[l] := evalf(-1/h1^2); b[l] := evalf(-1/h1^2);
 c[l] := evalf(2/h1^2+2/tau);
 q[l] := evalf(-2*U[m, n, l]/tau-(U[m, n, l-1]-2*U[m, n, l]+U[m, n, l+1])/h2^2-sin(2*x[n])*cos(y[l]))
 end do;
alpha[1] := chi[1];
beta[1] := mu[1];
 for l from 0 to N-1 do
alpha[l+1] := evalf(b[l]/(c[l]-a[l]*alpha[l]));
 beta[l+1] := evalf((a[l]*beta[l]+q[l])/(c[l]-a[l]*alpha[l]))
end do;
U[m+2, n, N] := evalf((mu[2]+chi[2]*beta[N])/(1-alpha[N]*chi[2]));
 for l from N-1 by -1 to 0 do
 U[m+2, n, l] := evalf(alpha[l+1]*U[m+2, n, l+1]+beta[l+1]) end do end proc;
> ;
> for l from 0 to N2 do
 for n from 0 to N1 do
U[0, n, l] := Mu[5](x[n], y[l])
 end do end do;
 for l from 0 to N2 do
 for m from 0 to 2*M do
 U[m, 0, l] := Mu[1](y[l]);
U[m, N1, l] := Mu[2](y[l])
 end do end do;
for m from 0 to 2*M do
 for n from 0 to N1 do
 U[m, 0, N2] := Mu[4](x[n])
 end do end do;
> for m from 0 by 2 to 2*M-2 do
 print(m);
 for l to N2-1 do
 Progoncax(U, h1, N1)
 end do;
 for n to N1-1 do
Progoncay(U, h2, N2)
 end do end do;
 for l from 0 to N2 do
 LX := [seq(x[n], n = 0 .. N1)];
 LU := [seq(U[2*M, n, l], n = 0 .. N1)];
 S[l] := interp(LX, LU, z);
 PY[l] := plot(S[l], z = 0 .. x[N1]);
 display(PY[l])
end do;
 LX := [seq(y[l], l = 0 .. N2)];
LY := [seq(S[l], l = 0 .. N2)];
 UU := interp(LX, LY, g); plot3d(UU, z = 0 .. x[N1], g = 0 .. y[N2], axes = BOXED);
>
>

а не могу объяснить строчку :

Код: Выделить всё

LU := [seq(U[2*M, n, l], n = 0 .. N1)]

Почему тут именно 2M??