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.