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

news/2024/11/28 11:48:19/

系列文章目录

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官方文档。

总结

以上就是今天的内容~

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


http://www.ppmy.cn/news/109778.html

相关文章

C++程序设计基础【二】

C程序设计基础【二】 一、类的概念1.类和实例的来源1.属性2.行为 2.程序中的类和对象1.数据成员2.成员函数 二、类1.类定义1.声明数据成员2.声明成员函数3.访问修饰符4.数据成员的访问修饰符5.成员函数的访问修饰符6.分组访问修饰符 2.成员函数定义3.内联函数1.隐式内联函数2.显…

高完整性系统:Programming and Proving with Pointers

目录 1. 引言 2. Pass By Value 3. Pass By Reference 4. Equality - Pass by Value 5. Equality - Pass by Reference 1. 引言 本章介绍霍尔逻辑和指针编程,通过Ada语言来阐述函数的传参方法。主要讲解了两种传参方式,分别是按值传递(…

【ros/ros2】LCN及ros2节点的LCN改写

文章目录 序言1. ros2两种节点类型2. LCN是什么3. LCN状态转换4. LCN状态转换要做的事5. LCN节点功能划分6. ros2节点的LCN改写 序言 背景:ros2节点改写为lifecycle node节点 1. ros2两种节点类型 Node:和ros1中一样的节点基类LifecycleNode&#xff…

Sequelize:Node.js 中的强大 ORM 框架

❤️砥砺前行,不负余光,永远在路上❤️ 目录 前言优势:提高效率,不用SQL即可完成数据库操作。 那什么是 Sequelize?主要特性:1、模型定义和映射:2、关联和联接:3、事务管理&#xff…

JavaEE HTTPS加密原理

HTTPS加密原理✿✿ヽ(▽)ノ✿ 文章目录 JavaEE & HTTPS加密原理1. 为什么要加密2. HTTPS加密原理2.1 初始想法2.2 引入非对称加密2.3 中间人攻击2.4 引入证书 JavaEE & HTTPS加密原理 1. 为什么要加密 例子:(运营商劫持) 你可能经常…

C语言实现守护进程

C语言实现守护进程 守护进程(daemon)是在后台运行的一种特殊进程,它没有控制终端,通常用于在系统启动时启动一些需要常驻后台的服务程序。 Linux的大多数服务器就是用守护进程的方式实现的。如web服务器进程http等。守护进程在后…

【Linux网络服务】Apache配置与应用

Apache配置与应用 一、构建虚拟Web主机1.1httpd服务支持的虚拟主机类型包括以下三种 二、基于域名的虚拟主机三、基于IP地址的虚拟主机四、基于端口的虚拟机五、Apache连接保持六、构建Web虚拟目录与用户授权限制七、日志分割 一、构建虚拟Web主机 虚拟Web主机指的是在同一台服…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…