For j from 1 to N do

var:=var union {a[i,j]}:

eq[i,j]:=diff(Fu,a[i,j])=0:

eqns:=eqns union {eq[i,j]}:

od:

od:

res:=solve(eqns,var);

assign(res);

end proc:

Вводим теперь граничные точки

>x1:=0;x2:=1;y1:=0;y2:=2;

Определяем подынтегральную функцию

>F:=diff(u(x,y),x)^2-2*diff(u(x,y),y)^2+

2*y*u(x,y)*(sin(Pi*x)+x/5);

Задаемся числом аппроксимирующих функций и решаем задачу

>M:=2:N:=2:a:=array(1..M,1..N):

>F2:=subs(u(x,y)=U(x,y,M,N),F):Ritz(F2,M,N,a):

Посмотрим результат на графике

>p||M:=

>plot(U(0.5,y,M,N),y=0..2,color=black,linestyle=4,

legend=cat(`M=N=`,convert(M,string))):

plots[display]({p2});

Увеличим на единицу (по каждой переменной) число слагаемых в аппроксимации и повторим расчет

>M:=3:N:=3:a:=array(1..M,1..N):

>F3:=subs(u(x,y)=U(x,y,M,N),F):Ritz(F3,M,N,a):

>p||M:=

plot(U(0.5,y,M,N),y=0..2,color=black,linestyle=1,

legend=cat(`M=N=`,convert(> M,string))):

>plots[display]({p2,p3});

>M:=4;N:=4;a:=array(1..M,1..N):

>F4:=subs(u(x,y)=U(x,y,M,N),F):Ritz(F4,M,N,a);

>p||M:=

plot(U(0.5,y,M,N),y=0..2,color=black,linestyle=3,

legend=cat(`M=N=`,convert(M,string))):

>plots[display]({p2,p3,p4});

Видим, что приближенные решения хорошо сходятся, и можно ограничиться значениями M = N = 4.