Алгоритм построения характеристического многочлена заключается в следующем. Выберем некоторый узел сетки с индексами \((j, n)\) (здесь для индекса по пространству использована переменная \(j\), а не i, как раньше, чтобы избежать путаницы с мнимой единицей \(i\)). Каждое значение сеточной функции, входящее в разностную схему, следует заменить на решение в виде гармоники:
Полученное выражение, после упрощения, следует трактовать как полином относительно \(q\). Данный алгоритм реализуется следующим кодом:
BuildPoly[sh_] :=Module[{p}, | |
p=sh /. u[ii_, nn_] ->Exp[(i - ii)*I*w]*q^(nn - n + 1); | (* подстановка гармоники *) |
If[Coefficient[p, q, 0] == 0, p = p/q]; | (* убираем тривиальное решение *) |
Return @Numerator@Together @ p; | (* избавляемся от знаменателя *) |
]; |
Для рассматриваемых схем характеристические полиномы будут либо линейными (для двуслойных по времени схем), либо квадратичными (для трехслойных схем). Корень линейных полиномов \(b\cdot x+c=0\)с комплексными коэффициентами также является комплексным:
Квадратичные полиномы имеют два корня. Представив полином в виде
где \(a,\; b,\; c\)- некоторые комплексные выражения, решение квадратичного уравнения можно записать в стандартном виде