Постановка задачи
Задание: получить приблизительное решение данной краевой задачи уравнения в частных производных математической физики методом сеток.
(1)
0<
x,y<1
(2).
Данное уравнение является уравнением гиперболического типа и физически отражает процесс колебания струны. Искомое решение U=U(x,y) - вертикальное отклонение струны в точке х в момент времени y.
Данная краевая задача состоит в нахождении функции U=U(x,y), удовлетворяющей уравнению (1), а также заданным начальным и граничным условиям (2).
Граничное условие первого рода U=U(1,y) определяет закон движения правого конца струны. Для левого конца в качестве граничного условия задано так называемое условие «упругого конца» (граничное условие третьего рода):
Ux (0,y)=U(0,y) .
Начальные условия U(x,0)=0 и Uy(x,0)=1 задают начальную форму струны и распределение скоростей в начальный момент времени.
Функция f(x,y) имеет смысл плотности внешней силы, рассчитанной на единицу длины.
РЕШЕНИЕ ЗАДАЧИ С ПОМОЩЬЮ НЕЯВНОЙ РАЗНОСТНОЙ СХЕМЫ
Рассмотрим снова нашу краевую задачу . Для аппроксимации уравнения используем Т-образный пятиточечный шаблон . Уравнение аппроксимируется следующими уравнениями :
1.
Аппроксимация дифференциального
уравнения
Обозначим g=/h и запишем (1) к виду удобному для применения метода прогонки:
2. Аппроксимация 1-го начального условия
(3)
3. Аппроксимация 2-го начального условия
Для более точного аппроксимирования 2-го начального условия разложим u(x,y )
в окрестности точки (x,0) по формуле Тейлора и используя 1-ое и 2-ое начальное условия перейдем к конечным разностям:
Запишем (4) к виду удобному для применения метода прогонки:
4. Аппроксимация 2-го граничного условия
5. Аппроксимация 1-го граничного условия
в
узле(0,1):
(5) при i=0 будет:
исключая фиктивный узел, получим:
(7)
при
j
2,
в узле (0,j):
(2):
,
тогда:
(8)
6. Вычисления прогоночных коэффициентов
Сначала найдем u(i,j) на слое j=1. Определим прогоночные коэффициенты.
Обозначим
,
тогда, используя (7),(5) и (6) получим систему:
получим прогоночные коэффициенты:
Теперь вычислим граничные прогоночные коэффициенты:
Методом прогонки находим u(i,1) где i=1...m ;
Теперь зная значения j=0,1 находим u(i,j ) где j=2...n.
Теперь вычислим граничные прогоночные коэффициенты:
Методом прогонки находим u(i,j) где i=1...m ,j=2..n ;
Текст программы в среде Matlab приведен в приложении (стр. 4).
ПРИЛОЖЕНИЕ
Программа для численного решения задачи на ПК в среде MATLAB.
% NEYAV
% Решение краевой задачи с применением НЕЯВНОЙ разностной схемы
%------------- ОПРЕДЕЛЕНИЕ ЧИСЛА РАЗБИЕНИЙ ПО ОСЯМ x,y---------------
M=10; N=10;
%---ОПРЕДЕЛЕНИЕ ШАГОВ СЕТКИ:a=b/c,ГДЕ b-ПРЕДЕЛ ВЫЧИСЛЕНИЙ ПО ОСИ x ИЛИ y
h=1/M; t=1/N;
%--------------ОПРЕДЕЛЕНИЕ РАБОЧИХ КОНСТАНТ ---------------------------
u=zeros(M+1,N+1);
h2=h^2; t2=t^2; g2=t2/h2;
%------------- ЗАПОЛНЕНИЕ МАТРИЦЫ U(x,y) 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,y) 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)=g2; C(1)=1+h*g2+g2; C(M+1)=1;
F(1)=t+5*t2; F(M+1)=t;
%------------ ОПРЕДЕЛЕНИЕ U(i,2) МЕТОДОМ ПРОГОНКИ---------------
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,y) ---------------------------
%------------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)=2*g2; C(1)=1+2*h*g2+2*g2; F(1)=t2*(t+5*t2);
C(M+1)=1;
%------------ ОПРЕДЕЛЕНИЕ U(i,j) МЕТОДОМ ПРОГОНКИ---------------
A1(1)=B(1)/C(1); B1(1)=F(1)/C(1);
for j=2:N+1,
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;
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;
F(M+1)=j*t;
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+1;
u1=u(i,j+1)
plot(i,u1),pause;
hold on
end;hold off
mesh(u);
Результаты программы при шаге 0.1:
Значения U(x,y)
Столбцы с 0-го по 5-ый:
0 0.1414 0.1965 0.3069 0.4186 0.5261
0 0.1469 0.3137 0.4903 0.6690 0.8410
0 0.1471 0.3555 0.5927 0.8360 1.0698
0 0.1454 0.3659 0.6355 0.9256 1.2116
0 0.1429 0.3630 0.6426 0.9560 1.2744
0 0.1399 0.3538 0.6292 0.9443 1.2715
0 0.1366 0.3413 0.6025 0.9015 1.2139
0 0.1331 0.3253 0.5635 0.8308 1.1076
0 0.1288 0.3029 0.5074 0.7284 0.9535
0 0.1210 0.2663 0.4239 0.5869 0.7506
0 0.1000 0.2000 0.3000 0.4000 0.5000
Столбцы с 6-го по 10-ый:
0.6237 0.7060 0.7686 0.8077 0.8211
0.9971 1.1289 1.2290 1.2916 1.3130
1.2817 1.4608 1.5971 1.6830 1.7139
1.4731 1.6944 1.8630 1.9699 2.0107
1.5713 1.8245 2.0183 2.1426 2.1934
1.5819 1.8504 2.0585 2.1952 2.2563
1.5136 1.7769 1.9854 2.1278 2.1992
1.3745 1.6129 1.8077 1.9480 2.0289
1.1712 1.3701 1.5393 1.6705 1.7589
0.9106 1.0613 1.1974 1.3140 1.4084
0.6000 0.7000 0.8000 0.9000 1.0000
Значения U(x,y) при шаге 0.05
Columns 1 through 7
0 0.0607 0.0787 0.1167 0.1550 0.1935 0.2318
0 0.0620 0.1219 0.1809 0.2402 0.2999 0.3592
0 0.0622 0.1384 0.2196 0.3017 0.3831 0.4634
0 0.0622 0.1443 0.2393 0.3402 0.4425 0.5438
0 0.0620 0.1460 0.2478 0.3611 0.4802 0.6006
0 0.0617 0.1460 0.2504 0.3705 0.5010 0.6366
0 0.0614 0.1453 0.2500 0.3730 0.5099 0.6560
0 0.0611 0.1441 0.2482 0.3715 0.5112 0.6633
0 0.0608 0.1428 0.2455 0.3678 0.5078 0.6623
0 0.0604 0.1413 0.2424 0.3629 0.5015 0.6558
0 0.0600 0.1398 0.2391 0.3573 0.4935 0.6457
0 0.0596 0.1382 0.2356 0.3513 0.4843 0.6332
0 0.0592 0.1366 0.2320 0.3449 0.4742 0.6184
0 0.0588 0.1350 0.2283 0.3381 0.4630 0.6014
0 0.0584 0.1334 0.2245 0.3306 0.4502 0.5811
0 0.0580 0.1317 0.2201 0.3219 0.4347 0.5563
0 0.0576 0.1297 0.2149 0.3108 0.4150 0.5251
0 0.0571 0.1272 0.2076 0.2956 0.3888 0.4854
0 0.0565 0.1230 0.1964 0.2739 0.3538 0.4353
0 0.0549 0.1153 0.1784 0.2427 0.3079 0.3736
0 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000
Columns 8 through 14
0.2693 0.3055 0.3401 0.3727 0.4030 0.4309 0.4562
0.4174 0.4735 0.5271 0.5776 0.6246 0.6679 0.7070
0.5420 0.6180 0.6907 0.7594 0.8236 0.8827 0.9361
0.6427 0.7386 0.8304 0.9175 0.9990 1.0742 1.1422
0.7194 0.8348 0.9458 1.0511 1.1499 1.2412 1.3238
0.7729 0.9069 1.0364 1.1598 1.2757 1.3828 1.4796
0.8062 0.9562 1.1028 1.2434 1.3757 1.4980 1.6084
0.8229 0.9854 1.1464 1.3022 1.4495 1.5859 1.7089
0.8272 0.9980 1.1696 1.3375 1.4974 1.6459 1.7799
0.8225 0.9974 1.1754 1.3513 1.5203 1.6780 1.8207
0.8114 0.9865 1.1665 1.3459 1.5196 1.6828 1.8312
0.7954 0.9675 1.1451 1.3234 1.4971 1.6614 1.8121
0.7752 0.9412 1.1127 1.2853 1.4544 1.6156 1.7648
0.7506 0.9079 1.0698 1.2328 1.3933 1.5474 1.6914
0.6843 0.8166 0.9513 1.0867 1.2209 1.3518 1.4767
0.7208 0.8667 1.0162 1.1665 1.3150 1.4587 1.5946
0.6393 0.7563 0.8748 0.9939 1.1122 1.2284 1.3404
0.5180 0.6016 0.6859 0.7705 0.8551 0.9388 1.0210
0.5843 0.6848 0.7863 0.8883 0.9900 1.0903 1.1879
0.4399 0.5066 0.5737 0.6410 0.7082 0.7751 0.8413
0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500
Columns 15 through 21
0.4785 0.4975 0.5130 0.5245 0.5316 0.5341 0.5316
0.7416 0.7711 0.7951 0.8128 0.8239 0.8277 0.8238
0.9833 1.0237 1.0563 1.0806 1.0957 1.1010 1.0960
1.2022 1.2534 1.2948 1.3255 1.3446 1.3514 1.3454
1.3966 1.4585 1.5084 1.5453 1.5682 1.5765 1.5698
1.5649 1.6372 1.6952 1.7379 1.7644 1.7741 1.7668
1.7054 1.7874 1.8530 1.9012 1.9310 1.9423 1.9347
1.8167 1.9075 1.9800 2.0331 2.0663 2.0792 2.0718
1.8972 1.9958 2.0745 2.1322 2.1686 2.1834 2.1770
1.9458 2.0510 2.1351 2.1972 2.2368 2.2541 2.2492
1.9618 2.0722 2.1610 2.2271 2.2703 2.2904 2.2879
1.9456 2.0595 2.1519 2.2218 2.2685 2.2921 2.2929
1.8984 2.0137 2.1085 2.1815 2.2319 2.2594 2.2642
1.8221 1.9365 2.0322 2.1074 2.1611 2.1927 2.2023
1.7194 1.8305 1.9251 2.0012 2.0575 2.0931 2.1081
1.5931 1.6983 1.7898 1.8652 1.9232 1.9626 1.9833
1.4462 1.5432 1.6293 1.7024 1.7607 1.8034 1.8299
1.2811 1.3681 1.4470 1.5159 1.5734 1.6186 1.6510
1.1004 1.1758 1.2458 1.3092 1.3648 1.4120 1.4502
0.9061 0.9690 1.0292 1.0860 1.1390 1.1876 1.2317
0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000
