Matlab decomposition函数的使用(R2017b引入)

decomposition可以创建一个可重复使用的分解,例如LU,LDL,QR等使得求解Ax=b更加高效。
例如:

dA = decomposition(A) % 
dA\b % 与普通求解方程通用的调用格式

可以得到与A\b相同的结果,但是这样求解速度更快。
对于需要重复求解的情况,这样的操作更加提高计算效率。

dA的使用方式:

  • 转置: dA'
  • 乘以负数 -dA
  • 乘以系数 c*dA 或者dA/c.
  • 求解线性系统 Ax = b ,x = dA\b.
  • 求解线性系统 xA = b ,x = b/dA.
    实例:
n = 1e3;
rng default % for reproducibility
A = sprandn(n,n,0.2) + speye(n);
x1 = randn(n,1);
x2 = x1;

利用逆法求解1000阶稀疏阵特征值

tic
for ii=1:100
    x1 = A \ x1;
    x1 = x1 / norm(x1);
end
toc
lambda = x1'*A*x1 % 特征值

耗费时间15s.
lambda = -0.6707
利用decomposition,

tic
dA = decomposition(A); 
for ii=1:100
    x2 = dA \ x2;
    x2 = x2 / norm(x2);
end
toc
lambda = x2'*A*x2

耗费时间:1s。
lambda = -0.6707
小结:
虽然matlab左乘会调用LU分解,但是由于每次循环都需要进行分解,总的来说,浪费了大量的计算时间。利用decomposition可以对代码不修改的基础上达到计算效率大幅提高的目的。
实际使用过程中,针对所求矩阵的特性选择不同类型的分解,可以使得计算更加高效。

猜你喜欢

转载自blog.csdn.net/huangzhywin/article/details/89237092
今日推荐