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

2.3 Поверка правильности реализации с помощью модельной функции.

В качестве модельной функции была взята функция ex+y

U(x,0)=ex ;

U`t(x,0)=ex ;

U(0,t)=et ;

3piU(1,t)+4U`x(1,y)=(3pi+4)et+1.

При разбиении 10x10, погрешность =0.0741.

Таблица разности решения задачи с помощью явной схемы и истинного решения:

0 0 0 0 0 0 0 0 0 0

0 0.0029 0.0048 0.0059 0.0074 0.0088 0.0103 0.0118 0.0123 0.0148

0 0.0034 0.0066 0.0068 0.0110 0.0136 0.0163 0.0177 0.0200 0.0231

0 0.0058 0.0073 0.0123 0.0156 0.0158 0.0207 0.0237 0.0266 0.0396

0 0.0074 0.0121 0.0148 0.0185 0.0236 0.0259 0.0296 0.0346 0.0454

0 0.0089 0.0133 0.0172 0.0222 0.0266 0.0311 0.0355 0.0412 0.0498

0 0.0103 0.0155 0.0198 0.0259 0.0323 0.0363 0.0414 0.0466 0.0518

0 0.0128 0.0187 0.0227 0.0296 0.0368 0.0414 0.0474 0.0533 0.0592

0 0.0133 0.0200 0.0256 0.0341 0.0400 0.0460 0.0533 0.0600 0.0623

0 0.0148 0.0242 0.0296 0.0370 0.0432 0.0518 0.0592 0.0672 0.0741

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

Для решения задачи с применением неявной разностной схемы воспользуемся Т-образным шаблоном, изображенным на рисунке 4. По данному шаблону составим следующую двухслойную схему:

Y

(10)

Перепишем данную схему в виде, удобном

для дальнейших вычислений:

(10’)

Рисунок 4. X

В данной схеме написано меньше уравнений чем имеется неизвестных U. Недостающие уравнения находим из начальных условий. Уравнение для

непосредственно получаем из 1-го граничного условия:

Значения функции на нулевом слое находим из 1-го начального условия:

Для нахождения значений функции на 1-ом слое воспользуемся уравнением,

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

(11)

Для нахождения оставшихся уравнений аппроксимируем 2-е граничное условие

аналогично тому, как это делалось при решении с помощью явной схемы. Разложим U(x,y) в окрестности точки (1, y) по формуле Тейлора (выражение (*)). Воспользовавшись 2-м граничным условием и основным уравнением (10),

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

.

Выражая отсюда , и принимая j+1:=j, получим:

(12).

Из выражения (12) при j=1 получим:

(13).

Из основного уравнения (10) при i=M, j=0 получим

(14).

Из 2-го начального условия (11) при i=M-1:

(15).

Подставляя вместо правой части (14) левую часть (15), выражая ,

подставляя полученное выражение в (13), получим:

(16).

Таким образом, сформирована система уравнений, позволяющая найти, зная

начальные условия (N+1) неизвестную.

для нулевого слоя: ;

для 1-го слоя :

для j=2,...,N-1 :

Полученные системы решаются методом прогонки для каждого фиксированного слоя.

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

1-ое граничное и 1-ое начальное условия были аппроксимированы точно. Остальные начальные и граничные условия были аппроксимированны с погрешностями и. Следовательно, погрешность метода -.

Текст программы в среде MatLab и графики решения заданного дифференциального уравнения приведены ниже.

Текст программы

%------------------- Неявная схема ----------------------------

clc;

clear;

%------------------- Шаг по оси X -----------------------------

M=input('Введите число шагов по оси X: ');

h=1/(M-1);

if ((M<2) | (M>90))

return

end

h = 1/(M-1);

fprintf('Шаг по оси X: %g \n', h);

%------------------- Шаг по оси Y -----------------------------

N=input('Введите число шагов по оси Y: ');

t=1/(N-1);

if ((N<2) | (N>90))

return

end

h = 1/(N-1);

fprintf('Шаг по оси Y: %g \n', t);

%------------------- Задание матрицы решения ------------------

U=zeros(M,N);

g=t/h;

%------------------- Вычисление значений на нулевом слое ------

for i=0:M-1

U(i+1,1)=20*sin((3*pi/4)*i*h);

end;

%------------------- Задание начальных условий ----------------

for j=0:N-1

U(1,j+1)=0;

end;

%------------------- Рабочие данные ---------------------------

A=zeros(M); % Матрица коэффициентов левой части системы

B=zeros(M,1); % Массив коэффициентов правой части системы

Y=zeros(M,1); % Матрица решений на фиксированном слое

a=zeros(M-1,1); % Массив коэффициентов метода прогонки

b=zeros(M-1,1); % Массив коэффициентов метода прогонки

%------------------- Основной цикл вычислений ----------------------

for j=2:N

%------------------- Вычисление коэффициентов системы на 1-ом слое -

if j==2

B(1)=0;

for i=2:M-1

B(i)=20*sin(3*pi*(i-1)*h/4);

A(i,i)=(1+g^2);

A(i,i-1)=-(g^2)/2;

A(i,i+1)=A(i,i-1);

end;

A(1,1)=1;

A(1,2)=0;

A(M,M-1)=0;

A(M,M)=1;

B(M)=((g^2))*U(M-1,1)-U(M,1)*((g^2)+3*pi*h*(g^2)/4-1);

%------------------- Вычисление коэффициентов системы на остальных слоях

else

B(1)=0;

for i=2:M-1

B(i)=2*U(i,j-1)-U(i,j-2);

A(i,i)=1+2*(g^2);

A(i,i-1)=-(g^2);

A(i,i+1)=A(i,i-1);

end;

A(1,1)=1;

A(1,2)=0;

A(M,M-1)=0;

A(M,M)=1;

B(M) = (2*(g^2))*U(M-1,j-1)-(2*(g^2)*(1+3*pi*h/4)-2)*U(M,j-1)-U(M,j-2);

end;

%------------------ Прямой ход прогонки ----------------------------

a(1)=-A(1,2)/A(1,1);

b(1)=B(1)/A(1,1);

for i=2:M-1

a(i)=-A(i,i+1)/(A(i,i)+(A(i,i-1)*a(i-1)));

b(i)=(B(i)-A(i,i-1)*b(i-1))/(A(i,i)+(A(i,i-1)*a(i-1)));

end;

%------------------ Обратный ход прогонки ----------------------------

Y(M)=(B(M)-(A(M,M-1)*b(M-1)))/(A(M,M)+(A(M,M-1)*a(M-1)));

for k=1:M-2

i=M-k;

Y(i)=(a(i)*Y(i+1))+b(i);

end;

%------------------ Запись значений на слое в матрицы результата -----

U(:,j)=Y;

end;

%------------------ Вывод результата ---------------------------------

% Просмотр в различных ракурсах

for p=1:10:360

mesh(U,[p,30]);

pause;

end;

x=0:h:1;

y1=0:t:1;

v=[-20:3:20];

for i=1:M

for j=1:N

m(N+1-j,i) = U(i,j);

end

end

%----------------------- Вывод линий уровня ------------------------

contour(m,v,x,y1)

grid

xlabel('X');

ylabel('Y');

pause

%----------------------- Отображение матрицы результата -------------

disp(U)

pause

clc;

Матрица решения при N=10 и M=10.

0 0 0 0 0 0 0 0 0 0

5.1764 5.0058 4.4867 3.6690 2.5859 1.3252 0.0026 -1.3884 -2.5767 -3.7138

10.0000 9.6705 8.7448 7.3195 5.0163 2.5936 0.0065 -2.5520 -5.0603 -7.1665

14.1421 13.6761 12.2668 10.0503 7.0890 3.6988 0.0139 -3.7670 -7.1639 -10.0970

17.3205 16.7497 15.0454 12.2740 8.6868 4.5051 -0.0526 -4.5119 -8.7114 -12.3036

19.3185 18.6816 16.7905 13.7005 9.6640 4.8869 -0.0645 -5.0690 -9.7438 -13.7531

20.0000 19.3399 17.3314 14.2182 9.9995 5.2081 -0.0922 -5.2253 -10.0234 -14.1371

19.3185 18.6778 16.8340 13.7012 9.6045 4.9568 -0.0823 -5.0751 -9.7375 -13.7368

17.3205 16.7342 14.9606 12.1150 8.5856 4.4544 -0.0905 -4.5219 -8.7996 -12.2435

14.1421 13.6181 12.1890 9.9001 6.9261 3.5703 -0.0591 -3.7373 -7.0770 -10.0063

График решения задачи.

Зависимость (x,U(x,t)), для различныхt.

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