Я должен выполнить численное решение системы ОДЫ, которая имеет следующий вид:Численного устойчивость системы ОДЫ
du_j/dt = f_1(u_j, v_j, t) + g_1(t)v_(j-1) + h_1(t)v_(j+1),
dv_j/dt = f_2(u_j, v_j, t) + g_2(t)u_(j-1) + h_2(t)u_(j+1),
, где u_j(t)
и v_j(t)
являются комплексными скалярными функциями времени t
, f_i
и g_i
являются заданные функции и j = -N,..N
. Это проблема начального значения, и задача состоит в том, чтобы найти решение в определенное время T
.
Если g_i(t) = h_i(t) = 0
, то уравнения для разных значений j
могут быть решены независимо. В этом случае я получаю стабильные и точные решения с помощью метода Рунге-Кутты четвертого порядка. Однако, как только я включаю муфты, результаты становятся очень неустойчивыми относительно шага временной сетки и явного вида функций g_i
, h_i
.
Я думаю, что разумно попытаться использовать неявную схему Рунге-Кутты, которая может быть стабильной в таком случае, но если я это сделаю, мне придется оценить обратную сторону огромной матрицы размера 4*N*c
, где c
зависит от порядка метода (например, c = 3
для метода Гаусса-Лежандра) на каждом шаге. Конечно, матрица будет в основном содержать нули и иметь трехдиагональную форму блока, но она по-прежнему кажется очень трудоемкой.
Поэтому у меня есть два вопроса:
Есть стабильный явный метод, который работает даже тогда, когда функция связи
g_i
иh_i
являются (очень) большой?Если неявный метод, действительно, является хорошим решением, что является самым быстрым методом инверсии блочной трехдиагональной матрицы? В настоящий момент я просто выполняю простой метод Гаусса, избегая избыточных операций, которые возникают из-за специфической структуры матрицы.
Дополнительная информация и сведения, которые могут помочь нам:
Я использую Fortran 95.
я в настоящее время считают
g_1(t) = h_1(t) = g_2(t) = h_2(t) = -iAF(t)sin(omega*t)
, гдеi
мнимая единица,A
иomega
приведены константы иF(t)
- это гладкая огибающая, идущая медленно, сначала от 0 до 1, а затем от 1 до 0, поэтомуF(0) = F(T) = 0
.Первоначально
u_j = v_j = 0
доj = 0
. Функцииu_j
иv_j
с большими абсолютными значениямиj
чрезвычайно малы для всехt
, поэтому начальный пик не достигает «границ».