Приобретение навыков решения краевых задач для обыкновенных дифференциальных уравнений вариационными методами

Страницы работы

7 страниц (Word-файл)

Содержание работы

ЦЕЛЬ РАБОТЫ

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

ТЕОРЕТИЧЕСКАЯ СПРАВКА

Общий вид краевой задачи

,                          (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  Графики функций на

отрезке [a, b]

 

Рис. 1 Общий вид функций

 
 


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

Рис. 4  Графики функций на

отрезке [a, b]

 

Рис. 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);

  

Рис. 5 Общий вид функций

 

Рис. 6  Графики функций на

отрезке [a, b]

 
 


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

Рис. 8  Графики функций на

отрезке [a, b]

 

Рис. 7 Общий вид функций

 
  

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
148 Kb
Скачали:
0