Условие задачи:
![$\frac{\partial^2 u}{\partial t^2}=\frac{\partial^2 u}{\partial^2 x}+2\frac{\partial^2 u}{\partial x^2}-2u$ $\frac{\partial^2 u}{\partial t^2}=\frac{\partial^2 u}{\partial^2 x}+2\frac{\partial^2 u}{\partial x^2}-2u$](https://dxdy-03.korotkov.co.uk/f/a/4/8/a487419c650c6f2f01e6350c2532dfd682.png)
(1)
Граничные условия:
![$u(0,t)=\cos(2t)$ $u(0,t)=\cos(2t)$](https://dxdy-01.korotkov.co.uk/f/0/2/c/02c61142c4bc61bd316a30a0b8b5844682.png)
(2)
![$u(1.57,t)=0$ $u(1.57,t)=0$](https://dxdy-01.korotkov.co.uk/f/0/e/e/0eec5858c3c1d5367a91b8559ae3a09d82.png)
(3)
Начальные условия:
![$u(x,0)=e^{-x}\cos(x)$ $u(x,0)=e^{-x}\cos(x)$](https://dxdy-03.korotkov.co.uk/f/6/c/c/6cc379bc7ff2eee66f67bfc39383222b82.png)
(4)
![$\frac{\partial u}{\partial t}(x,0)=0$ $\frac{\partial u}{\partial t}(x,0)=0$](https://dxdy-03.korotkov.co.uk/f/e/2/3/e2366dc1d647191fccb6f7f05bcacfb382.png)
(5)
![$0 \leqslant x \leqslant 1.57$ $0 \leqslant x \leqslant 1.57$](https://dxdy-03.korotkov.co.uk/f/a/9/e/a9e32d80aa9512e35dca17b76e44626f82.png)
![$0 \leqslant t \leqslant t_{\max}$ $0 \leqslant t \leqslant t_{\max}$](https://dxdy-03.korotkov.co.uk/f/2/d/e/2dea5fde0194c0527e5fad238fae762082.png)
Нужно решить методом конечных разностей.
![$t_{\max}$ $t_{\max}$](https://dxdy-03.korotkov.co.uk/f/a/a/7/aa726b42f6cd5b0b0e0d75a1a3f9923982.png)
, а также шаги по пространственной и временной координатам взять произвольные. Также надо сравнить на графиках полученное решение с
![$u(x,t)=e^{-x}\cos(x)\cos(2t)$ $u(x,t)=e^{-x}\cos(x)\cos(2t)$](https://dxdy-04.korotkov.co.uk/f/b/a/f/bafeb50cba9674fd698455b62077d4f782.png)
, эта функция является решением уравнения.
Я вроде как решил, но графики совсем разные получаются, ошибку не могу никак найти.
![Sad :-(](./images/smilies/icon_sad.gif)
Решал с помощью неявной конечно-разностной схемы.
Шаг по каждой из переменных взял 0.157,
![$t_{\max}=1.57$ $t_{\max}=1.57$](https://dxdy-03.korotkov.co.uk/f/6/4/e/64e3aa339a6a471c1e59aa3e87356cd082.png)
. Ввёл сетку:
![$x_j=0.157j$ $x_j=0.157j$](https://dxdy-03.korotkov.co.uk/f/2/1/1/211c071777b26a7f000bbed47e5ee24f82.png)
![$t^k=0.157k$ $t^k=0.157k$](https://dxdy-03.korotkov.co.uk/f/2/6/0/260163b59c4260079ea3c775ba803d4e82.png)
![$0 \leqslant j,k \leqslant 10$ $0 \leqslant j,k \leqslant 10$](https://dxdy-03.korotkov.co.uk/f/2/1/e/21e639c02df03e4049a3d1a2e73c4f5f82.png)
Обозначил за
![$u_j^k$ $u_j^k$](https://dxdy-02.korotkov.co.uk/f/9/c/7/9c7e110204025ece3830fc271f88fb0d82.png)
значение
![$u(x_j,t^k)$ $u(x_j,t^k)$](https://dxdy-01.korotkov.co.uk/f/4/6/3/46347d33d49e090d6644cb951846f8c982.png)
. Значения
![$u_j^0$ $u_j^0$](https://dxdy-04.korotkov.co.uk/f/b/4/4/b44645d9b4ad045766574383d255f6a482.png)
вычисляются из (4),
![$u_0^0,u_1^0,...,y_{10}^0$ $u_0^0,u_1^0,...,y_{10}^0$](https://dxdy-01.korotkov.co.uk/f/c/6/9/c6950f11ba670a42d68ce2efb41b7d8382.png)
равны:
1, 0.84419, 0.6948, 0.55639, 0.43184, 0.32265, 0.2293, 0.15144, 0.088178, 0.03825, 0.0001
![$u_j^1=u_j^0$ $u_j^1=u_j^0$](https://dxdy-04.korotkov.co.uk/f/f/6/9/f69e27328e917e436346a5c376583ac382.png)
из (5). Чтобы найти значение функции на следующих временных слоях, надо аппроксимировать значения производных в уравнении (1), здесь h_x и h_t - это шаги по переменным, равные 0.157:
![$\frac{u^j_k-2u^j_{k-1}+u^j_{k-2}}{{h_t}^2}=\frac{u_{j+1}^k-2u_j^k+u_{j-1}^k}{{h_x}^2}+2\frac{u_{j+1}^k-u_j^k}{h_x}-2u_j^k$ $\frac{u^j_k-2u^j_{k-1}+u^j_{k-2}}{{h_t}^2}=\frac{u_{j+1}^k-2u_j^k+u_{j-1}^k}{{h_x}^2}+2\frac{u_{j+1}^k-u_j^k}{h_x}-2u_j^k$](https://dxdy-02.korotkov.co.uk/f/5/9/8/598182b0c9ada1343f7e520471b0649b82.png)
(6)
Уравнения (2)-(3) подставляются значениями сетки очевидно, тогда
![$u_0^2, u_0^3, ..., u_0^{10}: 0.8092, 0.58817, 0.30962, 0.0008, -0.30811, -0.58688, -0.80827, -0.95061, -1. $ $u_0^2, u_0^3, ..., u_0^{10}: 0.8092, 0.58817, 0.30962, 0.0008, -0.30811, -0.58688, -0.80827, -0.95061, -1. $](https://dxdy-01.korotkov.co.uk/f/8/7/3/8732135b33d5deda070173c1b907666d82.png)
![$u_{10}^k=0$ $u_{10}^k=0$](https://dxdy-04.korotkov.co.uk/f/7/f/9/7f9149f96a72a43aa32269c4e164764d82.png)
.
Тогда относительно переменных
![$u_j^k$ $u_j^k$](https://dxdy-02.korotkov.co.uk/f/9/c/7/9c7e110204025ece3830fc271f88fb0d82.png)
на каждом временном слое, начиная с k=2, получаем трёхдиагональную СЛАУ, которую можно решить методом прогонки. Коэффициенты уравнений для временного слоя k:
![$a_1=c_1=a_{10}=c_{10}=0; b_1=b_{10}=1$ $a_1=c_1=a_{10}=c_{10}=0; b_1=b_{10}=1$](https://dxdy-02.korotkov.co.uk/f/1/6/4/1644f7ecf3f88f4de55563e085bef77382.png)
- эти коэффициенты очевидно вытекают из (2)-(3).
Остальные коэффициенты берём из (6):
![$a_j=\frac1{{h_x}^2}$ $a_j=\frac1{{h_x}^2}$](https://dxdy-01.korotkov.co.uk/f/8/e/6/8e674800b5ccca97bb8191046f5a4bc582.png)
![$b_j=-\frac2{{h_x}^2}-\frac2{h_x}-2-\frac1{{h_t}^2}$ $b_j=-\frac2{{h_x}^2}-\frac2{h_x}-2-\frac1{{h_t}^2}$](https://dxdy-03.korotkov.co.uk/f/2/6/a/26aa47b095c7f4992afa6cee5ecf500d82.png)
![$c_j=\frac1{{h_x}^2}+\frac2{h_x}$ $c_j=\frac1{{h_x}^2}+\frac2{h_x}$](https://dxdy-04.korotkov.co.uk/f/b/4/0/b400593f51a6b77af7e8ceb8873c30cb82.png)
![$d_j=\frac{-2u_j^{k-1}-u_j^{k-2}}{{h_t}^2}$ $d_j=\frac{-2u_j^{k-1}-u_j^{k-2}}{{h_t}^2}$](https://dxdy-01.korotkov.co.uk/f/8/e/f/8ef579d088592cd7514f3d8b7dffeb3782.png)
Итоговые результаты вычисления (
![$u_j^k$ $u_j^k$](https://dxdy-02.korotkov.co.uk/f/9/c/7/9c7e110204025ece3830fc271f88fb0d82.png)
находится в j-той строке и k-том столбце):
![Изображение](http://s7.postimg.org/dqj7uhl57/037.png)
В то время как решение уравнения такое:
![Изображение](http://s21.postimg.org/7xnzukvx3/038.png)
Как видно, совсем не то, что надо
![Sad :-(](./images/smilies/icon_sad.gif)
И ещё видно, что моё решение сильно возрастает с увеличением t.
Код GNU/Octave (свободный аналог Matlab) для решения уравнения:
Код:
nx=11; % количество шагов по Ox
nt=11; % количество шагов по Ot
hx=0.157; % шаг по Ox
ht=0.157; % шаг по Ot
disp('начальное условие');
for x=1:nx;
u(x,1)=u(x,2)=exp(-(x-1)*hx)*cos((x-1)*hx); % начальное условие
disp('x');
disp(x);
disp('u(x,1)');
disp(u(x,1));
end;
disp('граничные условия');
for t=3:nt;
fl(t)=cos(2*(t-1)*ht); % левое граничное условие
fr(t)=0; % правое граничное условие
end;
disp('левое граничное условие');
disp(fl);
disp('правое граничное условие');
disp(fr);
for t=3:nt;
% нахождение коэффициентов a, b, c, d для прогонки
a(1)=c(1)=a(nx)=c(nx)=0;
b(1)=b(nx)=1;
d(1)=fl(t);
d(nx)=fr(t);
for i=2:nx-1;
a(i)=1/hx^2;
b(i)=-2/hx^2-2/hx-2-1/ht^2;
c(i)=1/hx^2+2/hx;
d(i)=(-2*u(i,t-1)-u(i,t-2))/ht^2;
end;
pa(1)=-c(1)/b(1); % коэффициент прогонки A
pb(1)=d(1)/b(1); % коэффициент прогонки B
% нахождение остальных коэффициентов прогонки
disp('a');
disp(a);
disp('b');
disp(b);
disp('c');
disp(c);
disp('d');
disp(d);
for i=2:nx;
pa(i)=-c(i)/(b(i)+a(i)*pa(i-1));
pb(i)=(d(i)-a(i)*pb(i-1))/(b(i)+a(i)*pa(i-1));
end;
disp('pa');
disp(pa);
disp('pb');
disp(pb);
% обратный шаг: нахождение u(x,t)
u(nx,t)=pb(nx);
for i=1:nx-1;
u(nx-i,t)=pa(nx-i)*u(nx-i+1,t)+pb(nx-i);
end;
prov(1)=d(1)-b(1)*u(1,t)-c(1)*u(2,t);
prov(nx)=d(nx)-a(nx)*u(nx-1,t)-b(nx)*u(nx,t);
for i=2:nx-1;
prov(i)=d(i)-a(i)*u(i-1,t)-b(i)*u(i,t)-c(i)*u(i+1,t);
end;
disp('prov');
disp(prov);
end;
for t=1:nt;
for x=1:nx;
g(x,t)=exp(-(x-1)*hx)*cos((x-1)*hx)*cos(2*(t-1)*ht);
end;
end;
disp(g);