【发布时间】:2015-02-07 15:21:06
【问题描述】:
我想在 MatLab 中求解一个线性系统(对应于用有限差分格式编写的两个方程的 PDE 系统)。系统矩阵的作用(对应于 PDE 系统的扩散项之一)象征性地读取(u 是未知字段之一,n 是时间步长,j 是网格点):
完全:
上面的矩阵必须是A,其中 A*U^n+1 = B 是系统。 U 交替包含“u”和“v”(PDE 系统的第二个未知字段):U = [u_1,v_1,u_2,v_2,...,u_J,v_J]。
到目前为止,我一直在使用 spdiags 和 diag 以下列昂贵的方式填充这个矩阵:
E=zeros(2*J,1);
E(1:2:2*J) = 1;
E(2:2:2*J) = 0;
Dvec=zeros(2*J,1);
for i=3:2:2*J-3
Dvec(i)=D_11((i+1)/2);
end
for i=4:2:2*J-2
Dvec(i)=D_21(i/2);
end
A = diag(Dvec)*spdiags([-E,-E,2*E,2*E,-E,-E],[-3,-2,-1,0,1,2],2*J,2*J)/(dx^2);`
以及解决方案
[L,U]=lu(A);
y = L\B;
U(:) =U\y;
其中B 是右侧向量。
这显然是不合理的昂贵,因为它需要构建一个 JxJ 矩阵,做一个 JxJ 矩阵乘法等。
然后我的问题来了:有没有办法在不向 MatLab 传递矩阵的情况下求解系统,例如,通过传递向量 Dvec 或直接传递 D_11 和 D_22?
这将节省我大量的内存和处理时间!
【问题讨论】:
标签: matlab matrix linear-algebra sparse-matrix pde