3.  Построить графики приближенных решений.

4.  Построить точное решение задачи и сравнить его с приближенным.

Вариант № 29.

Задача 1.

Найти точно и приближенно экстремаль функционала с закрепленной границей

.

1.  Привести вывод уравнения Эйлера. Решить соответствующую краевую задачу.

2.  Подробно описать методику решения вариационной задачи конечно-разностным методом Эйлера. Найти приближенное решение конечно-разностным методом Эйлера.

Показать сходимость полученного приближенного решения к точному при возрастании числа элементов, используемых в аппроксимации. Построить графики решений.

Задача 2.

Дать подробное описание метода Бубнова-Галеркина. Пользуясь этим методом, найти решение уравнения Гельмгольца в квадрате 0 £ x £ 2, 0 £ y £ 2

при краевых условиях . Исследовать сходимость приближенного решения; построить графики.

Построить точное решение задачи и сравнить его с приближенным.

Вариант № 30.

Задача 1.

Найти точно и приближенно экстремаль функционала с закрепленной границей

.

1.  Привести вывод уравнения Эйлера. Решить соответствующую краевую задачу.

2.  Подробно описать методику решения вариационной задачи конечно-разностным методом Эйлера. Найти приближенное решение конечно-разностным методом Эйлера.

Показать сходимость полученного приближенного решения к точному при возрастании числа элементов, используемых в аппроксимации. Построить графики решений.

Задача 2.

Дать подробное описание вариационного метода Ритца. Пользуясь этим методом, найти решение уравнения Гельмгольца в квадрате 0 £ x £ 2, 0 £ y £ 2

НЕ нашли? Не то? Что вы ищете?

при краевых условиях . Исследовать сходимость приближенного решения; построить графики.

Построить точное решение задачи и сравнить его с приближенным.

Примеры решения задач

Пример 1. Метод Ритца для одномерного интеграла.

Пользуясь методом Ритца, найти экстремали функционала

.

Показать сходимость полученного приближенного решения к точному при возрастании числа элементов, используемых в аппроксимации. Построить графики решений.

Решение. Будем решать задачу в среде Maple. Определяем подынтегральную функцию:

> restart;

> F:=(x, y,y1)->x^2+y^2+y1^2;

Составим уравнение Эйлера для данного функционала. Для этого вычислим частные производные от F по y и y1 и полную производную по x от частной производной F по y1 (переменная y1 означает первую производную, а переменная y2 – вторую производную)

> dFdy:=diff(F(x, y,y1),y);dFdy1:=diff(F(x, y,y1),y1);

> d_dFdy1_dx:=diff(dFdy1,x);d_dFdy1_dy:=diff(dFdy1,y);

> d_Fdy1_dy1:=diff(dFdy1,y1);

Составим теперь уравнение Эйлера

> eq:=dFdy-d_dFdy1_dx-d_dFdy1_dy*y1-d_Fdy1_dy1*y2=0;

> eq:=simplify(lhs(eq)/2)=0;

> eq:=subs(y=y(x),y2=diff(y(x),x$2),lhs(eq))=0;

Решим полученное уравнение с заданными граничными условиями

> res:=dsolve({eq, y(-1)=1,y(1)=2},y(x));

> assign(res):y:=evalf(y(x));

Построим график точного решения

> py:=plot(y,x=-1..1,legend=`Точное решение`,

color=black):

> plots[display]({py});

Решим теперь эту задачу с помощью пакета VariationalCalculus:

> with(VariationalCalculus);

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

> y:='y':f:=x^2+y(x)^2+diff(y(x),x)^2;

> EulerLagrange(f, x, y(x));

Решим уравнение Эйлера с заданными граничными условиями

> res1:=dsolve({op(%)=0,y(-)=1,y(1)=2},y(x));

assign(res1):y:=evalf(y(x));

То есть, как и следовало ожидать, получили тот же результат!

Решаем теперь нашу задачу методом Ритца. Выбираем базисные функции и определяем аппроксимирующую функцию. Рассмотрим два варианта — аппроксимация полиномами и аппроксимация тригонометрическими функциями:

> phi0:=x->y1+(y2-y1)*(x-x1)/(x2-x1);

> phi:=(x, n)->sin(n*Pi*(x-x1)/(x2-x1));

> Us:=proc(x, N)option operator, arrow; local n;

phi0(x)+sum(a[n]*phi(x, n),'n'=1..N);

end proc;

> Up:=proc(x, N)option operator, arrow; local n;

phi0(x)+(x-x1)*(x-x2)*sum(a[n]*x^n,'n'=0..N);

end proc;

С целью автоматизации расчетов разработаем процедуру, формирующую и решающую систему уравнений метода Ритца, например, такую

> Ritz:=proc(F, u,i0,N, a)

local Fu, eqns, var, eq, i,res;global x1,x2;

Fu:=simplify(int(subs(y(x)=u, F),x=x1..x2)):

eqns:={}:var:={}:

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:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10