linsolve
对线性系统求解
说明
示例
线性系统求解
使用 mldivide
和 linsolve
求解线性系统以比较性能。
mldivide
是在 MATLAB® 中求解大多数线性系统的推荐方法。不过,该函数会对输入矩阵执行几项检查,以确定它是否具有任何特殊属性。如果您事先了解系数矩阵的属性,则可以使用 linsolve
来避免对大型矩阵进行耗时的检查。
创建一个 10000×10000 幻方矩阵,并提取下三角部分。将 opts
结构体的 LT
字段设置为 true
以指示 A
是下三角矩阵。
A = tril(magic(1e4)); opts.LT = true;
创建由 1 组成的向量作为线性方程 的右侧。A
和 b
中的行数必须相等。
b = ones(size(A,2),1);
使用 mldivide
求解线性系统 ,并对计算计时。
tic x1 = A\b; t1 = toc
t1 = 0.0551
现在,使用 linsolve
再次求解该方程组。指定 options 结构体,以便 linsolve
可以为下三角矩阵选择合适的求解器。
tic x2 = linsolve(A,b,opts); t2 = toc
t2 = 0.0226
比较执行时间,查看 linsolve
快了多少。与任何计时比较一样,不同计算机和不同版本的 MATLAB 产生的计时结果可能不同。
speedup = t1/t2
speedup = 2.4402
隐藏矩阵条件警告
使用具有两个输出的 linsolve
求解线性系统,以隐藏矩阵条件警告。
创建一个 20×20 希尔伯特测试矩阵。此矩阵接近奇异矩阵,最大奇异值比最小奇异值大 2e18
左右。
A = hilb(20);
使用 linsolve
求解涉及 A
的线性系统。由于 A
接近奇异矩阵,linsolve
返回警告。
b = ones(20,1); x = linsolve(A,b);
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 5.628781e-20.
现在,求解同一个线性系统,但为 linsolve
指定两个输出。MATLAB® 隐藏警告,第二个输出 r
包含 A
的条件数倒数。您可以使用此语法处理代码中具有特殊情况的病态矩阵,而代码不会产生警告。
[x,r] = linsolve(A,b)
x = 20×1
109 ×
-0.0000
0.0000
-0.0004
0.0071
-0.0592
0.2819
-0.7821
1.1830
-0.7030
-0.1061
⋮
r = 5.6288e-20
输入参数
A
— 系数矩阵
矩阵
系数矩阵。A
显示在线性系统的左侧,如 AX = B。A
中的行数必须等于 B
中的行数。
A
不能为稀疏矩阵。要求解涉及稀疏矩阵的线性系统,请改用 mldivide
或 decomposition
。
数据类型: single
| double
复数支持: 是
B
— 输入数组
向量 | 矩阵
输入数组,指定为向量或矩阵。B
显示在线性系统的右侧,如 AX = B。如果 B
是矩阵,则矩阵中的每一列代表右侧一个不同的向量。
A
中的行数必须等于 B
中的行数。
数据类型: single
| double
复数支持: 是
opts
— 系数矩阵属性
结构体
系数矩阵属性,指定为结构体。使用此结构体指定 A
的属性,linsolve
使用这些属性为线性系统选择合适的求解器。结构体中的字段包含 true
/false
值,以指示 A
是否具有各个属性。默认情况下,结构体中的所有字段都假定为 false
。下表列出了 opts
中的可能字段及其对应的矩阵属性。
字段 | 矩阵属性 |
---|---|
| 下三角矩阵(非零值仅出现在主对角线上或其下方) |
| 上三角矩阵(非零值仅出现在主对角线上或其上方) |
| 上黑森贝格矩阵(所有零值位于第一个次对角线下方) |
| 实对称矩阵或复数埃尔米特矩阵(矩阵等于其转置矩阵) |
| 正定矩阵(所有特征值均为正值) |
| 矩形矩阵(行数和列数不同) |
| 共轭转置 - 指定函数是求解 |
示例: opts.UT = true
指定 A
为上三角矩阵。
示例: opts.SYM = true, opts.POSDEF = true
设置两个字段,以指定 A
是对称正定矩阵。
有效组合
下表各行列出了 opts
中所有对 linsolve
有效的字段值组合。空单元格表示默认值 false
,true
/false
项表示 linsolve
接受两者中的任一值。
|
|
|
|
|
|
| |
---|---|---|---|---|---|---|---|
|
|
|
| ||||
|
|
|
| ||||
|
|
| |||||
|
|
|
| ||||
|
|
|
用法说明
如果
A
具有opts
中的属性,则linsolve
比mldivide
快,因为linsolve
会立即调用合适的求解器,而不再执行任何测试以验证A
是否具有指定的属性。如果
A
没有您在opts
中指定的属性,则linsolve
会返回不正确的结果并且不总是返回错误消息。因此,如果您不确定A
是否具有指定的属性,请改用mldivide
或decomposition
。
数据类型: struct
输出参量
X
— 线性系统的解
向量 | 矩阵
线性系统的解,返回为满足 AX = B(如果 opts.TRANSA = true
,则满足 ATX = B)的向量或矩阵。X
的大小取决于是否满足 opts.TRANSA = true
:
如果
A
为m
×n
且B
为m
×k
,则X
为n
×k
且是 AX = B 的解。如果
opts.TRANSA = true
,则A
为m
×n
且B
为n
×k
。在本例中,X
为m
×k
且是 ATX = B 的解。
r
— 条件数倒数或秩
标量
条件数倒数或秩,以标量形式返回。
如果
A
是方阵,则r
是A
的条件数倒数。如果
A
是矩形矩阵,则r
是A
的秩。如果指定
opts
,则r
是A
的条件数倒数,除非RECT
是true
并且LT
和UT
均为false
,在这种情况下,r
给出A
的秩。
提示
linsolve
的速度优势可能因矩阵结构和基本算法的相对优化而异。在某些情况下(例如使用小矩阵时),速度相比mldivide
可能没有任何提高。linsolve
的速度优势在于它处理大型矩阵时不必花费大量时间检查其属性,或在于它相比mldivide
选择了一种更适合输入的算法。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
opts
结构体必须为常量标量。代码生成不支持 options 结构体数组。代码生成仅可对以下情形进行优化:
UT
LT
UHESS
=true
(TRANSA
可以为true
或false
)SYM
=true
且POSDEF
=true
其他选项等同于使用
mldivide
。代码生成不支持对此函数使用稀疏矩阵输入。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
opts
结构体必须为常量标量。代码生成不支持 options 结构体数组。代码生成仅可对以下情形进行优化:
UT
LT
UHESS
=true
(TRANSA
可以为true
或false
)SYM
=true
且POSDEF
=true
其他选项等同于使用
mldivide
。代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持有两个输出的语法
[x,r] = linsolve(___)
。如果
A
未正确缩放、接近奇异矩阵或秩亏,MATLAB®linsolve
函数会显示警告。gpuArray
linsolve
不能检查此情况。请采取措施来避免这种情况。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)