【发布时间】:2017-06-23 09:40:54
【问题描述】:
如果我想在 (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 数组以使其成为方形,但这似乎很浪费。我一直无法想出解决非平方线性系统的方法。我对这样一个系统的想法很感兴趣,方程的数量必须等于变量的数量。有人处理过这个问题吗?
【问题讨论】:
-
“很容易看到如何修改 L 来处理非方形的那部分,...,但这似乎很浪费。” 为什么?这正是我会做的。
-
另外,我没有看到任何真正的线性系统可以用 LAPACK 解决。你的方程中没有矩阵乘法。它们只是简单的独立代数方程,没有系统。这就是傅里叶变换的重点,以避免复杂的系统。
-
这可能会在scicomp.stackexchange.com 上得到更好的答案。但它也可能会得到像 @VladimirF 已经制作的那样的 cmets。
-
@VladimirF 我描述的线性系统是为了求解我从 ftT(now) 写的方程,所以在 'Ax=B' 中,A 是 '(1-kappa i>dt*L/2)'。我想我不确定我是否理解“简单代数方程”和线性方程组之间的区别。反正我要么填要么退到c2c。
-
@HighPerformanceMark 我很乐意接受所有 VladimirF cmets.. 感谢您的链接。
标签: arrays matlab matrix fortran octave