给定L
和U
的LU分解和常数b
的向量,使得LU*x=b
,是否存在找到x
的内建函数?意思是-
X = functionName(L,U,b)
请注意,在L
和U
中,我们处理的是三角矩阵,可以直接通过前向和后向替换来求解,而不使用高斯消去过程。
求解此线性方程组应按以下步骤进行——
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
)。
如果你有:
A = rand(3);
b = rand(3,1);
则系统的解可以简单地计算为:
x = Ab
或者如果您已经有了A的LU分解,那么:
[L,U] = lu(A);
xx = U(Lb)
mldivide
函数足够智能,可以检测到矩阵是三角形的,并选择相应的算法(向前/向后替换)
我想这就是你要找的:
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(Lb) % Solve system of equations via mldivide (same as x = Ab 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。