Нужно решить численно начально-краевую задачу для уравнения переноса
Начальное условие:
и
и граничное условие
.
Нужно использовать начальную сетку из 41 точки при
и провести расчёт до значения
. Решить для чисел Куранта
. Рекомендованная разностная схема Лакса-Вендроффа.
Моё решение:
Схема Лакса-Вендроффа:
Выражаю
:
В нашем случае (для начала число куранта будет 1.0)
,
:
Ну и тут получается бред, что
(*)
В программе для начала, чтобы не путаться, вбил статический массив (с учётом шага по вертикали и горизонтали по 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 получается тоже самое, хотя формула (*) уже не выглядит такой тривиальной.
Я понимаю, что ошибся, и что ошибка моя в самом начале и связана, как мне кажется, с недопониманием. Прошу навести на верный путь .