陆
LU矩阵分解
语法
描述
[___] = lu(___,
返回outputForm
)P
而且问
指定的格式outputForm
.指定outputForm
作为“向量”
返回P
而且问
作为排列向量。您可以使用以前语法中的任何输入参数组合。
例子
矩阵因式分解
计算一个矩阵的LU因式分解,并检查得到的因子。LU分解是一种分解矩阵的方法 变成一个上三角矩阵 ,一个下三角矩阵 ,和排列矩阵 这样 .这些矩阵描述了在矩阵上执行高斯消去直到它变成行简化阶梯形所需的步骤。的 矩阵包含了所有的乘数,还有排列矩阵 用于行交换。
创建一个3 × 3矩阵并计算LU因子。
A = [10 -7 0 -3 2 6 5 -1 5];
[L,U] = lu(A)
L =3×31.0000 00 -0.3000 -0.0400 1.0000 0.5000 1.0000 0
U =3×310.0000 -7.0000 00 2.5000 5.0000 00 6.2000
将这些因素相乘来重建一个
.使用双输入语法,陆
合并排列矩阵P
直接进入l
因子,使l
回归真的是P ' * L
因此A = l * u
.
L * U
ans =3×310.0000 -7.0000 0 -3.0000 2.0000 6.0000 5.0000 -1.0000 5.0000
您可以指定三个输出来将排列矩阵与中的乘数分离l
.
[L,U,P] = lu(A)
L =3×31.0000 00 0.5000 1.0000 0 -0.3000 -0.0400 1.0000
U =3×310.0000 -7.0000 00 2.5000 5.0000 00 6.2000
P =3×31 0 0 0 0 1 0 10 0
P ' * L * U
ans =3×310.0000 -7.0000 0 -3.0000 2.0000 6.0000 5.0000 -1.0000 5.0000
用LU因式分解求解线性方程组
通过执行LU分解并使用因子简化问题来求解线性系统。使用反斜杠操作符和将结果与其他方法进行比较分解
对象。
创建一个5乘5的魔方矩阵并求解线性方程组
所有的元素b
等于65,神奇的和。由于65是这个矩阵的神奇和(所有的行和列加起来都是65),对于的期望解x
是1s的向量。
A =魔术(5);B = 65*ones(5,1);x = A\b
x =5×11.0000 1.0000 1.0000 1.0000
对于一般的方阵,反斜杠运算符使用LU分解计算线性系统的解。LU分解表示一个
作为三角矩阵的乘积,涉及三角矩阵的线性方程组很容易用代换公式求解。
要重新创建由反斜杠计算的答案,请计算的LU分解一个
.然后,利用因子求解两个三角形线性系统:
y = L\(P*b);x = U\y;
这种在求解线性系统之前预计算矩阵因子的方法可以在求解许多线性系统时提高性能,因为分解只发生一次,不需要重复。
[L,U,P] = lu(A)
L =5×51.0000 0000 0.7391 1.0000 0000 0.4783 0.7687 1.0000 00 0.1739 0.2527 0.5164 1.0000 0 0.4348 0.4839 0.7231 0.9231 1.0000
U =5×523.0000 5.0000 7.0000 14.0000 16.0000 0 20.3043 -4.1739 -2.3478 3.1739 00 24.8608 -2.8908 -1.0921 000 19.6512 18.9793 0000 -22.2222
P =5×50 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
y = L\(P*b);x = U\y
x =5×11.0000 1.0000 1.0000 1.0000
的分解
对象在使用专门的因式分解求解线性系统时也很有用,因为预先计算矩阵因式可以获得许多性能好处,但不需要知道如何使用这些因式。属性使用分解对象“陆”
键入以重新创建相同的结果。
dA =分解(A,“陆”);x = dA\b
x =5×11.0000 1.0000 1.0000 1.0000
稀疏矩阵的LU分解
计算一个稀疏矩阵的LU因式分解,并验证其恒等式L* u = p * s * q
.
创建巴克敏斯特-富勒测地线穹顶连通性图的60 × 60稀疏邻接矩阵。
S =结实的;
计算的LU因式分解年代
使用带有四个输出的稀疏矩阵语法返回行和列排列矩阵。
[L,U,P,Q] = lu(S);
排列的行和列年代
与P * *
将结果与三角形因子相乘进行比较L * U
.其差值的1范数在舍入误差范围内,表明L* u = p * s * q
.
e = P*S*Q - L*U;规范(e, 1)
Ans = 5.7732e-15
用排列向量节省内存
计算矩阵的LU因式分解。通过将行排列返回为向量而不是矩阵来节省内存。
创建一个1000乘1000的随机矩阵。
A =兰特(1000);
用存储为矩阵的排列信息计算LU因式分解P
.将结果与存储为向量的排列信息进行比较p
.矩阵越大,使用排列向量的内存效率就越高。
[L1,U1,P] = lu(A);[L2,U2,p] = lu(A, A, A, A, A, A, A, A, A, A, A, A, A,“向量”);谁Pp
名称大小字节类属性P 1000x1000 8000000 double P 1x1000 8000 double
使用排列向量还可以节省后续操作的执行时间。例如,您可以使用前面的LU因式分解来求解线性系统 .虽然从排列向量和排列矩阵得金宝搏官方网站到的解是等价的(四舍五入),但使用排列向量的解通常需要更少的时间。
稀疏矩阵分解的约化填充
比较有列排列和没有列排列的稀疏矩阵的LU分解计算结果。
加载west0479
矩阵,这是一个实值479 × 479的稀疏矩阵。
负载west0479A = west0479;
计算的LU因式分解一个
通过调用陆
有三个输出。生成L和U因子的间谍图。
[L,U,P] = lu(A);次要情节(1,2,1)间谍(L)标题(“L因素”)副图(1,2,2)间谍(U)标题(“U因子”)
现在,计算LU因式分解一个
使用陆
有四个输出,排列的列一个
减少因子中非零的个数。得到的因子比不使用列排列要稀疏得多。
[L,U,P,Q] = lu(A);次要情节(1,2,1)间谍(L)标题(“L因素”)副图(1,2,2)间谍(U)标题(“U因子”)
输入参数
一个
- - - - - -输入矩阵
矩阵
输入矩阵。一个
大小可以是完整的或稀疏的,也可以是正方形或矩形的。
数据类型:单
|双
复数支持:金宝app是的
年代
- - - - - -稀疏输入矩阵
稀疏矩阵
稀疏输入矩阵。年代
大小可以是正方形或矩形。
数据类型:双
复数支持:金宝app是的
打
- - - - - -稀疏矩阵的旋转阈值
标量|双元素向量
稀疏矩阵的枢轴阈值,指定为标量或两元向量。有效值在区间内[0 1]
.你指定的方式打
的调用中指定了多少个输出陆
:
为三个输出或更少,
打
必须为标量,默认值为1.0
.为四个或更多输出,
打
可以是标量,也可以是两个元素的向量。默认值为(0.1 - 0.001)
.如果你指定打
作为标量,它只替换向量中的第一个值。
在较高的级别上,此输入使您能够在准确性和总执行时间之间进行权衡。较小的值打
往往会导致更稀疏的LU因子,但解会变得不准确。较大的值可以导致更准确的解决方案(但并不总是如此),并且通常会增加总工作和内存使用。
陆
选择一个旋转策略,首先基于输出参数的数量,其次基于被分解的矩阵的属性。在所有情况下,将阈值设置为1.0
结果在部分旋转,而设置他们0
导致只根据结果矩阵的稀疏性来选择枢轴。的所有值l
的绝对值1 /分钟(打)
或更少。
三个或更少的输出参数-如果满足方程,则算法选择对角枢轴
A(j,j) >= thresh * max(A(j:m,j))))
对称旋转策略——如果
年代
是一个方阵稀疏矩阵,具有大部分对称结构和大部分非零对角线,那么陆
使用对称的旋转策略。对于这种策略,算法选择对角枢轴j
如果满足不等式:A(i,j) >= thresh(2) * max(abs(A(j:m,j))))
陆
选择最稀疏的行我
满足不平等:A(i,j) >= thresh(1) * max(abs(A(j:m,j))))
非对称旋转策略——如果
年代
不满足对称旋转策略的要求,则陆
使用非对称策略。在这种情况下,陆
选择最稀疏的行我
满足不平等:A(i,j) >= thresh(1) * max(abs(A(j:m,j))))
1.0
为打(1)
结果在传统的部分旋转。条目l
的绝对值1 /打(1)
或更少。的第二个元素打
输入向量不用于非对称策略。
请注意
在极少数情况下,不正确的因式分解会导致P * *
≠L * U
.如果出现这种情况,增加打
最大限度地1.0
(常规部分旋转),然后重试。
outputForm
- - - - - -排列输出的形状
“矩阵”
(默认)|“向量”
排列输出的形状,指定为“矩阵”
或“向量”
.此标志控制是否陆
返回行排列P
和列排列问
作为排列矩阵或排列向量。
作为矩阵,输出P
而且问
满足这些特性:
三个输出-
P
满足P* a = l * u
.四个输出-
P
而且问
满足P* s * q = l * u
.5个输出-
P
,问
,D
满足P*(d \ s)* q = l * u
.
作为向量,输出P
而且问
满足这些特性:
三个输出-
P
满足A(p,:) = l * u
四个输出-
P
而且问
满足S(p, q) = l * u
5个输出-
P
,问
,D
满足D(:, p)\ s (:, q) = l * u
.
例子:[L,U,P] = lu(A,'矢量')
输出参数
l
-下三角因子
矩阵
下三角因子,作为矩阵返回。的形式l
取决于行是否排列P
在单独的输出中返回:
如果第三个输出
P
,则l
返回为单位下三角矩阵(即主对角线上为1s的下三角矩阵)。如果第三个输出
P
没有指定,那么l
返回为单位下三角矩阵的行排列。具体来说,就是产品P ' * L
输出的P
而且l
在三个输出案例中返回。
U
-上三角因子
矩阵
上三角因子,作为上三角矩阵返回。
P
-行排列
向量|矩阵
行排列,作为排列矩阵返回,如果“向量”
选项指定为排列向量。使用这个输出来提高计算的数值稳定性。
看到outputForm
获取此输出所满足的标识的描述。
问
-列排列
向量|矩阵
列排列,返回为排列矩阵或“向量”
选项指定为排列向量。使用此输出来减少稀疏矩阵因子中的填充(非零的数量)。
看到outputForm
获取此输出所满足的标识的描述。
D
-行缩放
对角矩阵
行缩放,作为对角线矩阵返回。D
是用来缩放值的年代
这样P*(d \ s)* q = l * u
.通常情况下(但并非总是如此),行缩放会导致更稀疏且更稳定的分解。
算法
LU因式分解是用高斯消去的一种变体来计算的。计算精确的解依赖于原始矩阵的条件数的值气孔导度(A)
.如果矩阵有一个很大的条件数(它几乎是奇异的),那么计算的因式分解可能不准确。
LU因式分解是求逆的关键步骤发票
这个行列式依据
.它也是用算子求得线性方程解或矩阵除法的基础\
而且/
.这必然意味着数量的限制陆
也出现在这些相关函数中。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
代码生成不支持此函数的稀疏矩阵输入。金宝app
GPU代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制:
代码生成不支持此函数的稀疏矩阵输入。金宝app
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
分布式阵列
使用并行计算工具箱™跨集群的组合内存对大型数组进行分区。
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。