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