如何使用 matlab **fft** 函数或其他快速方法快速求解对流-扩散系统?

计算科学 稀疏矩阵
2021-12-09 17:34:36

对于具有如下 Dirichlet 边界条件的对流扩散方程: 使用的中心差,我们得到一个线性系统 ,其中矩阵是非对称的。,我们知道矩阵是对称正定矩阵。给定一个常数,我们可以得到两个线性大稀疏系统,并且是一个单位矩阵。

u+qu=f
uu
Ax=b
AH=(A+A)/2,S=(AA)/2Hα>0I
(αI+H)xk+1/2=b1
(αI+S)xk+1=b2

我的问题是在3D情况下,上面两个系统又大又稀疏,如何使用sin和modified sin变换来快速解决2个系统,或者其他一些快速的方法,因为在matlab中,反斜杠命令'\'往往会对于这个非常大的 3D 稀疏,要慢一点。谁能给个matlab代码,非常感谢。

下面是我的 matlab 代码:对于 n=64 等距离这么慢。

clc;clear;close all
n=64;q=1;
h=1/(n+1);
I = speye(n);
r = q*h/2;
t1 = 6; t2 = -1-r; t3 = -1+r;
Tx = spdiags(ones(n,1).*[t2 t1 t3],[-1 0 1],n,n);
Ty = spdiags(ones(n,1).*[t2 0 t3],[-1 0 1],n,n);
Tz = spdiags(ones(n,1).*[t2 0 t3],[-1 0 1],n,n);
A = kron(Tx,kron(I,I))+kron(I,kron(Ty,I))+kron(I,kron(I,Tz));
H = (A+A')/2;   S = (A-A')/2;
lambda_maxH = eigs(H,1,'largestabs');
lambda_minH = eigs(H,1,'smallestabs');
alpha = sqrt(lambda_maxH*lambda_minH);
N = length(A);
I = speye(N);
b = A*ones(N,1);

%   this 2 systems are solved so slow
x1 = (alpha*I+H)\b;
x2 = (alpha*I+S)\b;

0个回答
没有发现任何回复~