Нужно решить численно начально-краевую задачу для уравнения переноса
![$u_t+u_x=0$ $u_t+u_x=0$](https://dxdy-02.korotkov.co.uk/f/d/4/e/d4e92c92e16597806a3f445b9969789282.png)
Начальное условие:
![$u(0,x) = 1, x\leqslant5 $ $u(0,x) = 1, x\leqslant5 $](https://dxdy-04.korotkov.co.uk/f/7/1/0/71034baf7eabb619529a530d12d20d0c82.png)
и
![$u(0,x) = 0, 5\leqslant x \leqslant20$ $u(0,x) = 0, 5\leqslant x \leqslant20$](https://dxdy-04.korotkov.co.uk/f/3/6/3/363bcd20c28fc581876a36a119c8a64482.png)
и граничное условие
![$u(t,0) = 1$ $u(t,0) = 1$](https://dxdy-04.korotkov.co.uk/f/b/f/9/bf9b18d57997ad982e9422265f1df6f982.png)
.
Нужно использовать начальную сетку из 41 точки при
![$h = 0,5$ $h = 0,5$](https://dxdy-02.korotkov.co.uk/f/1/f/f/1ff5f19c0268a5785b6c33a49f23afc582.png)
и провести расчёт до значения
![$T = 9$ $T = 9$](https://dxdy-04.korotkov.co.uk/f/f/a/4/fa488e4e3c2b91199780f158772e429f82.png)
. Решить для чисел Куранта
![$\tau/h = 1.0, 0.6, 0.3$ $\tau/h = 1.0, 0.6, 0.3$](https://dxdy-01.korotkov.co.uk/f/8/f/4/8f4e05f2c2f4425ea70a921c95be527282.png)
. Рекомендованная разностная схема Лакса-Вендроффа.
Моё решение:
Схема Лакса-Вендроффа:
![$\frac{u_j^{i+1} - u_j^i}{\tau} + a \frac{u_{j+1}^i - u_{j-1}^i}{2h} - \frac{a^2\tau}{2}\frac{u_{j+1}^i - 2u_j^i + u_{j-1}^i}{h^2} = 0 $ $\frac{u_j^{i+1} - u_j^i}{\tau} + a \frac{u_{j+1}^i - u_{j-1}^i}{2h} - \frac{a^2\tau}{2}\frac{u_{j+1}^i - 2u_j^i + u_{j-1}^i}{h^2} = 0 $](https://dxdy-02.korotkov.co.uk/f/1/1/a/11a5388e1f8e14a3094af8963fc34a2482.png)
Выражаю
![$u_j^{i+1}$ $u_j^{i+1}$](https://dxdy-01.korotkov.co.uk/f/c/d/5/cd536238a17075953c64f9e83d5a93ad82.png)
:
![$u_j^{i+1} = u_j^i + \frac{a^2\tau^2}{2h^2}(u_{j+1}^i - 2u_j^i + u_{j-1}^i) - \frac{a\tau}{2h}(u_{j+1}^i - u_{j-1}^i)$ $u_j^{i+1} = u_j^i + \frac{a^2\tau^2}{2h^2}(u_{j+1}^i - 2u_j^i + u_{j-1}^i) - \frac{a\tau}{2h}(u_{j+1}^i - u_{j-1}^i)$](https://dxdy-01.korotkov.co.uk/f/c/e/1/ce169c969e7fac2b77b15a272299fc5582.png)
В нашем случае (для начала число куранта будет 1.0)
![$a = 1$ $a = 1$](https://dxdy-04.korotkov.co.uk/f/f/0/a/f0ab30e11910c2d2688aac5ed2ced75882.png)
,
![$\tau = 0.5$ $\tau = 0.5$](https://dxdy-03.korotkov.co.uk/f/e/8/3/e83cc2c4e398d6d50cbcd31a2efcb1c382.png)
:
![$u_j^{i+1} = u_j^i + \frac{1}{2}(u_{j+1}^i - 2u_j^i + u_{j-1}^i) - \frac{1}{2}(u_{j+1}^i - u_{j-1}^i)$ $u_j^{i+1} = u_j^i + \frac{1}{2}(u_{j+1}^i - 2u_j^i + u_{j-1}^i) - \frac{1}{2}(u_{j+1}^i - u_{j-1}^i)$](https://dxdy-02.korotkov.co.uk/f/1/7/0/1702f8c380c20c90070ee7bacc904a0e82.png)
Ну и тут получается бред, что
![$u_j^{i+1} = u_{j-1}^i$ $u_j^{i+1} = u_{j-1}^i$](https://dxdy-04.korotkov.co.uk/f/7/1/8/718cfd0d1c3cb443d996fd6b25dc777082.png)
(*)
В программе для начала, чтобы не путаться, вбил статический массив (с учётом шага по вертикали и горизонтали по 0.5):
Код:
double T = 9;
double L = 20;
double u[19][41];
Дальше задавал граничные и начальные условия:
Код:
for (int i = 0; i <= 18; i++){
u[i][0] = 1;
}
for (int j = 0; j <= 10; j++){
u[0][j] = 1;
}
for (int j = 11; j <= 40; j++){
u[0][j] = 0;
}
Ну и для следующего момента времени функцию u выражал по вышеприведенной формуле:
Код:
for (int i = 0; i <= 17; i++){
for (int j = 1; j <= 39; j++) {
u[i + 1][j] = u[i][j] + 1 / 2 * (u[i][j + 1] - 2 * u[i][j] + u[i][j - 1]) - 1 / 2 * (u[i][j + 1] - u[i][j - 1]);
}
}
И вот, собственно, результат. Очевидно, это не то.
При числах куранта 0.6 и 0.3 получается тоже самое, хотя формула (*) уже не выглядит такой тривиальной.
![Изображение](https://pp.userapi.com/c830508/v830508379/109dd3/5jIPRMxTKLc.jpg)
Я понимаю, что ошибся, и что ошибка моя в самом начале и связана, как мне кажется, с недопониманием. Прошу навести на верный путь .