var:=var union {a[i]}:
eq[i]:=diff(Fu,a[i])=0:
eqns:=eqns union {eq[i]}:
od:
res:=solve(eqns,var);
assign(res);
end proc:
Определим теперь нашу подынтегральную функцию
>F:=x^2+y(x)^2+diff(y(x),x)^2;
Зададим граничные точки
>x1:=-1;x2:=1;y1:=1;y2:=2;
Задаемся числом аппроксимирующих функций и решаем задачу
>N:=3:c1:=`cross`:c2:=`circle`:c3:=`box`:
>for j from 1 to N do
a:=array(1..j):u:=Us(x,j):
Ritz(F,u,1,j,a);
pUs_||j:=
plot(Us(x,j),x=-1..1,
color=black,style=point,symbol=c||j,
legend=cat(`Метод Ритца N = `,convert(j,string))):
end do:
Отображаем решение на графиках
>plots[display]({pUs_1,pUs_2,pUs_3,py});
Видим, что удержание трех членов ряда вполне достаточно. Покажем эти аппроксимации
>Us(x,1);Us(x,2);Us(x,3);
Рассмотрим теперь решение задачи с помощью аппроксимации полиномами
>N:=2:c1:=`cross`:c2:=`circle`:
>c3:=`box`:c0:=`diamond`:
>for j from 0 to N do
a:=array(0..j):u:=Up(x,j):
Ritz(F,u,0,j,a);
pUp_||j:=
plot(Up(x,j),x=-1..1,color=black,
style=point,symbol=c||j,
legend=cat(`Метод Ритца N = `,convert(j,string))):
end do:
Отобразим решение на графиках
>plots[display]({pUp_0,pUp_1,pUp_2,py});
Видим, что и в этом случае удержание трех членов ряда вполне достаточно. Покажем полученные аппроксимации
>Up(x,0);Up(x,1);Up(x,2);