6

给定LU LU 分解和常数向量b这样LU*x=b ,是否有任何内置函数可以找到x?意思是 -

X = functionName(L,U,b) 

请注意,在两者中LU我们都在处理三角矩阵,它可以通过前向和后向替换直接求解,而无需使用高斯消元过程。

编辑 :

求解这个线性方程组应该按照以下步骤——

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) 。它对任何人都有效吗?

4

2 回答 2

5

如果你有:

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

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

x = A\b

或者,如果您已经对 A 进行了 LU 分解,则:

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

mldivide函数足够聪明,可以检测到矩阵是三角形的,并相应地选择了一种算法(前向/后向替换)

于 2013-05-29T00:17:13.937 回答
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哪个实现了QR 分解而不是使用 LU 分解。qr可以直接解决A*x = b类型问题,效率更高。还看linsolve。对于符号系统,您可能仍然可以使用mldivide,或尝试在 MuPAD 中使用linalg::matlinsolveLU

于 2013-05-28T23:59:21.150 回答