Untitled
Хорошо, давайте посмотрим на задачу. Нужно построить разностные схемы первого и второго порядков аппроксимации для однородного уравнения переноса с постоянным коэффициентом a(x, t) = const. Шаблон состоит из трех точек: (x_m, t_n), (x_m, t_{n+1}), (x_{m+1}, t_n). Также дано условие, что r = rh, где r — константа. Сначала вспомню, как выглядит уравнение переноса. Обычно это: u_t + a u_x = 0. Поскольку a — константа, упрощаем. Теперь нужно построить схемы на заданном шаблоне. Шаблон включает текущий узел (m,n), следующий по времени (m,n+1) и соседний по пространству (m+1,n). То есть это несимметричный шаблон, возможно, похожий на схему против потока (upwind), но нужно проверить. Для первого порядка аппроксимации. Обычно схема против потока (upwind) использует разности назад по пространству и вперед по времени. Если a положительно, то берем разность слева. Но в данном случае шаблон включает точку (m+1,n). Возможно, здесь a отрицательно? Или нужно использовать другую комбинацию. Допустим, a > 0. Тогда характеристика идет слева направо. Схема против потока использует разностное отношение по пространству назад: (u_m^n - u_{m-1}^n)/h. Но в шаблоне у нас есть (m+1,n), а не (m-1,n). Значит, возможно, a < 0, и тогда направление потока справа налево, и нужно использовать разность вперед. Но тогда как совместить с шаблоном? Возможно, здесь параметр r = a * τ / h, где τ — шаг по времени, h — шаг по пространству. Условие r = rh, вероятно, опечатка. Может быть, r = τ/h * a, и r = const? Тогда нужно строить схему с учетом этого соотношения. Для аппроксимации производной по времени используем разность вперед: (u_m^{n+1} - u_m^n)/τ. Для производной по пространству, если a положительно, нужно брать разность назад: (u_m^n - u_{m-1}^n)/h. Но в шаблоне нет точки m-1. Значит, если a отрицательна, то берем разность вперед: (u_{m+1}^n - u_m^n)/h. Но в задаче шаблон включает точку (m+1, n), поэтому возможно, что a отрицательная. Тогда производная по пространству аппроксимируется как (u_{m+1}^n - u_m^n)/h. Тогда уравнение переноса можно аппроксимировать так: (u_m^{n+1} - u_m^n)/τ + a (u_{m+1}^n - u_m^n)/h = 0. Умножаем на τ: u_m^{n+1} = u_m^n - a τ/h (u_{m+1}^n - u_m^n). Если r = a τ / h, то тогда: u_m^{n+1} = u_m^n - r (u_{m+1}^n - u_m^n) = (1 + r) u_m^n - r u_{m+1}^n. Это явная схема. Проверим порядок аппроксимации. Для этого разложим все члены в ряд Тейлора вокруг точки (x_m, t_n). Для производной по времени: (u_m^{n+1} - u_m^n)/τ = u_t + (τ/2) u_tt + O(τ²). Для производной по пространству: (u_{m+1}^n - u_m^n)/h = u_x + (h/2) u_xx + O(h²). Подставляем в уравнение: u_t + a u_x + (τ/2) u_tt + a (h/2) u_xx + ... = 0. Исходное уравнение u_t + a u_x = 0, поэтому погрешность аппроксимации: O(τ + h). Это первый порядок. Значит, такая схема имеет первый порядок аппроксимации. Подходит для первого пункта. Теперь второй порядок. Нужно, чтобы погрешность была O(τ² + h²). Как это сделать на данном шаблоне? Обычно для повышения порядка используют симметричные разности или методы типа Лакса-Вендроффа. Но шаблон ограничен тремя точками. Метод Лакса-Вендроффа требует больше точек. Попробуем использовать схему с весами. Или использовать разности более высокого порядка. Например, для производной по времени можно взять среднее значение между n и n+1 слоем, но у нас нет точки m на n+1 для пространственной производной. Другой подход: использовать разложение в ряд Тейлора для u_m^{n+1} и u_{m+1}^n. Запишем уравнение переноса u_t = -a u_x. Из этого можно выразить производные высших порядков по времени через пространственные. Например, u_tt = -a u_{xt} = -a (u_t)_x = -a (-a u_x)_x = a² u_xx. Теперь разложим u_m^{n+1}: u_m^{n+1} = u_m^n + τ u_t + (τ²/2) u_tt + O(τ³) = u_m^n - a τ u_x + (a² τ² / 2) u_xx + O(τ³). Аппроксимируем u_x и u_xx через доступные точки. Для u_x можно взять центральную разность, но у нас нет точки m-1. Есть только m и m+1. Значит, можно использовать разность вперед: (u_{m+1}^n - u_m^n)/h, но это первый порядок. Для второго порядка нужно что-то другое. Возможно, использовать комбинацию разностей по времени и пространству. Например, метод Лакса-Вендроффа строится как: u_m^{n+1} = u_m^n - a τ (u_{m+1}^n - u_{m-1}^n)/(2h) + (a² τ² / 2)(u_{m+1}^n - 2 u_m^n + u_{m-1}^n)/h². Но у нас нет точки m-1. Поэтому такой метод не подходит. Может быть, использовать точки (m, n+1), (m, n), (m+1, n) и попробовать создать схему второго порядка. Например, аппроксимировать производную по времени как (u_m^{n+1} - u_m^n)/τ, а производную по пространству как комбинацию значений на n и n+1 слоях. Но это может привести к неявной схеме, но шаблон явный. Или использовать среднее по времени для пространственной производной. Например: (u_x)_{m}^{n+1/2} ≈ (u_{m+1}^n - u_m^n)/h + (u_{m+1}^{n+1} - u_m^{n+1})/h)/2. Но тогда появляется u_{m+1}^{n+1}, которой нет в шаблоне. Значит, не подходит. Возможно, здесь нельзя достичь второго порядка на данном шаблоне. Тогда ответ: схема первого порядка возможна, как построенная выше, а второго порядка — нет. Но нужно проверить, возможно ли комбинировать производные. Например, используя разложение: u_m^{n+1} = u_m^n - a τ (du/dx)_m^n + (a² τ² / 2) (d²u/dx²)_m^n. Если аппроксимировать du/dx как (u_{m+1}^n - u_m^n)/h (первый порядок), а d²u/dx² как (u_{m+1}^n - 2 u_m^n + u_{m-1}^n)/h², но u_{m-1} отсутствует. Значит, нельзя. Следовательно, на данном шаблоне схему второго порядка построить невозможно. Поэтому ответ: схема первого порядка строится, как показано выше, а второго — нет.
Leave a Comment