求解FFT系数的线性系统

时间:2017-06-23 09:40:54

标签: arrays matlab matrix fortran octave

如果我想在(2d)空间中使用FT在周期域中集成热方程,使用Crank-Nicolson我会写:

(1-kappa*dt*L/2)ftT(now)=(1+kappa*dt*L/2)ftT(last)

其中L是一个数字数组,可将解ftT缩放为拉普拉斯算子。  如果ftT数组是方形的,那么使用LAPACK很容易解决,因为它们在Matlab / Octave中。  然而,在r2c,c2r模式中使用FFTW,复杂的变换阵列不是方形的。很容易看到如何修改L来处理非方形的那部分,并且很清楚如何填充ftT数组以使其成为正方形,但这似乎很浪费。我无法想出解决非方形线性系统的方法。我认为,对于这样一个系统,方程的数量必须等于变量的数量。有没有人不得不处理这个问题?

1 个答案:

答案 0 :(得分:2)

没有线性系统需要解决。对于拉普拉斯算子(与其他算子不同),傅里叶模式是特征向量。

因此在傅立叶变换后傅里叶模式是独立的,所有都是线性PDE的解。

你的等式:

(1-kappa*dt*L/2) ftT(now) =(1+kappa*dt*L/2) ftT(last)
如果L是非对角矩阵,则

将是(可能复杂的)线性系统。例如,平流操作员就会发生这种情况。

但对拉普拉斯算子而言,它是一组简单的代数方程,L是一个对角矩阵,你只能使用对角线项 - 特征值。

对于每个i = 1..n

(1-kappa*dt*L(i)/2) ftT_now(i) =(1+kappa*dt*L(i)/2) ftT_last(i)

是一个带有 ONE UNKNOWN 数字ftT_now(i)的代数方程。等式中的所有其他项都只是数字。看不到任何矩阵。

因此,您只需找到与每个傅里叶模式L(i)对应的适当特征值ftT(i),并计算简单方程。

使用R2C还是C2C并不重要。具有特征值的表是方形还是非方形。 LAPACK没有线性系统。