Приобретение навыков решения краевых задач для обыкновенных дифференциальных уравнений вариационными методами.
ТЕОРЕТИЧЕСКАЯ СПРАВКА
Общий вид краевой задачи
, (1)
где x Î[a, b], p, r, f – известные функции, – непрерывны на [a, b], на [a, b].
(2)
Задачу можно представить в еще более общем виде:
При решении рассмотрим также следующую постановку
Функцию v будем искать в виде
, (3)
где образуют базис в энергетическом пространстве оператора А и удовлетворяют краевому условию (2¢). Искомая функция здесь представлена в виде
u = w + v, (4) где w – известная функция, такая, что . Рекомендуется использовать функцию вида , но это не является обязательным условием. Необходимо лишь выполнение условий на границе
Функции будем строить на основе рядов вида
1). ,
2). .
Тогда будем искать в виде
, где – известная функция, такая, что и на (a, b). Для ряда 1) наиболее простой вид функции g
;
для ряда 2)
i = 1, 2, ….
Запишем уравнение (1¢):
Методы получения коэффициентов :
I. Метод Ритца.
Здесь
где .
II. Метод наименьших квадратов.
> restart;
Функция, задающая оператор А:
> A:=(u)->-(x+1)*diff(u,x$2)-diff(u,x)+(x-1)*u;
Функция, определяющая скалярное произведение
> ScalMult:=(U,V)->int(U*V,x=a..b);
> a:=1;
b:=2;
Процедура построения функции U
> Main:=proc(Flag1,Flag2,n)
local f,w,v,v0,u,Xi,Gamma,Phi,Asd,Bsd,an,i,j;
f:=x-x*x;
w:=-x+3;
Asd:=array(1..n,1..n);
Bsd:=array(1..n);
an:=array(1..n);
if Flag1=0 then Xi:=(n)->x^n;
Gamma:=(x-a)*(b-x);
Phi:=(n)->Xi(n)*Gamma
else Xi:=(n)->sin(n*x);
Gamma:=(n)->sin((x-a)/(b-a)*n*x);
Phi:=(n)->Xi(n)*Gamma(n);
end if;
if Flag2=0
then
for i from 1 to n do
for j from 1 to n do
Asd[i,j]:=ScalMult(A(Phi(i)),Phi(j));
end do;
Bsd[i]:=ScalMult(A(f-A(w)),Phi(i));
end do
else
for i from 1 to n do
for j from 1 to n do
Asd[i,j]:=ScalMult(A(Phi(i)),A(Phi(j)));
end do;
Bsd[i]:=ScalMult(A(f-A(w)),A(Phi(i)));
end do;
end if;
an:=evalm(Bsd&*(Asd)^(-1));
v0:=0;
for i from 1 to n do
v:=v0+evalf(an[i])*Phi(i);
v0:=v;
end do;
u:=v+w;
end proc:
Результаты вызова процедуры Main:
1. Функция U строится с помощью степенного ряда; коэффициенты находятся методом Ритца:
> Main(0,0,4);
2. Функция U строится с помощью степенного ряда; коэффициенты находятся методом наименьших квадратов:
> Main(0,1,4);
3. Функция U строится с помощью тригонометрического ряда; коэффициенты находятся методом Ритца:
> Main(1,0,2);
4. Функция U строится с помощью тригонометрического ряда; коэффициенты находятся методом наименьших квадратов:
> Main(1,1,2);
Процедура нахождения невязки межу рядами U(2n) и U(n) при равномерном разбиении отрезка [a, b] шагом h = 0,1:
i:=0:
J1:=Main(0,0,n):
J2:=Main(0,0,2*n):
x:=a:
while x < b do
i:=i+1:
x:=x+0.1:
Z[i]:=abs(J2-J1);
end do:
Погрешности вида для каждой функции U при различных n:
1. Степенной ряд; метод Ритца:
а). n = 1
> print(Z);
b). n = 2
> print(Z);
c). n = 4
> print(Z);
d). n = 8
> print(Z);
2. Степенной ряд; метод наименьших квадратов:
a). n = 1
> print(Z);
b). n = 2
> print(Z);
c). n = 4
> print(Z);
d). n = 8
> print(Z);
3. Тригонометрический ряд; метод Ритца:
n = 1
> print(Z);
4. Тригонометрический ряд; метод наименьших квадратов:
n = 1
> print(Z);
Графики функций U:
1. Функция U строится с помощью степенного ряда; коэффициенты находятся методом Ритца:
> plot([Main(0,0,1),Main(0,0,2),Main(0,0,4),Main(0,0,8)],x=-
5..2,y=0..10);
> plot([Main(0,0,1),Main(0,0,2),Main(0,0,4),Main(0,0,8)],x=1..2,
y=0..3);
|
||||
|
||||
2. Функция U строится с помощью степенного ряда; коэффициенты находятся методом наименьших квадратов:
> plot([Main(0,1,1),Main(0,1,2),Main(0,1,4),Main(0,1,8)],
x=- 5..2,y=0..10);
> plot([Main(0,1,1),Main(0,1,2),Main(0,1,4),Main(0,1,8)],x=1..2,
y=0..3);
|
|
3. Функция U строится с помощью тригонометрического ряда; коэффициенты находятся методом Ритца:
> plot([Main(1,0,1),Main(1,0,2)],x=-5..2,y=0..10);
> plot([Main(1,0,1),Main(1,0,2)],x=1..2,y=0..3);
|
|
||||
4. Функция U строится с помощью тригонометрического ряда; коэффициенты находятся методом наименьших квадратов:
> plot([Main(1,1,1),Main(1,1,2)],x=-5..2,y=0..10);
> plot([Main(1,1,1),Main(1,1,2)],x=1..2,y=0..3);
|
|
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.