Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
98
Добавлен:
17.04.2013
Размер:
125.44 Кб
Скачать

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

Порядок аппроксимации данной разностной схемы

Устойчивость решения.

Для уравнений гиперболического типа метод спектральных гармоник

приводит к следующему условию устойчивости:

(7),

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

Отсюда, в частности, получаем для явной схемы () условие устойчивости Куранта-Леви:.

Итак U(i,j ) при j=0 и j=1 определены. Включается рекуррентная процедура описываемая уравнением (1) и вычисляется U(i,j ) для всех i=1,2,...,m-1 , для каждого фиксированного j=2,...,n-1. Текст программы в среде Matlab приведен в приложении (стр.7). Поверхность функции являющейся решением нашего дифференциального уравнения изображена в приложении (стр. 9).

Решение задачи с помощью неявной разностной схемы

Рассмотрим снова нашу краевую задачу . Для аппроксимации уравнения используем Т-образный пятиточечный шаблон . Уравнение аппроксимируется следующими уравнениями :

3.1 Аппроксимация дифференциального уравнения

Обозначим g=t/h и запишем (1) к виду удобному для применения метода прогонки:

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

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

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

Для более точного аппроксимирования 2-го начального условия разложим U(x,t) в окрестности точки (x,0) по формуле Тейлора и используя 1-ое и

2-ое начальное условия перейдем к конечным разностям:

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

3.5Аппроксимация 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 приведен в приложении (стр. 7-8). Поверхность функции являющейся решением нашего дифференциального уравнения изображена в приложении (стр. 11).

Приложение

Программа для численного решения задачи на ПК в среде 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=50; 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.02 :

Пример решения по неявной схеме при h=0.02 :

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