Matlab中mldivide函数的使用

目录

语法

说明

示例

方程组

包含奇异矩阵的线性方程组

欠定方程组的最小二乘解

包含稀疏矩阵的线性方程组


        对线性方程组 Ax = B 求解 x

语法

x = A\B

x = mldivide(A,B)

说明

x = A\B对线性方程组 A*x = B 求解。矩阵 A 和 B 必须具有相同的行数。如果 A 未正确缩放或接近奇异值,MATLAB® 将会显示警告信息,但还是会执行计算。

  • 如果 A 是标量,那么 A\B 等于 A.\B。

  • 如果 A 是 n×n 方阵,B 是 n 行矩阵,那么 x = A\B 是方程 A*x = B 的解(如果存在解的话)。

  • 如果 A 是矩形 m×n 矩阵,且 m ~= n,B 是 m 行矩阵,那么 A\B 返回方程组 A*x= B 的最小二乘解。

x = mldivide(A,B) 是执行 x = A\B 这一操作的替代方法,但很少使用。它可以启用类的运算符重载。

示例

方程组

        对简单的线性方程组 A*x = B 求解。

A = magic(3);
B = [15; 15; 15];
x = A\B
x = 3×1

    1.0000
    1.0000
    1.0000

包含奇异矩阵的线性方程组

        对包含奇异矩阵 A 的线性方程组 A*x = b 求解。

A = magic(4);
b = [34; 34; 34; 34];
x = A\b

Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  4.625929e-18.

x = 4×1

    0.9804
    0.9412
    1.0588
    1.0196

        如果 rcond 在 0 和 eps 之间,MATLAB® 会发出接近奇异的警告,但还会继续计算。如果处理的是病态矩阵,尽管残差 (b-A*x) 相对较小,还是有可能出现不可靠解。在此特例中,残差的范数是零,尽管rcond很小,仍能求得精确解。

        当 rcond 等于0时,会出现奇异警告。

A = [1 0; 0 0];
b = [1; 1];
x = A\b

Warning: Matrix is singular to working precision.
x = 2×1

     1
   Inf

        这种情况下,除以零会导致计算涉及 Inf 和/或 NaN,使得计算结果不可靠。

欠定方程组的最小二乘解

        对线性方程组A*x = b求解。

A = [1 2 0; 0 4 3];
b = [8; 18];
x = A\b
x = 3×1

         0
    4.0000
    0.6667

包含稀疏矩阵的线性方程组

        使用稀疏矩阵对简单的线性方程组求解。

        考虑以下矩阵方程A*x = B。        

A = sparse([0 2 0 1 0; 4 -1 -1 0 0; 0 0 0 3 -6; -2 0 0 0 2; 0 0 4 2 0]);
B = sparse([8; -1; -18; 8; 20]);
x = A\B
x = 
   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

提示

  • 运算符 / 和 \ 通过以下对应关系而相互关联:B/A = (A'\B')'。

  • 如果 A 是方阵,则 A\B 约等于 inv(A)*B,但 MATLAB 会用不同的更为稳健的方式处理 A\B,而且效果更好。

  • 如果 A 的秩小于 A 中的列数,则 x = A\B 不一定是最小范数解。可以使用 x =lsqminnorm(A,B) 或 x =pinv(A)*B 来计算最小范数最小二乘解。

算法

        mldivide 在求解线性方程组方面的多用性源于其能够在调度适当的求解器时利用问题中的对称性。此方法旨在最大限度减少计算时间。该函数首先区分满(也称为“稠密”)和稀疏输入数组。

针对完全输入的算法

        下面的流程图显示当输入 A 和 B 为完全时的算法路径。

针对稀疏输入的算法

        如果 A 是满矩阵,B 是稀疏矩阵,则 mldivide将B转换为满矩阵并使用完整算法路径(如上)计算具有满存储的解。如果 A 是稀疏矩阵,则解 x 的存储与 B 的解相同,并且 mldivide 遵循稀疏输入的算法路径,如下所示。

`linsolve` 函数MATLAB 中用于求解线性方程组的一种高效工具。它的基本作用是解决形如 \( Ax = B \) 的线性代数问题,其中 \( A \) 是系数矩阵,\( B \) 是右侧向量或矩阵,而 \( x \) 则是我们需要求解的结果向量或矩阵。 以下是 `linsolve` 的详细使用说明及步骤: ### 使用语法 ```matlab X = linsolve(A,B) [X,R] = linsolve(A,B) ``` #### 参数解释: - **A**:系数矩阵。 - **B**:右侧列向量或矩阵。 - **X**:返回的解决方案(未知变量的值)。 - **R**(可选输出):表示对 \( A \) 进行分解后的相关信息,例如 QR 分解结果等。 ### 简单例子 假设有如下线性系统需求数学解答: \[ \begin{cases} 2x_1 + x_2 - x_3 &= 8\\ -x_1 - 2x_2 + 3x_3 &= -11\\ 2x_1 + 3x_2 - 4x_3 &= 5 \end{cases} \] 可以转化为矩阵形式: \[ A = \left[ {\begin{array}{*{20}{c}} {2}&{1}&{-1}\\ {-1}&{-2}&{3}\\ {2}&{3}&{-4} \end{array}} \right], \] 以及 \[ B= \left[ {\begin{array}{*{20}{c}} {8}\\ {-11}\\ {5} \end{array}} \right]. \] 下面是在MATLAB里的实现代码: ```matlab A=[2 1 -1;-1 -2 3;2 3 -4]; B=[8;-11;5]; % 求解Ax=B的问题 X=linsolve(A,B); disp(X); % 显示结果 [X1; X2; X3] ``` 这会得到相应解 `[7; 3; 5]`, 即满足给定条件下的唯一一组实数值。 ### 特别注意事项 1. 若矩阵 \( A \) 奇异(即行列式等于零),则有可能无解或多解情况发生; 2. 对于大规模稀疏矩阵运算更推荐采用其他更适合的技术比如 `\` 或者 `mldivide()` 来替代直接调用`linsolve`. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值