MATLAB中linsolve函数用法

目录

语法

说明

​示例

线性系统求解

隐藏矩阵条件警告


        linsolve函数的功能是对线性系统求解。

语法

X = linsolve(A,B)
X = linsolve(A,B,opts)
[X,r] = linsolve(___)

说明

        ​X = linsolve(A,B) 使用以下方法之一求解线性系统 AX = B:​

  • 当 A 是方阵时,linsolve 使用 LU 分解和部分主元消去法。

  • 对于所有其他情况,linsolve 使用 QR 分解和列主元消去法。

如果 A 为病态(对于方阵)或秩亏(对于矩形矩阵),则 linsolve 发出警告。

        X = linsolve(A,B,opts) 使用由 options 结构体 opts 确定的合适的求解器。opts 中的字段是说明矩阵 A 的属性的逻辑值。例如,如果 A 是上三角矩阵,可以设置 opts.UT = true 以使 linsolve 使用为上三角矩阵设计的求解器。linsolve 不再测试验证 A 是否具有 opts 中指定的属性。​

        [X,r] = linsolve(___) 还返回 r,即 A 的条件数的倒数(对于方阵)或 A 的秩(对于矩形矩阵)。您可以使用上述语法中的任何输入参数组合。使用此语法时,如果 A 为病态或秩亏,linsolve 不会发出警告。

​示例

线性系统求解

        使用 mldivide 和 linsolve 求解线性系统以比较性能。

        mldivide 是在 MATLAB® 中求解大多数线性系统的推荐方法。不过,该函数会对输入矩阵执行几项检查,以确定它是否具有任何特殊属性。如果事先了解系数矩阵的属性,则可以使用 linsolve 来避免对大型矩阵进行耗时的检查。

        创建一个 10000×10000 幻方矩阵,并提取下三角部分。将 opts 结构体的 LT 字段设置为 true 以指示 A 是下三角矩阵。

A = tril(magic(1e4));
opts.LT = true;

        创建由 1 组成的向量作为线性方程 Ax=b 的右侧。A 和 b 中的行数必须相等。

b = ones(size(A,2),1);

        使用 mldivide 求解线性系统 Ax=b,并对计算计时。

tic
x1 = A\b; 
t1 = toc
t1 = 0.0847

        现在,使用 linsolve 再次求解该方程组。指定 options 结构体,以便 linsolve 可以为下三角矩阵选择合适的求解器。

tic
x2 = linsolve(A,b,opts);
t2 = toc
t2 = 0.0188

        比较执行时间,查看 linsolve 快了多少。与任何计时比较一样,不同计算机和不同版本的 MATLAB 产生的计时结果可能不同。

speedup = t1/t2
speedup = 4.4970

隐藏矩阵条件警告

        使用具有两个输出的 linsolve 求解线性系统,以隐藏矩阵条件警告。

        创建一个 20×20 Hilbert 测试矩阵。此矩阵接近奇异矩阵,最大奇异值比最小奇异值大 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

提示

  • linsolve 的速度优势可能因矩阵结构和基本算法的相对优化而异。在某些情况下(例如使用小矩阵时),速度相比 mldivide 可能没有任何提高。linsolve 的速度优势在于它处理大型矩阵时不必花费大量时间检查其属性,或在于它相比 mldivide 选择了一种更适合输入的算法。

### 回答1: linsolve函数matlab用于求解线性方程组的函数。它的用法如下: linsolve(A,b) 其A是一个n×n的系数矩阵,b是一个n×1的常数向量。linsolve函数会返回一个n×1的解向量x,使得Ax=b。 如果A是一个稀疏矩阵,可以使用linsolve(A,b,'symrcm')来提高求解速度。如果A是一个对称正定矩阵,可以使用linsolve(A,b,'pos')来提高求解速度。 需要注意的是,如果A不是满秩矩阵,linsolve函数会返回一个最小二乘解。如果A是奇异矩阵,linsolve函数会返回一个空矩阵。 ### 回答2: linsolve函数MATLAB用于求解线性方程组的函数,它的基本用法为: x = linsolve(A,b) 其A为系数矩阵,b为常数向量,x为方程的解向量。 当A为正定矩阵时,linsolve函数会使用Cholesky分解来求解方程组,该方法比高斯消元法更快。但是当A不是正定矩阵时,linsolve函数会使用高斯消元法或LU分解来求解方程组。 linsolve函数也支持其他选项,例如可以使用正则化来处理病态矩阵: x = linsolve(A,b,opts) 其opts为选项向量,可以通过optimset函数设置选项。例如: opts = optimset('Algorithm','symmlq','TolFun',1e-10); x = linsolve(A,b,opts) 上述代码使用对称共轭梯度法来求解方程组,其TolFun选项表示容忍的误差值为1e-10。 值得注意的是,当A是大型稀疏矩阵时,linsolve函数会更加高效。因此,在处理大型稀疏线性方程组时,可以考虑使用linsolve函数来提高效率。 总之,linsolve函数MATLAB用于求解线性方程组的重要函数,具有较高的效率和灵活性,可以满足不同求解需求。 ### 回答3: matlablinsolve函数主要用于求解线性方程组。线性方程组是由一组线性方程所组成的,方程的未知数只有一次出现,并且方程的系数都是不变的。 linsolve函数的基本语法是:x = linsolve(A,b),其A是系数矩阵,b是常数向量,x是未知数向量。 在调用linsolve函数时,参数A和b是必需的,而x是可选的。如果没有指定x,则函数会返回方程组的解。这就意味着,如果方程组有唯一解,则x将等于该解。如果方程组有多个解,则x将等于其的一个解。如果方程组没有解,则linsolve函数将返回一个空数组,表示不存在解。 在使用linsolve函数时,需要注意以下几点: 1. A必须是正方形矩阵。如果不是,则需要使用其它方法来求解方程组。 2. 如果A是奇异矩阵(即不可逆矩阵),则方程组可能没有解,或者有无数个解。 3. 如果方程组存在解,则linsolve函数可以通过多种方法来求解。可以通过指定选项来选择使用哪种方法,例如linsolve(A,b,'qr')。 4. linsolve函数可以求解稠密矩阵,但对于稀疏矩阵,建议使用spqr算法求解。 总之,linsolve函数matlab求解线性方程组的常用函数,可以通过它快速、准确地求解线性方程组,并可以根据需要选择不同的求解方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值