Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ (МП-3) / Курсовые / mpm_7b / Курсовая работа по МПМ (вариант 7).DOC
Скачиваний:
100
Добавлен:
17.04.2013
Размер:
395.26 Кб
Скачать

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

Для решения задачи с применением неявной разностной схемы воспользуемся Т-образным шаблоном, изображенным на рисунке 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.5267 3.7890 2.8559 1.7988 0.6927 -0.3884 -1.3767 -2.2138

10.0000 9.6705 8.7448 7.3195 5.5163 3.4736 1.3365 -0.7520 -2.6603 -4.2765

14.1421 13.6761 12.3668 10.3503 7.7990 4.9088 1.8859 -1.0670 -3.7639 -6.0470

17.3205 16.7497 15.1454 12.6740 9.5468 6.0051 2.3026 -1.3119 -4.6114 -7.4036

19.3185 18.6816 16.8905 14.1305 10.6390 6.6869 2.5585 -1.4690 -5.1438 -8.2531

20.0000 19.3399 17.4814 14.6182 10.9995 6.9081 2.6382 -1.5253 -5.3234 -8.5371

19.3185 18.6778 16.8740 14.1012 10.6045 6.6568 2.5393 -1.4751 -5.1375 -8.2368

17.3205 16.7342 15.1036 12.6150 9.4856 5.9544 2.2705 -1.3219 -4.5996 -7.3735

14.1421 13.6181 12.2890 10.2707 7.7261 4.8503 1.8491 -1.0773 -3.7470 -6.0063

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

Рисунок 5. Решение основного уравнения

Рисунок 6. Линии уровня решения основного уравнения

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