Используя метод Ритца, найти экстремали функционала
Исследовать сходимость. Построить графики.
Решение. Будем решать задачу в среде Maple. Выбираем базисные функции и определяем аппроксимирующую функцию:
> restart;
> phi0:=(x,y)->x/10+y^2/50;
> phi:=(x,y,i,j)->
sin(i*Pi*(x-x1)/(x2-x1))*sin(j*Pi*(y-y1)/(y2-y1));
> U:=proc(x,y,M,N)option operator,arrow;
local n,m;
phi0(x,y)+
sum(sum(a[m,n]*phi(x,y,m,n),'m'=1..M),'n'=1..N);
end proc;
Здесь также удобно разработать процедуру для автоматического составления и решения уравнений метода Ритца. Например, такую
> Ritz:=proc(F,M,N,a)local Fu,eqns,var,eq,i,j,res;
Fu:=simplify(int(int(F,x=0..1),y=0..2));
eqns:={}:var:={}:
for i from 1 to M do
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.