MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍

系列文章目录

MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制

 MATLAB求函数极限的简单介绍

文章目录

一、线性方程组

1.1、线性方程组简介

1.2、矩阵的初等变换

1.3、MATLAB举例

二、对于MATLAB几个函数的解释

2.1、reff()函数

2.2、inv()函数

2.3、其他一些函数的说明

1. ones(n):返回一个n x n的全1矩阵。

2. zeros(n):返回一个n x n的全0矩阵。

3. eye(n):返回一个n x n的单位矩阵。

4. rand(n):返回一个n x n的随机矩阵,其中每个元素都是0到1之间的随机数。

5. inv(A):返回矩阵A的逆矩阵。

6. rank(A):返回矩阵A的秩。

7. det(A):返回矩阵A的行列式。

三、不定方程组以及其他方程组介绍

3.1、不定方程组简介

3.2、对上述的常见求解方法介绍

1. 高斯消元法

2. 初等变换法

3. 克莱姆法则

4. 列主元消去法

3.3、MATLAB中如何使用矩阵初等变换和解线性方程组。

1. 矩阵初等变换

2. 解线性方程组

3.4、奇异方程组

1、奇异方程组简介

2、案例讲解

3.5、超定方程组

1、超定方程组的简介

2、案例举例

3、\运算符、pinv()函数、lsqnonneg函数

总结


前言

本文主要介绍在MATLAB里面对线性方程组、不定方程组、奇异方程组、超定方程组的使用介绍,以及相关的案例举例,以下案例仅供参考。

一、线性方程组

1.1、线性方程组简介

线性方程组是指由一组线性方程组成的方程组,其中每个方程的未知数都是一次项,即未知数的次数都是1。线性方程组的一般形式可以表示为:

a1x1 + a2x2 + ... + anx_n = b

其中,a1、a2、...、an是已知系数,x1、x2、...、xn是未知数,b是已知常数。线性方程组的解是指使所有方程都成立的未知数的取值。如果线性方程组没有解或有无穷多个解,那么它是“不相容的”或“相容的”。

解线性方程组的方法有很多,其中包括高斯消元法、矩阵求逆法、克莱姆法则等。这些方法的核心思想都是通过一系列代数变换,把线性方程组转化为更简单的形式,从而求出未知数的取值。

线性方程组在数学和工程中有广泛的应用,例如在物理学中求解物体的运动方程、在经济学中求解供需关系、在工程学中求解电路的电流电压等。

1.2、矩阵的初等变换

  • 1. 交换矩阵的任意两行或任意两列
  • 2. 用一个非零数乘矩阵的任意一行或任意一列
  • 3. 把矩阵的某一行或某一列加上另一行或另一列的若干倍

通过这些操作,可以改变矩阵的行列式和秩,从而实现矩阵的简化、求逆、求解线性方程组等目的。

1.3、MATLAB举例

%线性方程组
clear;
A=[1 2 ;4 -3];
b=[23;2];
%方法1
x=A\b
A*x-b%验根
%方法2
x2=inv(A)*b
A*x2-b%验根
%方法3
F=[A,b]%增广矩阵
rref(F)%进行行初等变换

计算结果

x =

    6.6364
    8.1818
ans =

     0
     0
x2 =

    6.6364
    8.1818
ans =

   1.0e-14 *

         0
   -0.3553
F =

     1     2    23
     4    -3     2
ans =

    1.0000         0    6.6364
         0    1.0000    8.1818

二、对于MATLAB几个函数的解释

2.1、reff()函数

在MATLAB中,rref()是求解矩阵的行最简形式(Reduced Row Echelon Form)的函数。行最简形式是指矩阵经过一系列初等行变换后,达到以下两个条件:

  • 1. 矩阵的每一行的第一个非零元素(即主元素)都是1;
  • 2. 对于任意两个主元素,它们所在的列的其它元素都是0。

rref()函数返回的就是这个行最简形式的矩阵。

下面举一个例子来说明rref()的用法,假设有一个3x4的矩阵A:

A = [1 2 3 4; 5 6 7 8; 9 10 11 12];

调用rref()函数:

rref(A)

它的输出结果是:

ans =

    1.0000         0         0   -2.0000
         0    1.0000         0    1.0000
         0         0    1.0000    4.0000

这个结果就是矩阵A的行最简形式。可以看到,矩阵A的每一行的主元素都是1,并且对于任意两个主元素,它们所在的列的其它元素都是0。

2.2、inv()函数

在MATLAB中,inv函数用于计算矩阵的逆。如果矩阵A是可逆的(即矩阵A的行列式不为0),那么它的逆矩阵A^-1满足以下条件:A x A^-1 = A^-1 x A = I,其中I是单位矩阵。逆矩阵可以被用于解决线性方程组和计算行列式等问题。

使用inv函数非常简单,只需在MATLAB命令窗口中输入inv(A),其中A是一个方阵。如果矩阵A是奇异矩阵(即行列式为0),那么inv函数将会返回一个警告,表示该矩阵没有逆矩阵。在这种情况下,可以使用pinv函数来计算广义逆矩阵。

需要注意的是,对于大型或者稀疏矩阵,使用inv函数可能会非常耗时或者导致内存溢出等问题。在这种情况下,可以使用其他更高效的算法来计算矩阵的逆。

2.3、其他一些函数的说明

MATLAB中有很多矩阵相关的函数,下面是一些常用的函数及其说明和案例:

1. ones(n):返回一个n x n的全1矩阵。

案例:生成一个3 x 3的全1矩阵

A = ones(3)

输出:

A =
     1     1     1
     1     1     1
     1     1     1

2. zeros(n):返回一个n x n的全0矩阵。

案例:生成一个4 x 4的全0矩阵

B = zeros(4)

输出:

B =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0

3. eye(n):返回一个n x n的单位矩阵。

案例:生成一个5 x 5的单位矩阵

C = eye(5)

输出:

C =
     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1

4. rand(n):返回一个n x n的随机矩阵,其中每个元素都是0到1之间的随机数。

案例:生成一个2 x 2的随机矩阵

D = rand(2)

输出:

D =
    0.8147    0.9134
    0.9058    0.6324

5. inv(A):返回矩阵A的逆矩阵。

案例:计算一个3 x 3的矩阵的逆矩阵

A = [1 2 3; 4 5 6; 7 8 9];
B = inv(A)

输出:

B =
   -0.0000    0.0000    0.1111
   -0.0000    0.1111   -0.2222
    0.0000   -0.2222    0.1111

6. rank(A):返回矩阵A的秩。

案例:计算一个4 x 4的矩阵的秩

A = [1 2 3 4; 2 4 6 8; 3 6 9 12; 4 8 12 16];
rank(A)

输出:

ans =
     1

7. det(A):返回矩阵A的行列式。

案例:计算一个3 x 3的矩阵的行列式

A = [1 2 3; 4 5 6; 7 8 9];
det(A)

输出:

ans =
     0

三、不定方程组以及其他方程组介绍

3.1、不定方程组简介

不定方程组是指未知数个数大于方程个数的方程组。不定方程组通常没有唯一解,而是有无穷多个解。不定方程组的求解是数学中的一个重要问题,涉及到线性代数、数论、组合数学等多个领域。

不定方程组的求解方法有很多种,其中比较常见的方法包括高斯消元法、初等变换法、克莱姆法则、列主元消去法等。这些方法都需要根据不同的具体情况进行选择和应用。

在实际应用中,不定方程组的求解经常涉及到矩阵初等变换和线性方程组的解法。矩阵初等变换是指将矩阵中的一行或一列乘以非零常数,或者将矩阵中的一行或一列加上另一行或另一列的若干倍。矩阵初等变换可以改变矩阵的行列式、秩等性质,从而方便地解决一些不定方程组的问题。

线性方程组是指未知数只有一维,且方程组中每个方程都是一次方程的方程组。线性方程组的求解方法包括高斯消元法、矩阵求逆法、矩阵分解法等。其中,高斯消元法是最常用的方法之一,可以通过初等变换将线性方程组化为最简形式,从而求得其解析解或数值解。

3.2、对上述的常见求解方法介绍

1. 高斯消元法

高斯消元法是一种常用的线性方程组求解方法,它通过矩阵初等变换将方程组化为最简形式,从而求得其解析解或数值解。具体步骤如下:

(1)将方程组写成增广矩阵形式。

(2)选择一个主元,将其它行的元素都化为0。这个过程叫做消元。

(3)重复步骤(2),直到矩阵变为一个上三角矩阵。

(4)从最后一行向上逐步回代,求出未知数的值。

需要注意的是,高斯消元法只能求解线性方程组,对于不定方程组,需要先通过一些方法化为线性方程组。

2. 初等变换法

初等变换法是指将矩阵中的一行或一列乘以非零常数,或者将矩阵中的一行或一列加上另一行或另一列的若干倍。初等变换可以改变矩阵的行列式、秩等性质,从而方便地解决一些不定方程组的问题。

具体步骤如下:

(1)将方程组写成增广矩阵形式。

(2)通过初等变换将增广矩阵化为最简形式。

(3)根据最简形式求解未知数。

初等变换法的优点是简单易懂,但是对于特殊的方程组,可能需要进行多次变换才能得到最简形式。

3. 克莱姆法则

克莱姆法则是一种基于行列式的求解方法,适用于未知数个数等于方程个数的情况。具体步骤如下:

(1)将方程组写成增广矩阵形式。

(2)求出系数矩阵的行列式。

(3)将系数矩阵中的第i列替换为增广矩阵的最后一列。

(4)求出新的系数矩阵的行列式。

(5)未知数的值即为第4步的行列式除以第2步的行列式。

克莱姆法则的优点是简单易行,但是对于未知数个数较多的方程组,求解过程可能比较繁琐,而且容易出现误差。

4. 列主元消去法

列主元消去法是一种消元法,它通过矩阵初等变换将方程组化为最简形式,从而求得其解析解或数值解。与高斯消元法不同的是,列主元消去法每次选择系数矩阵的绝对值最大的元素作为主元,从而可以减小误差。

具体步骤如下:

(1)将方程组写成增广矩阵形式。

(2)选择系数矩阵中绝对值最大的元素作为主元。

(3)通过初等变换将主元下方的元素全部消为0。

(4)重复步骤(2)和(3),直到矩阵变为一个上三角矩阵。

(5)从最后一行向上逐步回代,求出未知数的值。

需要注意的是,列主元消去法只适用于系数矩阵非奇异的情况,否则可能会出现无解或多解的情况。

3.3、MATLAB中如何使用矩阵初等变换和解线性方程组。

1. 矩阵初等变换

MATLAB中可以使用矩阵初等变换函数来实现矩阵初等变换。常用的矩阵初等变换有三种:交换矩阵的两行、用一个非零常数乘以某一行、将某一行加上另一行的k倍。

例如,假设有一个3×3的矩阵A,我们想要交换第一行和第二行,可以使用MATLAB中的函数:

A([1 2],:) = A([2 1],:)

将A矩阵的第1行和第2行进行交换。

同样地,我们可以使用以下语句来将A矩阵第1行乘以一个非零常数k:

A(1,:) = k * A(1,:)

将A矩阵的第1行乘以k。

最后,如果我们想要将A矩阵第2行加上第1行的3倍,可以使用以下语句:

A(2,:) = A(2,:) + 3 * A(1,:)

将A矩阵的第2行加上第1行的3倍。

需要注意的是,矩阵初等变换函数并不会改变矩阵的秩,只是改变了矩阵的行列式的值。

2. 解线性方程组

MATLAB中可以使用反斜杠符号(\)来求解线性方程组。例如,假设我们有以下线性方程组:

3x1 - 2x2 + x3 = 1
2x1 + x2 - x3 = 0
x1 - x2 + x3 = 2

可以使用以下语句来求解:

A = [3 -2 1; 2 1 -1; 1 -1 1];
B = [1; 0; 2];
X = A \ B

将系数矩阵A和常数矩阵B输入反斜杠符号,求解出线性方程组的解。

需要注意的是,反斜杠符号求解的是方程组的最小二乘解,如果方程组有唯一解,则最小二乘解等于唯一解。

另外,如果方程组有多个解,反斜杠符号将求解其中的一个解。如果想要求解所有解,可以使用MATLAB中的线性代数函数来实现。

3.4、奇异方程组

1、奇异方程组简介

奇异方程组可以理解为一个线性方程组中存在无法确定唯一解的情况,即方程组的系数矩阵不是满秩矩阵。在这种情况下,我们需要采用其他方法来求解方程组的解。

奇异方程组的解可以分为两种情况:

  • 1. 无解:当方程组的系数矩阵的秩小于方程组的未知数个数时,方程组无解。
  • 2. 有无穷多个解:当方程组的系数矩阵的秩小于方程组的未知数个数时,方程组有无穷多解。

在实际应用中,我们通常采用最小二乘法来求解奇异方程组的解。

2、案例讲解

假设有如下奇异方程组:

2x + 3y + 4z = 10
4x + 6y + 8z = 20
6x + 9y + 12z = 30

我们可以先将其写成增广矩阵的形式:

2  3  4 | 10
4  6  8 | 20
6  9  12| 30

然后,我们可以使用MATLAB中的“pinv”函数来求解最小二乘解。具体步骤如下:

% 将方程组的系数矩阵A和常数矩阵b赋值
A = [2 3 4; 4 6 8; 6 9 12];
b = [10; 20; 30];

% 求解最小二乘解
x = pinv(A) * b;

% 输出结果
disp(x);

运行上述代码,我们得到的结果为:

-3.3333
6.6667
0

这就是方程组的最小二乘解。

3.5、超定方程组

1、超定方程组的简介

超定方程组指的是方程组的未知数数量多于方程数量的情况。在这种情况下,方程组通常没有精确解,但可以使用最小二乘法来得到近似解。最小二乘法的基本思想是,将方程组的残差平方和最小化,从而得到一个近似解。

2、案例举例

假设我们有一个超定方程组:

A * x = b

其中A是一个m×n的矩阵(m>n),b是一个m维向量,x是一个n维向量,我们想要求出一个最小二乘解x*,使得||A * x* - b||^2最小。

使用最小二乘法可以得到以下公式:

x* = (A' * A) \ (A' * b)

其中,A'表示A的转置矩阵,\表示MATLAB中的反斜杠符号,用于求解线性方程组。

下面是一个使用MATLAB进行最小二乘法求解的例子:

假设我们有以下数据点:

x = [1; 2; 3; 4; 5];
y = [0.5; 2.5; 2; 4; 3.5];

我们想要使用最小二乘法拟合一个一次函数y = a * x + b,求出系数a和b的值。可以将这个问题转化为一个超定方程组:

A = [x, ones(length(x), 1)];
b = y;

其中,A是一个5×2的矩阵,b是一个5维向量。

使用最小二乘法可以得到以下MATLAB语句:

x_star = (A' * A) \ (A' * b)

求解矩阵A的转置矩阵A'和b的乘积以及A'和A的乘积,并用反斜杠符号求解线性方程组,得到最小二乘解x*,即系数a和b的值。

需要注意的是,MATLAB中还有其他一些函数可以用于最小二乘法的求解,如pinv函数和lsqnonneg函数等。这些函数的使用方法可以参考MATLAB的官方文档。

3、\运算符、pinv()函数、lsqnonneg函数

MATLAB中用于解决最小二乘问题的函数有几个,其中最常用的是“\”运算符和pinv函数。

1. \运算符

在MATLAB中,使用“\”运算符可以直接求解最小二乘问题。具体地,对于一个线性方程组Ax=b,如果A不是方阵,可能无法直接求解,但是可以使用“\”运算符进行最小二乘求解。

例如,假设有一个超定方程组Ax=b,其中A为3行2列的矩阵,b为3行1列的向量,则可以使用以下代码求解:

A = [1, 2; 3, 4; 5, 6];
b = [3; 7; 11];
x = A\b;

这里的“\”运算符就是对超定方程组进行最小二乘求解的。

2. pinv函数

另一个常用的MATLAB函数是pinv函数,它可以计算矩阵的广义逆矩阵。对于一个超定方程组Ax=b,如果A不是满秩矩阵,即A的列数大于行数,那么A的逆矩阵不存在,但是可以计算A的广义逆矩阵,使得Ax=b的最小二乘解x可以表示为x=pinv(A)*b。

例如,假设有一个超定方程组Ax=b,其中A为3行2列的矩阵,b为3行1列的向量,则可以使用以下代码求解:

A = [1, 2; 3, 4; 5, 6];
b = [3; 7; 11];
x = pinv(A)*b;

这里的pinv函数计算了矩阵A的广义逆矩阵,然后用b乘以它得到了最小二乘解x。

以上两种方法都可以用于求解最小二乘问题,具体使用哪一种方法取决于具体的问题和数据。

3、lsqnonneg函数

MATLAB中的lsqnonneg函数是用于解决非负最小二乘问题的函数。它可以求解形如Ax=b和x>=0的线性方程组问题,其中x>=0表示x中所有的元素都大于等于0。lsqnonneg函数的基本语法为:

x = lsqnonneg(A, b);

其中,A为系数矩阵,b为常数向量,x为未知量向量,函数的输出值。lsqnonneg函数会自动求解线性方程组Ax=b,同时保证x中的元素都大于等于0。

下面是一个简单的例子,演示如何使用lsqnonneg函数求解非负最小二乘问题:

A = [1, 1, 1; 1, 2, 3; 1, 3, 5];
b = [2; 4; 6];
x = lsqnonneg(A, b);

在这个例子中,我们要求解Ax=b,其中A为3行3列的矩阵,b为3行1列的向量。我们使用lsqnonneg函数求解这个问题,并将结果保存在变量x中。由于这里的x必须为非负数,因此lsqnonneg函数会自动保证x中的元素都大于等于0。

lsqnonneg函数还有其他一些可选参数,例如指定最大迭代次数、容差等。如果需要更多的控制,可以查阅MATLAB官方文档。

总结

以上就是今天的内容~

最后欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小鱼༒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值