通过给定LU分解和常数向量求解线性方程组

时间:2013-05-28 23:20:44

标签: matlab linear-algebra matrix-decomposition matrix-factorization

鉴于LU LU decomposition以及b常量向量LU*x=b,是否存在找到x的内置函数}?意思是 -

X = functionName(L,U,b) 

请注意,在LU中,我们处理的是三角矩阵,可以forward and backward substitution直接求解,而无需使用Gaussian elimination过程。

修改:

解决这个线性方程系统应该按照以下步骤 -

1. define y - s.t Ux=y
2. solve Ly=b by forward substitution
3. solve Ux=y by backward substitution
4. return y

编辑2:

我找到了linalg::matlinsolveLU,但我没有尝试,因为我的版本太旧(R2010a)。它适用于任何人吗?

2 个答案:

答案 0 :(得分:5)

如果你有:

A = rand(3);
b = rand(3,1);

然后系统的解决方案可以简单地计算为:

x = A\b

或者,如果您已经分解了A的LU,那么:

[L,U] = lu(A);
xx = U\(L\b)

mldivide函数为smart enough以检测矩阵为三角形并相应地选择算法(向前/向后替换)

答案 1 :(得分:3)

我认为这就是你要找的东西:

A = rand(3,3); % Random 3-by-3 matrix
b = rand(3,1); % Random 3-by-1 vector
[L,U] = lu(A); % LU decomposition
x = U\(L\b)    % Solve system of equations via mldivide (same as x = A\b or x = (L*U)\b)
err = L*U*x-b  % Numerical error

使用mldivide求解方程组。您还可以查看实现qr而不是使用LU分解的QR decompositionqr可以直接解决A*x = b类型问题,效率更高。另请参阅linsolve。对于符号系统,您仍然可以使用mldivide,或在MuPAD中尝试linalg::matlinsolveLU