当前位置:文档之家› MatLab求解线性方程组

MatLab求解线性方程组

MatLab解线性方程组一文通
当齐次线性方程AX=0,rank(A)=r<n时,该方程有无穷多个解,怎样用MATLAB求它的一个基本解呢?
用matlab 中的命令x=null(A, r )即可.其中:r=rank(A)
A=[ 1 1 1 1 -3 -1 1
1 0 0 0 1 1 0
-2 0 0 -1 0 -1 -2]
用matlab 求解程序为:A=[1 1 1 1 -3 -1 1;1 0 0 0 1 1 0;-2 0 0 -1 0 -1 -2];
r=rank(A);
y=null(A, r )
得到解为:
y=[ 0 -1 -1 0
-1 2 1 1
1 0 0 0
0 2 1 -2
0 1 0 0
0 0 1 0
0 0 0 1]
其列向量为Ay=0的一个基本解
MatLab解线性方程组一文通!
-------------------作者:liguoy(2005-2-3)
写在阅读本文前的引子。

一:读者对线性代数与Matlab 要有基本的了解;
二:文中的通用exp.m文件,你须把具体的A和b代进去。

一:基本概念
1.N级行列式A:|A|等于所有取自不同行不同列的n个元素的积的代数和。

2.矩阵B:矩阵的概念是很直观的,可以说是一张表。

3.线性无关:一向量组(a ,a ,…. a )不线性相关,即没有不全为零的数k ,k ,……kn
使得:k1* a +k2* a +…..+kn*an=0
4. 秩:向量组的极在线性无关组所含向量的个数称为这个向量组的秩。

5.矩阵B的秩:行秩,指矩阵的行向量组的秩;列秩类似。

记:R(B)
6.一般线性方程组是指形式: (1)
其中x1,x2,…….xn为n个未知数,s为方程个数。

记:A*X=b
7.性方程组的增广矩阵:=
8. A*X=0 (2)
二:基本理论
三种基本变换:1,用一非零的数乘某一方程;2,把一个方程的倍数加到另一个方程;3互换两个方程的位置。

以上称初等变换。

消元法(理论上分析解的情况,一切矩阵计算的基础)
首先用初等变换化线性方程组为阶梯形方程组,把最后的一些恒等式”0=0”(如果出现的
话)去掉,1:如果剩下的方程当中最后的一个等式是零等于一非零数,那么方程组无解;
否则有解,在有解的情况下,2:如果阶梯形方程组中方程的个数r等于未知量的个数,那
么方程组有唯一的解,3:如果阶梯形方程组中方程的个数r小于是未知量的个数,那么方
程组就有无穷个解。

用初等变换化线性方程组为阶梯形方程组,相当于用初等行变换化增广矩阵成阶梯形矩阵。

化成阶梯形矩阵就可以判别方程组有解还是无解,在有解的情形下,回到阶梯形方程组
去解。

定理1:线性方程组有解的充要条件为:R(A)=R()
线性方程组解的结构:
1:对齐次线性方程组,a: 两个解的和还是方程组的解;b: 一个解的倍数还是方程组的解。

定义:齐次线性方程组的一组解u1,u2,….ui 称为齐次线性方程组的一个基础解系,如
果:齐次线性方程组的任一解都能表成u1,u2,….ui的线性组合,且u1,u2,….ui线性无关。

2:对非齐次线性方程组
(I)方程组(1)的两个解的差是(2)的解。

(II)方程组(1)的一个解与(2)的一个解之和还是(1)的解。

定理2 如果r0是方程组(1)的一个特解,那么方程组(1)的任一个解r都可以表成:
r=ro+v (3)
其中v是(2)的一个解,因此,对方程(1)的任一特解ro,当v取遍它的全部解时,(3) 就
给出了(1)的全部解。

三:基本思路
线性方程的求解分为两类:一类是方程组求唯一解或求特解;一类是方程组求无穷解即通解。

I)判断方程组解的情况。

1:当R(A)=R()时有解(R(A)=R()>=n唯一解,R(
A)=R()〈n,有无穷解〉;2:当R(A)+1=R()时无解。

II)求特解;
III)求通解(无穷解), 线性方程组的无穷解= 对应齐次方程组的通解+非齐次方程组的
一个特解;
注:以上针对非齐次线性方程组,对齐次线性方程组,主要是用到I)、III)步!
四:基本方法
基本思路将在解题的过程中得到体现。

1.(求线性方程组的唯一解或特解),这类问题的求法分为两类:一类主要用于解低阶稠
密矩阵——直接法;一类是解大型稀疏矩阵——迭代法。

1.1利用矩阵除法求线性方程组的特解(或一个解)
方程:AX=b,解法:X=A"b,(注意此处’"’不是’/’)
例1-1 求方程组的解。

解: A = ; = ;b=(1,0,0,0,1)’
由于>>rank(A)=5,rank( )=5 %求秩,此为R(A)=R()>=n的情形,有唯一解。

>>X= A"b %求解X =(2.2662, -1.7218, 1.0571,-0.5940, 0.3188)’ 或用函数rref 求解,>>sv=rref(A:b);所得sv的最后一列即为所要求的解。

1.2 利用矩阵的LU、QR和cholesky分解求方程组的解,这三种分解,在求解大型方程组时很有用。

其优点是运算速度快、可以节省磁盘空间、节省内存。

I) LU分解又称Gauss消去分解,可把任意方阵分解为下三角矩阵的基本变换形式(行交换
)和上三角矩阵的乘积。

即A=LU,L为下三角阵,U为上三角阵。

则:A*X=b 变成L*U*X=b
所以X=U"(L"b) 这样可以大大提高运算速度。

命令[L,U]=lu (A)
在matlab中可以编如下通用m 文件:
在Matlab中建立M文件如下
% exp1.m
A;b;
[L,U]=lu (A);
X=U"(L"b)
II)Cholesky分解
若A为对称正定矩阵,则Cholesky分解可将矩阵A分解成上三角矩阵和其转置的乘积,即:其中R为上三角阵。

方程A*X=b 变成所以
在Matlab中建立M文件如下
% exp2.m
A;b;
[R’,R]=chol(A);
X=R"(R’"b)
III)QR分解
对于任何长方矩阵A,都可以进行QR分解,其中Q为正交矩阵,R为上三角矩阵的初等变换形式,即:A=QR
方程A*X=b 变形成 QRX=b
所以 X=R"(Q"b)
上例中[Q, R]=qr(A)
X=R"(Q"B)
在Matlab中建立M文件如下
% exp3.m
A;b;
[Q,R]=qr(A);
X=R"(Q"b)
2.求线性齐次方程组的通解(A*X=0)
在Matlab中,函数null用来求解零空间,即满足A•X=0的解空间,实际上是求出解空间的一组基(基础解系)。

在Matlab中建立M文件如下
% exp4.m
format rat %指定有理式格式输出
A;b=0;
r=rank(A);
bs=null(A,‘r’); %一组基含(n-r)个列向量
% k ,k ,……,k
% X= k *bs(:,1)+ k *bs(:,2)+……+ k *bs(:,n-r) 方程组的通解
pretty(X) %让通解表达式更加精美
3 求非齐次线性方程组的通解(A*X=b)
非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。

因此,步骤为:
第一步:判断AX=b是否有解,(利用基本思路的第一条)
若有解则进行第二步
第二步:求AX=b的一个特解
第三步:求AX=0的通解
第四步:AX=b的通解为:AX=0的通解加上AX=b的一个特解。

在Matlab中建立M文件如下
% exp4.m
clear all
A;b; %输入矩阵A,b
[m,n]=size(A);
R=rank(A);
B=[A b];
Rr=rank(B);
format rat
if R==Rr&R==n % n为未知数的个数,判断是否有唯一解
x=A \b;
elseif R==Rr&R<n %判断是否有无穷解
x=A\b %求特解
C=null(A, r ) %求AX=0的基础解系,所得C为n-R列矩阵,这n-R列即为对%应的基础解系
% 这种情形方程组通解xx=k(p)*C(:,P)(p=1…n-R)
else X= No solution! % 判断是否无解
end。

相关主题