For i from i0 to N do

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);