Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ (МП-3) / Курсовые / mpm_5a / МОЙМПМ~1.DOC
Скачиваний:
84
Добавлен:
17.04.2013
Размер:
347.14 Кб
Скачать

3.4 Аппроксимация 2-го начального условия

Для более точного аппроксимирования 2-го начального условия разложим u(x,T )

в окрестности точки (x,0) по формуле Тейлора и используя 1-ое и 2-ое начальное условия перейдем к конечным разностям:

Эта формула отличается от аналогичной для явной схемы тем ,что аппроксимация разностной производной второго порядка по х производится на первом слое ,а не на нулевом . Запишем (5) к виду удобному для применения метода прогонки:

  1. Аппроксимация 2-го граничного условия

3.6 Вычисления прогоночных коэффициентов

Сначала найдем u(i,j) на слое j=1. Определим прогоночные коэффициенты.

Учитывая 1-ое граничное условие и уравнение (6) получаем:

Теперь вычислим граничные прогоночные коэффициенты

Методом прогонки находим u(i,1) где i=1...m ;

Теперь зная значения j=0,1 находим u(i,j ) где j=2...n.

Используя уравнение (2) находим прогоночные коэффициенты:

Теперь вычислим граничные прогоночные коэффициенты

Методом прогонки находим u(i,j) где i=1...m ,j=2..n ;

Текст программы в среде Matlab приведен в приложении (стр. ). Поверхность функции являющейся решением нашего дифференциального уравнения изображена в приложении (стр. ).

ПРИЛОЖЕНИЕ

Программа для численного решения задачи на ПК в среде MATLAB.

% YAV

% Решение краевой задачи с применением ЯВНОЙ разностной схемы.

t=input('Введите шаг по оси времени:');

while ((t<0.012) | (t>0.5))

t=input('Введите шаг по оси времени [0.012;0.5]:');,end;

h=input('Введите шаг по оси стержня:');

while ((h<0.012) | (h>0.5))

h=input('Введите шаг по оси стержня [0.012;0.5]:');,end;

M=floor(1/h);,N=floor(1/t);,h=1/M;,t=1/N;

if t>h,clc,for i=1:10,disp(' ');,end;

disp(' ВОЗМОЖНА НЕУСТОЙЧИВОСТЬ!!!');

disp(' (не выполнено условие устойчивости Куранта-Леви:t<=h)!!!');

pause,end;,g=(t/h)^2;

U=zeros(M+1,N+1);

for j=0:N,U(M+1,j+1)=j*t;,end;

for i=1:(M-1),U(i+1,2)=t+5*t^2/(1+(i*h)^2);,end;

U(1,2)=(t+5*t^2+g*U(2,2))/(1+g*(1+h));

for j=1:(N-1)

for i=1:(M-1)

U(i+1,j+2)=2*(1-g)*U(i+1,j+1)+g*(U(i,j+1)+U(i+2,j+1))-U(i+1,j)+t^2*10/(1+(i*h)^2+(j*t)^2);

end;

f=2*U(1,j+1)-U(1,j)+t^2*10/(1+((j+1)*t)^2);

U(1,j+2)=(f+2*g*U(2,j+2))/(1+2*g*(1+h));

end;

mesh(U);,clc

% NEYAV

% Решение краевой задачи с применением НЕЯВНОЙ разностной схемы

%------------- определение числа разбиений по осям x, t ---------------

M=20; N=50;

%--- определение шагов сетки по оси x или t

h=1/M; t=1/N;

%-------------- определение рабочих констант ---------------------------

u=zeros(M+1,N+1);

h2=h^2; t2=t^2; g2=t2/h2;

%------------- заполнение матрицы U(x,t) 1-ым начальным условием ----

for i=0:M, u(i+1,1)=0; end

%-----------------------------------------------------------------------

A=zeros(M,1);C=zeros(M+1,1);B=A;A1=A;F=C;B1=C;

%------------ этап заполнения матрицы U(x,t) 2-ым начальным условием ----

%------------1) Определение прогоночных коэффициентов-------------------

for i=1:M-1, A(i)=g2/2; B(i+1)=g2/2; C(i+1)=1+g2;

F(i+1)=t+5*t2/(1+h2*i^2);

end;

%------------2) Определение граничных прогоночных коэффициентов---------

A(M)=0; B(1)=1; C(1)=1+h; C(M+1)=1;

F(1)=0; F(M+1)=t;

%------------ определение U(i,1) методом прогонки ---------------

A1(1)=B(1)/C(1); B1(1)=F(1)/C(1);

for i=2:M

A1(i)=B(i)/(C(i)-A(i-1)*A1(i-1));

B1(i)=(F(i)+A(i-1)*B1(i-1))/(C(i)-A(i-1)*A1(i-1));

end;

B1(M+1)=(F(M+1)+A(M)*B1(M))/(C(M+1)-A(M)*A1(M));

u(M+1,2)=B1(M+1);

for i=M:-1:1,

u(i,2)=A1(i)*u(i+1,2)+B1(i);

end;

%------------ этап заполнения матрицы U(x,t) ---------------------------

%------------1) Определение прогоночных коэффициентов-------------------

for i=1:M-1, A(i)=g2; B(i+1)=g2; C(i+1)=1+2*g2; end

%------------2) Определение граничных прогоночных коэффициентов---------

A(M)=0; B(1)=1; C(1)=1+h; C(M+1)=1;

%------------ определение U(i,j) методом прогонки ---------------

A1(1)=B(1)/C(1);

for i=2:M,

A1(i)=B(i)/(C(i)-A(i-1)*A1(i-1));

end;

for j=2:N,

F(1)=0;

for i=1:M-1,

F(i+1)=2*u(i+1,j)-u(i+1,j-1)+10*t2/(1+h2*i^2+t2*j^2);

end;

F(M+1)=j*t;

B1(1)=F(1)/C(1);

for i=2:M,

B1(i)=(F(i)+A(i-1)*B1(i-1))/(C(i)-A(i-1)*A1(i-1));

end;

B1(M+1)=(F(M+1)+A(M)*B1(M))/(C(M+1)-A(M)*A1(M));

u(M+1,j+1)=B1(M+1);

for i=M:-1:1,

u(i,j+1)=A1(i)*u(i+1,j+1)+B1(i);

end;

end;

contour(u,15);pause;

for j=0:N,

i=1:1:M;

u1=u(i,j+1);

plot(i,u1),pause;

end

mesh(u);pause;clc

Результаты решения.

Пример решения по явной схеме при h=0.05 =0.02: (рис. 1)

Максимальное значение решения: 3.8182.

Примеры неустойчивых решений по явной схеме, когда не выполняется условие устойчивости Куранта-Леви.

При небольшом различии шагов имеем слабые искажения (см. рис. 3 при h=0.047 =0.05 с максимальным значением 4.3836). При мелкой сетке даже небольшое несоответствие шагов условию устойчивости приводит к большим искажениям (см. рис. 4 при h=0.012 =0.0121 с максимальным значением 5203.6). При большом несоответствие шагов получаем сильные искажения: в отдельных точках имеют место сильные скачки, больше истинных значений на несколько порядков. В связи с этим на графиках всё остальное решение представляется плоскостью (см. рис. 5 при h=0.04 =0.05 с максимальным значением 8.0561).

(рис. 2)

(рис. 3)

(рис. 4)

Пример решения по явной схеме при h==0.05 с приведением таблицы значений:

Соседние файлы в папке mpm_5a