MATLAB之方程组求解(八)
线性方程组求解
1.利用矩阵除法
线性方程组的一般形式为:
a11x1+a12x2+...+a1nxn=b1a_{11}x_1+a_{12}x_2+...+a_{1n}x_n = b_1 a11x1+a12x2+...+a1nxn=b1
a21x1+a22x2+...+a2nxn=b2a_{21}x_1+a_{22}x_2+...+a_{2n}x_n = b_2 a21x1+a22x2+...+a2nxn=b2
...... ...
an1x1+an2x2+...+annxn=bna_{n1}x_1+a_{n2}x_2+...+a_{nn}x_n = b_n an1x1+an2x2+...+annxn=bn
写成矩阵形式为Ax=bAx=bAx=b,其中A为矩阵,x和b为向量。
例1.求解下列方程组
{2x1−x2+x3=4−x1−2x2+3x3=5x1+3x2+x3=6\left\{\begin{array}{l} 2 x_{1}-x_{2}+x_{3}=4 \\ -x_{1}-2 x_{2}+3 x_{3}=5 \\ x_{1}+3 x_{2}+x_{3}=6 \end{array}\right. ⎩⎨⎧2x1−x2+x3=4−x1−2x2+3x3=5x1+3x2+x3=6
先将方程的系数和结果写成矩阵形式,然后利用命令求解。
A= [2 -1 1;-1 -2 3;1 3 1]A =2 -1 1-1 -2 31 3 1b = [4;5;6]b =456x = A\bx =1.1111
0.7778
2.5556
利用该方法进行求解需要注意是进行左除还是右除。
2.判断线性方程组解
对于线性方程组Ax=b,其中 AϵRm∗n,bϵRmA\epsilon R^{m*n},b\epsilon R^mAϵRm∗n,bϵRm。若m=n,我们称之为恰定方程组;若m>n,我们称之为超定方程组;若m<n,我们称之为欠定方程组。若b=0,则相应的方程组称为齐次线性方程组,否则称为非齐次线性方程组。对于齐次线性方程组解的个数有下面的定理。
定理1:设方程组系数矩阵A的秩为r,则
(1)若r=n,则齐次线性方程组有唯一解。
(2若r<n,则齐次线性方程组有无穷解。
对于非齐次线性方程组解的存在性有下面的定理。
定理2:设方程组系数矩阵A的秩为r,增广矩阵[Ab]的秩为s,则
( 1)若r=s=n,则非齐次线性方程组有唯一解。
(2)若r=s<n,则非齐次线性方程组有无穷解。
(3)若r≠s,则非齐次线性方程组无解。
关于齐次线性方程组与非齐次线性方程组之间的关系有下面的定理。
定理3:非齐次线性方程组的通解等于其一个特解与对应齐次方程组的通解之和。
若线性方程组有无穷多解,我们希望找到一个基础解系以此来表示相应齐次方程组的通解k1η1+k2η2+⋯+krηr(ki∈R)k_{1} \eta_{1}+k_{2} \eta_{2}+\cdots+k_{r} \eta_{r}\left(k_{i} \in R\right)k1η1+k2η2+⋯+krηr(ki∈R)。对于这个基础解系,我们可以通过求矩阵A的核空间矩阵得到,在MATLAB中,可以用null命令得到A的核空间矩阵。其调用格式如表所示。
调用格式 | 说明 |
---|---|
z = null(A) | 返回矩阵A的核空间矩阵z,z中的列向量为方程组的一个基础解系 |
z = null(A,‘r’) | z的列向量是方程的一个有理基 |
例2.求方程组
{x1+2x2+2x3+x4=02x1+x2−2x3−2x4=0x1−x2−4x3−3x4=0\left\{\begin{array}{c} x_{1}+2 x_{2}+2 x_{3}+x_{4}=0 \\ 2 x_{1}+x_{2}-2 x_{3}-2 x_{4}=0 \\ x_{1}-x_{2}-4 x_{3}-3 x_{4}=0 \end{array}\right.⎩⎨⎧x1+2x2+2x3+x4=02x1+x2−2x3−2x4=0x1−x2−4x3−3x4=0
的通解
clear
A = [1,2,2,1;2,1,-2,-2;1,-1,-4,-3];
format ratZ = null(A,'r')Z =2 5/3 -2 -4/3 1 0 0 1
所以该方程的通解由上面的计算结果可以知道,
x=k1[2−210]+k2[5/3−4/301](k1,k2∈R)x=k_{1}\left[\begin{array}{c} 2 \\ -2 \\ 1 \\ 0 \end{array}\right]+k_{2}\left[\begin{array}{c} 5 / 3 \\ -4 / 3 \\ 0 \\ 1 \end{array}\right]\left(k_{1}, k_{2} \in R\right) x=k1⎣⎢⎢⎡2−210⎦⎥⎥⎤+k2⎣⎢⎢⎡5/3−4/301⎦⎥⎥⎤(k1,k2∈R)
3.利用矩阵的逆(伪逆)与除法求解
对于线性方程组Ax=bAx= bAx=b,若其为恰定方程组且A是非奇异的,则可以利用矩阵的逆进行求解,即x=A−1bx = A^{-1}bx=A−1b,若不为恰定方程组,则可以利用伪逆进行求解。
Ps:有关恰定方程组的概念以及其他的更多的知识请参考下面这篇文章:
https://www.cnblogs.com/CQBZOIer-zyy/p/5931174.html
例3:求线性方程组{x1+2x2+2x3=1x2−2x3−2x4=2x1+3x2−2x4=3\left\{\begin{array}{l}x_{1}+2 x_{2}+2 x_{3}=1 \\ x_{2}-2 x_{3}-2 x_{4}=2 \\ x_{1}+3 x_{2}-2 x_{4}=3\end{array}\right.⎩⎨⎧x1+2x2+2x3=1x2−2x3−2x4=2x1+3x2−2x4=3的通解
clearformat rat
A = [1,2,2,0;0,1,-2,-2;1,3,0,-2]A =1 2 2 0 0 1 -2 -2 1 3 0 -2 b=[1;2;3];
x0=pinv(A)*bx0 =13/77 46/77 -2/11 -40/77 Z=null(A,'r')Z =-6 -4 2 2 1 0 0 1
因此该方程的解为:
x=[13/7746/77−2/11−40/77]+k1[−6210]+k2[−4201](k1,k2∈R)x=\left[\begin{array}{c}13 / 77 \\ 46 / 77 \\ -2 / 11 \\ -40 / 77\end{array}\right]+k_{1}\left[\begin{array}{c}-6 \\ 2 \\ 1 \\ 0\end{array}\right]+k_{2}\left[\begin{array}{c}-4 \\ 2 \\ 0 \\ 1\end{array}\right]\left(k_{1}, k_{2} \in R\right)x=⎣⎢⎢⎡13/7746/77−2/11−40/77⎦⎥⎥⎤+k1⎣⎢⎢⎡−6210⎦⎥⎥⎤+k2⎣⎢⎢⎡−4201⎦⎥⎥⎤(k1,k2∈R)
4.利用行阶梯进行求解
适用于恰定方程组,且系数矩阵非奇异。
将一个矩阵转化为行阶梯矩阵的命令是rref,其调用格式如下:
命令 | 说明 |
---|---|
R=rref(A) | 利用高斯消去法得到A的行阶梯矩阵R |
(R,jb)=rref(A) | 得到A的行阶梯矩阵R和向量jb |
(R,jb)=rref(A,tol) | 基于给定误差限tol的行阶梯矩阵R以及jb |
当系数矩阵非奇异时,可以利用该命令增广矩阵化为行阶梯矩阵,最后一列为方程的解。
例4:
求{5x1+6x2=1x1+5x2+6x3=0x2+5x3+6x4=0x3+5x4+6x5=0x4+5x5=1\left\{\begin{aligned} 5 x_{1}+6 x_{2} &=1 \\ x_{1}+5 x_{2}+6 x_{3} &=0 \\ x_{2}+5 x_{3}+6 x_{4} &=0 \\ x_{3}+5 x_{4}+6 x_{5} &=0 \\ x_{4}+5 x_{5} &=1 \end{aligned}\right.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧5x1+6x2x1+5x2+6x3x2+5x3+6x4x3+5x4+6x5x4+5x5=1=0=0=0=1 的解
format ratA = [5 6 0 0 0;1 5 6 0 0;0 1 5 6 0;0 0 1 5 6;0 0 0 1 5];
b=[1;0;0;0;1];
r = rank(A)r = %判断A是否非奇异 5 B = [A,b];
R = rref(B) %将B化为行阶梯矩阵R =1 至 5 列 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 6 列 %该列即为方程组的解911/402
-229/133 37/35 -79/133 95/298
关于奇异与非奇异的几点说明:
奇异矩阵就是对应的行列式等于0的矩阵,反之则为非奇异矩阵。
首先,看这个矩阵是不是方阵(即行数和列数相等的矩阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。
然后,再看此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。
同时,由|A|≠0可知矩阵A可逆,这样可以得出另外一个重要结论:可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。 如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。如果A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。
上面程序中,通过求A的矩阵的秩判断是否奇异,当矩阵的秩等于自变量的个数n时,即R(A)=nR(A)=nR(A)=n,则可以判断行列式不等于0,则为非奇异矩阵,进而可以通过将方程组的增广矩阵化为行阶梯矩阵求解。
5.矩阵分解法求解
关于矩阵分解法将会在以后的文章中阐述。
6.非负最小二乘法
MATLAB中可以利用lsqnonneg命令实现,实际上说解二次规划问题:
min∥Ax−b∥2s.t. xi⩾0,i=1,2,⋯n\begin{array}{ll}\min & \|A x-b\|_{2} \\ \text { s.t. } & x_{i} \geqslant 0, i=1,2, \cdots n\end{array}min s.t. ∥Ax−b∥2xi⩾0,i=1,2,⋯n
求{x2−x3+2x4=1x1−x3+x4=0−2x1+x2+x4=1\left\{\begin{array}{c}x_{2}-x_{3}+2 x_{4}=1 \\ x_{1}-x_{3}+x_{4}=0 \\ -2 x_{1}+x_{2}+x_{4}=1\end{array}\right.⎩⎨⎧x2−x3+2x4=1x1−x3+x4=0−2x1+x2+x4=1的最小二乘解
A = [0 1 -1 2;1 0 -1 1;-2 1 0 1];
b = [1;0;1];
x0=lsqnonneg(A,b)x0 =0 1 0 1/6004799503160661
MATLAB之方程组求解(八)相关推荐
- 10种基于MATLAB的方程组求解方法
线性方程组的求解包括直接法和迭代法,其中迭代法包括传统的高斯消元法,最速下降法,牛顿法,雅克比迭代法,共轭梯度法,以及智能启发式算法求解法和神经网络学习算法,传统算法可以相互组合改进,智能仿生启发式算 ...
- matlab非线性方程组求解得到矩阵,非线性方程组求解——附Matlab原程序
在科学与工程计算中,经常遇到求解非线性方程组的问题:非线性方程组在收敛速度及收敛性比线性方程组要差,特别对于非凸的非线性方程组,其求解更是困难.下面简要介绍非线性方程组的三种解法--牛顿法.拟牛顿法. ...
- [补充内容]关于使用matlab进行方程组求解的线性代数相关知识补充——矩阵
前言 根据李永乐老师课程学习.主要记载矩阵相关的性质.定理等知识,不会进行定理推导.证明. 矩阵概念及其运算 矩阵概念 矩阵:如下图的m×n个数排列出的表格,成为m×n矩阵,当m=n时,成为n阶矩阵或 ...
- [补充内容]关于使用matlab进行方程组求解的线性代数相关知识补充——n维向量
前言 根据李永乐老师课程学习.主要记载n维向量相关的性质.定理等知识,不会进行定理推导.证明. n维向量 定义:n个数a1,a2,a3-an构成的有序数组称为n维向量. n维向量分为: n维行向量 ...
- Matlab之代数方程求解:方程组求根
Matlab之代数方程求解:方程组求根 目录 方程组求根 1.solve( )求方程组的解 2.求解指数方程和对数函数方程 方程组求根 1.solve( )求方程组的解 (1)如求 eq1 = 'w ...
- Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛)
欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-<挨踢日志> 严格对角占优三对角方程组求解 对中等规模的n阶的(n<100)线性方程组,直接法的准确性和可靠性,所以常采用直接法 对 ...
- 遗传算法求解八皇后问题—matlab
目录 题目要求 设计思路 1.染色体编码 2.适应度函数 3.选择算子 4.交叉算子 5.变异算子 6.精英替换 运行结果 源程序 题目要求 在8*8的国际象棋棋盘上放置了八个皇后,要求没有一个皇后能 ...
- matlab trisys,Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛) | 学步园...
严格对角占优三对角方程组求解 对中等规模的n阶的(n<100)线性方程组,直接法的准确性和可靠性,所以常采用直接法 对于较高阶的方程组,特别是地于某些偏微分方程离散化后得到的大型稀疏方程组(系统 ...
- matlab龙格库塔法求通解,基于matlab及龙格库塔法求解布拉修斯方程.doc
基于matlab及龙格库塔法求解布拉修斯方程 Runge-Kutta法求解布拉修斯解 摘要 薄剪切层方程主要有三种解法,即相似解,非相似条件下对偏微分方程组的数值解和近似解.布拉修斯解是布拉修斯于19 ...
- Matlab随笔之求解线性方程
原文:Matlab随笔之求解线性方程 理论知识补充: %矩阵除分为矩阵右除和矩阵左除. %矩阵右除的运算符号为"/",设A,B为两个矩阵,则"A/B"是指方程X ...
最新文章
- python多次循环输出_函数的Python循环(多次将输出作为输入重用)
- 数据解读“特殊”春运:“返乡过年”人数同比降五成,这些人成今年春运主力...
- linux服务安装框架,CentOS7安装经典Web架构:LAMP
- Winform中使用FastReport的DesignReport时怎样设置Table的size自动调整
- zookeeper初探二 windows环境搭建伪集群
- NETINT刘伟:ASIC才是未来
- GalleryView
- 计算机组成原理中英对照篇,信息科学系课程介绍(中英对照).doc
- linux shell 获取参数 $,Linux - Shell - 参数获取
- 数据结构之排序算法:内部排序算法的应用与比较
- 恭喜你!看到了这篇靠谱的12款CAM软件测评(下篇)
- 【小技巧】程序运行结束后弹窗提醒
- Matlab的卷积编码实现
- Excle之说(2)-如何读“excel”
- java seo优化_java的seo优化-SEO技能未来发展前景
- 戴尔1420装XP方法和驱动
- 计算机相关名人,探寻计算机发展史上的名人足迹
- 微信退款No appropriate protocol (protocol is disabled or cipher suites are inappropriate)问题解决
- linux shell中\w \s \d \b ^ $等常用匹配用法
- AWGN信道下的香农限
热门文章
- python机器学习分析影响房价的主要因素
- 8年Android开发教你如何写简历,附超全教程文档
- ubuntu22.04设置静态ip地址
- php公众号模板在哪,微信公众号模板哪里找?公众号如何套用模板?
- HTML网页标签代码基本教学(1)基本标签学习
- co作为前缀的意思_智课雅思词汇---十五、前缀co-com-con-col-cor-是什么意思
- Android 最常用的设计模式十 安卓源码分析——策略模式(Strategy)
- 记录vant weapp 小程序组件库遇到的坑以及ios和安卓兼容问题 SubmitBar
- 如何在淘宝上利用信息差赚钱
- PAT (Basic Level) Practice 1085 PAT单位排行