搜档网
当前位置:搜档网 › MATLAB与线性方程组求解

MATLAB与线性方程组求解

MATLAB与线性方程组求解
MATLAB与线性方程组求解

科学从来不是以繁琐为特征的,工程问题则是很繁琐的,所以工程师需要计算机辅助,让计算机去处理大量的简单重复性工作,让人可以集中精力处理重要的关键性决策。

以现代飞行器外形设计为例,它决定了整个飞行器的空气动力学特征,因而地位十分重要。现在流体动力学的理论和计算流体动力学软件已经很成熟,问题是如何应用到特定的外形上来。人们采用的方法就是把飞行器的外形分成若干大的部件,每个部件沿着其表面用三维的细网格划分出许多立方体,这些立方体包括了机身表面以及此表面内外的空气。对每个立方体列出空气动力学方程,其中包括了与它相邻的立方体的共同边界变量,这些方程通常都已经简化为线性方程。对一个飞行器,小立方体的数目可以多达400,000个,而要解的联立方程可能多达2,000,000个。对如此大的方程组在求解之前先要简化,简化方法包括:一是利用许多不相邻的元素之间没有关联,其交叉系数为零,在整个大联立方程组中,绝大部分的系数为零,使用稀疏矩阵的计算方法;二是把矩阵进行分解如LU分解,可以大大提高计算速度。工程问题不断向矩阵理论提出需求,从而推动了理论的发展。绝不是某些超人,从定义出发,冥思苦想出新理论的。

卫星遥感图象处理中,气象和地球资源卫星大约用90分钟绕地球一圈,拍摄的图像宽度约为150公里。地球赤道长40,000公里,因此大约每16天,可以扫描地球的每个角落一遍。卫星上用三种可见光和四种红外光进行摄像,对每一个区域,可以获得七张遥感图象。利用多通道的遥感图可以获取尽可能多的地面信息,因为各种地貌、作物和气象特征可能对不同波段的光敏感。而在实用上应该寻找每一个地方的主因素,再把它们合成起来,成为一张实用的图象。每一个象素上有七个数据,形成一个多元的变量数组,在其中合成并求取主因素的问题,就与线性代数中要讨论的特征值问题有关。

国家地理信息系统在全国设立几十万个观察点,把每一点的经度、纬度和高度三个坐标建立起来。由于地壳的变动,测量仪器的现代化和实际需求的增长,地理信息系统精细化的工程是与无止境的。取点的密度一次比一次增加,精度要求一次比一次提高。现在对于经度纬度的测量精度要求,已经提高到了若干厘米,对于高度的精度要求更高。在一些边远地区,对于一些特征点的测量,要耗费很大的人力物力。例如对珠穆朗玛峰顶高度的测量,要经过多种方法,取得多种数据,并且用最小二乘法进行误差的处理。所以要获得全部数据一般就要好几年,需要解上百万个线性方程,所以只能几十年做一次全面更新。

例1

s1='x1+0.2*x2^3+1' % 方程1

s2='3*x1+2*x2+3' %方程2

[x1,x2]=solve(s1,s2) % 解联立方程1,2

在线性代数中,遇到的都是一次函数,x1= -1.

.2171612389003691410154884062240

-2.2171612389003691410154884062240 x2 = 0. -1.8257418583505537115232326093360 1.8257418583505537115232326093360

solve 命令用了符号运算工具葙,它的数字精度是32位十进制,而不是一般数值计算时的16位十进制。

2 克拉默(Gramer)法则

如果线性方程组的系数行列式D 不等于零,即

111212122212D 0n

n n n nn

a a a a a a a a a =≠

则线性方程组有惟一解,x 1=D 1\D,x 2=D 2\D,…,x n =Dn\D.其中D j 是把系数行列式D 中第j 列的元素用方程组右端的常数项代替后所得到的阶行列式。

=>如果齐次线性方程组的系数行列式D ≠0,则它没有非零解;

=>如果齐次线性方程组有非零解,则它的系数行列式必为0.

Cramer 法则使我们能利用行列式的运算求解线性方程组,但是由于高阶行列式的运算比较复杂,并且只有当方程组的系数矩阵是方阵时,才能使用。这些都使这种方法的应用受到很大限制,而更多地应用于一些问题的证明中。

若线性方程组的常数项b 1,b 2,…,b n 不全为零,称为非齐次线性方程组;若线性方程组的常数项b 1,b 2,…,b n 全为零,称为齐次线性方程组。

易知,x 1=x 2=…x n =0一定是齐次线性方程组的解,

若有一组不全为零的

例1.解线性方程组123123123222310x x x x x x x x x -+=-??+-=??-+-=?

>> A=[1 -2 1;2 1 -3;-1 1 -1];b=[-2;1;0];

>> A1=[b,A(:,2),A(:,3)];A2=[A(:,1),b,A(:,3)];A3=[A(:,1),A(:,2),b]; >> D=det(A);D1=det(A1);D2=det(A2);D3=det(A3);

>> x1=D1/D,x2=D2/D,x3=D3/D

x1 = 1

x2 = 2

x3 = 1

一般的,如果已知线性方程组有唯一解,可以直接用函数insolve()进行求解。 >> X=linsolve(A,b)

X = 1.0000

2.0000

1.0000

例2.解线性方程组123412423412342583692254760

x x x x x x x x x x x x x x +-+=??--=??-+=-??+-+=?

>> A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];b=[8 9 -5 0];

>> D1=A;D1(:,1)=b;D2=A;D2(:,2)=b;D3=A;D3(:,3)=b;D4=A;D4(:,4)=b;

>> D=det(A);X=[det(D1)/D,det(D2)/D,det(D3)/D,det(D4)/D]

X = 3 -4 -1 1

行列式的两种定义都只能做理论推导和证明,不能用来做实际计算,因为计算效率都极低。按定义,n 个数的全排列共有!n 个,n 阶矩阵是!n 项的和,每一项又是n 个数的乘积,不算符号项,总的乘法次数是(n-1)×!n 。忽略加法次数,一个25×25阶的矩阵,要做(25-1)×25!=3.7227e +026次乘法,用每秒能做1012(1万亿)次乘法的计算机算,需要1200万年。

第i 个排列中,第i (i=1~n )个乘积因子的逆序数要和它后面的(n-i)个数做(n-i)次比较,所有乘积因子的逆序数之和就是第i 个排列的符号的幂次。因此每个项的符号需要做1

(1)()2n i n n n i =+-=∑次比较,确定所有项的符号需要(1)×!2n n n +次比较。 计算行列式的最好方法还是行阶梯法,可以利用LU 分解:[L,U]=lu(A)

把A 分解为一个准下三角矩阵L 和一个上三角矩阵U 的乘积。因为det(L)=1,所以U 和A 的行列式相等,det(A)= det(U)。而三角矩阵U 的det(U)很好求。只要把U 的主对角线元素连乘就可得到它的行列式。

但是不能用reff 函数求行阶梯形,因为它得到的是行最简形,主对角线上的元素被化为1,不再能代表A 的行列式特性。

n ×n 阶的矩阵化为行阶梯形需要做的乘法次数不到n 3/3,25×25阶的矩阵,要

做约5000次乘法,用每秒能做1012(1万亿)次乘法的计算机算,只需要5毫微秒。

例1.用三角分解法求矩阵10 8 6 4 12 5 8 9 46 0 9 9 85 8 7 4 09 4 2 9 1????????=????????

A 的行列式 >> A=[10 8 6 4 1;2 5 8 9 4;6 0 9 9 8;5 8 7 4 0;9 4 2 9 1]

>> [l,u]=lu(A),

du = diag(u) %取u 矩阵的主对角线上的元素向量

D=prod(du) %求主对角线元素的连乘积

l = 1.0000 0 0 0 0

0.2000 -0.7083 1.0000 0 0

0.6000 1.0000 0 0 0

0.5000 -0.8333 0.8000 -0.2953 1.0000

0.9000 0.6667 -0.6588 1.0000 0

u =10.0000 8.0000 6.0000 4.0000 1.0000

0 -4.8000 5.4000 6.6000 7.4000

0 0 10.6250 12.8750 9.0417

0 0 0 9.4824 1.1235

0 0 0 0 -1.2349 du =

10.0000

-4.8000

10.6250

9.4824

-1.2349

D = 5.9720e+003

MATLAB提供了直接计算行列式的函数det().

例3.求

123

221

343

??

??

=??

??

??

A的逆矩阵

>> A=[1 2 3;2 2 1;3 4 3]; inv(A)

>> A\eye(3)

ans =

1.0000 3.0000 -

2.0000

-1.5000 -3.0000 2.5000

1.0000 1.0000 -1.0000

例5.求

1646

1539

1809

---

??

??

=-

??

??

??

A的逆矩阵.

>> A=[-16 -4 -6;15 -3 9;18 0 9];inv(A)

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 6.797284e-018.

ans =

1.0e+015 *

0.3753 -0.5004 0.7506

-0.3753 0.5004 -0.7506

-0.7506 1.0008 -1.5012

>> rank(A)

ans = 2

>> cond(A)

ans = 1.1438e+017

警告说“矩阵接近奇异,数据尺度很差,结果可能不准确,逆条件数= 6.797284e-018”条件数—衡量奇异程度的量

在用数值方法计算矩阵的逆时,由于计算中的方法误差和截断误差,人们不大可能得到理想的零。消元法中也不大可能有理想的全零行,所以矩阵是否奇异,并不是那么绝对的。为了评价矩阵接近“奇异”的程度,采用了‘条件数’(Condition Number)作为常用的衡量指标。它永远大于等于1。其数值愈接近于1,求逆的计算误差愈小。

MATLAB中,条件数用cond(A)计算,它达到104以上时,求逆的误差就可能相当可观。像现在,条件数达到1017(条件数是逆条件数RCOND的倒数),结果是根本不能用的。行列式的秩是2,实际上A的逆矩阵是不存在的,算出的“逆”是不对的。

MatLab求解线性方程组

MatLab解线性方程组一文通 当齐次线性方程AX=0,rank(A)=r

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

matlab解方程组

matlab解方程组 lnx表示成log(x) 而lgx表示成log10(x) 1-exp(((log(y))/x^0.5)/(x-1)) 1、解方程 最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB 中有两种方法: (1)x=inv(A)*b —采用求逆运算解方程组; (2)x=A\B —采用左除运算解方程组 PS:使用左除的运算效率要比求逆矩阵的效率高很多~ 例: x1+2x2=8 2x1+3x2=13 >>A=[1,2;2,3];b=[8;13]; >>x=inv(A)*b x = 2.00 3.00 >>x=A\B x = 2.00 3.00; 即二元一次方程组的解x1和x2分别是2和3。 对于同学问到的用matlab解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出n位有效数字的数值解.具体步骤如下: 第一步:定义变量syms x y z ...; 第二步:求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN'); 第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。 如:解二(多)元二(高)次方程组: x^2+3*y+1=0 y^2+4*x+1=0 解法如下: >>syms x y; >>[x,y]=solve('x^2+3*y+1=0','y^2+4*x+1=0'); >>x=vpa(x,4); >>y=vpa(y,4); 结果是:

MATLAB解线性方程组的直接方法

在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法. 3.1 方程组的逆矩阵解法及其MATLAB 程序 3.1.3 线性方程组有解的判定条件及其MATLAB 程序 判定线性方程组A n m ?b X =是否有解的MATLAB 程序 function [RA,RB,n]=jiepb(A,b) B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB ,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') else disp('请注意:因为RA=RB> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7]; b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果为 请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = 4,RB =4,n =4 在MATLAB 工作窗口输入 >>X=A\b, 运行后输出结果为 X =(0 0 0 0)’. (2) 在MATLAB 工作窗口输入程序 >> A=[3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3];b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b)

利用MATLAB求线性方程组

《MATLAB语言》课成论文 利用MATLAB求线性方程组 姓名:郭亚兰 学号:12010245331 专业:通信工程 班级:2010级通信工程一班 指导老师:汤全武 学院:物电学院 完成日期:2011年12月17日

利用MATLAB求解线性方程组 (郭亚兰 12010245331 2010 级通信一班) 【摘要】在高等数学及线性代数中涉及许多的数值问题,未知数的求解,微积分,不定积分,线性方程组的求解等对其手工求解都是比较复杂,而MATLAB语言正是处理线性方程组的求解的很好工具。线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。因而,线性代数被广泛地应用于抽象代数和泛函分析中;由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。因而,线性代数被广泛地应用于抽象代数和泛函分析中;由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。线性代数是讨论矩阵理论、与矩阵结合的有限维向量空间及其线性变换理论的一门学科。 【关键字】线性代数MATLAB语言秩矩阵解 一、基本概念 1、N级行列式A:A等于所有取自不同性不同列的n个元素的积的代数和。 2、矩阵B:矩阵的概念是很直观的,可以说是一张表。 3、线性无关:一向量组(a1,a2,…,an)不线性相关,既没有不全为零的数 k1,k2,………kn使得:k1*a1+k2*a2+………+kn*an=0 4、秩:向量组的极在线性无关组所含向量的个数成为这个向量组的秩。 5、矩阵B的秩:行秩,指矩阵的行向量组的秩;列秩类似。记:R(B)

线性方程组求解matlab实现

3.1 方程组的逆矩阵解法及其MATLAB 程序 3.1.3 线性方程组有解的判定条件及其MATLAB 程序 判定线性方程组A n m ?b X =是否有解的MATLAB 程序 function [RA,RB,n]=jiepb(A,b) B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB ,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') else disp('请注意:因为RA=RB> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7]; b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果为 请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = 4,RB =4,n =4 在MATLAB 工作窗口输入 >>X=A\b, 运行后输出结果为 X =(0 0 0 0)’. (2) 在MATLAB 工作窗口输入程序 >> A=[3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3];b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果 请注意:因为RA=RB> A=[4 2 -1;3 -1 2;11 3 0]; b=[2;10;8]; [RA,RB,n]=jiepb(A,B) 运行后输出结果 请注意:因为RA~=RB ,所以此方程组无解. RA =2,RB =3,n =3 (4)在MATLAB 工作窗口输入程序

实验一用matlab求解线性方程组

实验1.1 用matlab 求解线性方程组 第一节 线性方程组的求解 一、齐次方程组的求解 rref (A ) %将矩阵A 化为阶梯形的最简式 null (A ) %求满足AX =0的解空间的一组基,即齐次线性方程组的基 础解系 【例1】 求下列齐次线性方程组的一个基础解系,并写出通解: 我们可以通过两种方法来解: 解法1: >> A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; >> rref(A) 执行后可得结果: ans= 1 -1 0 0 0 0 -1 1 0 0 0 0 由最简行阶梯型矩阵,得化简后的方程 ??? ??=+--=+--=-+-0 22004321 43214321x x x x x x x x x x x x

取x2,x4为自由未知量,扩充方程组为 即 提取自由未知量系数形成的列向量为基础解系,记 所以齐次方程组的通解为 解法2: clear A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; B=null(A, 'r') % help null 看看加个‘r’是什么作用, 若去掉r ,是什么结果? 执行后可得结果: B= 1 0 1 0 0 1 0 1 ?? ?=-=-0 04321x x x x ?????? ?====4 4432221x x x x x x x x ??? ??? ??????+????????????=????? ???????1100001142 4321x x x x x x , 00111????? ? ??????=ε, 11002????? ???????=ε2 211εεk k x +=

Matlab线性方程组求解(Gauss消去法)

Matlab线性方程组求解 1. Gauss消元法: function x=DelGauss(a,b) % Gauss消去法 [n,m]=size(a); nb=length(b); det=1; %存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k); %计算行列式 end det=det*a(n,n); for k=n:-1:1 %回代求解 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);

end Example: >> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]'; >> x=DelGauss(A,b) x = 0.9739 -0.0047 1.0010 2. 列主元Gauss消去法: function x=detGauss(a,b) % Gauss列主元消去法 [n,m]=size(a); nb=length(b); det=1; %存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0; %选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return; end if r>k %交换两行 for j=k:n

Matlab求解线性方程组非线性方程组

求解线性方程组 solve,linsolve 例: A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1);%建立一个4元列向量 X=linsolve(A,B) diff(fun,var,n):对表达式fun中的变量var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式 diff(F); %matlab区分大小写 pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式 非线性方程求解 fsolve(fun,x0,options) 为待解方程或方程组的文件名;fun其中 x0位求解方程的初始向量或矩阵; option为设置命令参数 建立文件fun.m: function y=fun(x) y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))]; >>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve')) 注: ...为续行符 m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。Matlab求解线性方程组 AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如: X=A\B表示求矩阵方程AX=B的解; 的解。XA=B表示矩阵方程B/A=X. 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有: m=n 恰定方程,求解精确解; m>n 超定方程,寻求最小二乘解; m

线性方程组求解Matlab程序(精.选)

线性方程组求解 1.直接法 Gauss消元法: function x=DelGauss(a,b) % Gauss消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k); end

det=det*a(n,n); for k=n:-1:1 %回代 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k); end Example: >> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]'; >> x=DelGauss(A,b) x = 0.9739 -0.0047 1.0010 列主元Gauss消去法: function x=detGauss(a,b) % Gauss列主元消去法

[n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0;% 选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return; end if r>k %交换两行 for j=k:n z=a(k,j);a(k,j)=a(r,j);a(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end

matlab常用解方程及方程组函数

1. roots 求解多项式的根 r=roots(c) 注意: c 为一维向量,者返回指定多项式的所有根( 包括复根),poly 和roots 是互为反运算,还有就是roots 只能求解多项式的解 还有下面几个函数poly2sym、sym2poly 、eig >>syms x >>y=x A5+3*x A3+3; >>c=sym2poly(y);%求解多项式系数 >>r=roots(c); >>poly(r) 2. residue 求留数 [r, p, k] = residue(b,a) >>b = [ 5 3 -2 7] >>a = [-4 0 8 3] >>[r, p, k] = residue(b,a) 3. solve 符号解方程(组)——使用最多的 g = solve(eq1,eq2,...,eqn,var1,var2,...,varn) 注意:eqn 和varn 可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=号”,假如说varn 没有给出,使用findsym 函数找出默认的求解变量。返回的g 是个结构体,以varn 为字段。由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法 解方程A=solve('a*xA2 + b*x + c') 解方程组B=solve('a*uA2 + vA2', 'u - v = 1', 'aA2 - 5*a + 6') 4. fzero 数值求零点 [x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2...) fun 是目标函数,可以是句柄(@)、inline 函数或M 文件名 x0 是初值,可以是标量也可以是长度为2 的向量,前者给定一个位置,后者是给定一个范围options 是优化参数,通过optimset 设置,optimget 获取,一般使用默认的就可以了,具体参照帮助 p1,p2...为需要传递的其它参数 假如说(x/1446)A2+p/504.1+(t/330.9)*(log(1-x/1446)+(1-1 /5.3)*x/1446)=0 的根,其中p,t 是已知

用matlab解线性方程组

用matlab解线性方程组 2008-04-12 17:00 一。高斯消去法 1.顺序高斯消去法 直接编写命令文件 a=[] d=[]' [n,n]=size(a); c=n+1 a(:,c)=d; for k=1:n-1 a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去 end x=[0 0 0 0]' %回带 x(n)=a(n,c)/a(n,n); for g=n-1:-1:1 x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g) end 2.列主高斯消去法 *由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m 改成真正的行的值。该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。 直接编写命令文件 a=[] d=[] ' [n,n]=size(a); c=n+1 a(:,c)=d; %(增广) for k=1:n-1 [r,m]=max(abs(a(k:n,k))); %选主 m=m+k-1; %(修正操作行的值) if(a(m,k)~=0) if(m~=k) a([k m],:)=a([m k],:); %换行 end a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去end end x=[0 0 0 0]' %回带 x(n)=a(n,c)/a(n,n); for g=n-1:-1:1 x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g) end

雅可比解线性方程组matlab

雅可比迭代 使用雅可比迭代法求解线性方程组的步骤 步骤1:输入系数矩阵A和方程组右端向量B; 步骤2:将矩阵A分解为下三角阵L对角阵D和上三角阵U 可分解为(D+L+U)X=B for o=1:n d(o,o)=a(o,o); u(o,o+1:n)=-a(o,o+1:n); end for p=2:n l(p,1:p-1)=-a(p,1:p-1); end; 步骤3:将上式化简为x=B0x+f,其中B0=-D-1(L+U),f=D-1B for i=1:n b0(i,i+1:n)=u(i,i+1:n)/a(i,i); f(i,:)=b(i,:)/a(i,i); end for p=2:n b0(p,1:p-1)=l(p,1:p-1)/a(p,p);;

步骤4:采用迭代公式在允许误差范围e=1e-7内求得解向量x x0=x; x=b0*x+f 雅可比迭代法matlab程序: function [x,k]=jacobi(a,b) n=length(a); e=1e-7; m=100; x0=zeros(n,1); x=x0; k=0; d=zeros(n); l=zeros(n); u=zeros(n); b0=zeros(n); f=zeros(n,1);

x0=x+2*e; for o=1:n d(o,o)=a(o,o); u(o,o+1:n)=-a(o,o+1:n); end for p=2:n l(p,1:p-1)=-a(p,1:p-1); end for i=1:n b0(i,i+1:n)=u(i,i+1:n)/a(i,i); f(i,:)=b(i,:)/a(i,i); end for p=2:n b0(p,1:p-1)=l(p,1:p-1)/a(p,p); end while max(abs(x0-x))>e&k

解线性方程组直接方法matlab用法

2.1 方程组地逆矩阵解法及其MATLAB 程序 2.1.3 线性方程组有解地判定条件及其MATLAB 程序判定线性方程组A n m ?b X =是否有解地MATLAB 程序 function [RA,RB,n]=jiepb(A,b) B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB ,所以此方程 组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方 程组有唯一解.') else disp('请注意:因为RA=RB

Matlab求解线性方程组、非线性方程组

Matlab求解线性方程组、非线性方程组 姓名:罗宝晶学号:15 专业:材料学院高分子系 第一部分数值计算 Matlab求解线性方程组AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用除法运算符“/”和“\”。如:X=A\B表示求矩阵方程AX=B的解; X=B/A表示矩阵方程XA=B的解。 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有: m=n 恰定方程,求解精确解; m>n 超定方程,寻求最小二乘解; mm。则方程组没有精确解,此时称方程组为超定方程组。线性超定方程组经常遇到的问题是数据的曲线拟合。对于超定方程,在MATLAB中,利用左除命令(x=A\b)来寻求它的最小二乘解;还可以用广义逆来求,即x=pinv(A),所得的解不一定满足Ax=b,x只是最小二乘意义上的解。左除的方法是建立在奇异值分解基础之上,由此获得的解最可靠;广义逆法是建立在对原超定方程直接进行householder变换的基础上,其算法可靠性稍逊与奇异值求解,但速度较快;

matlab常用解方程及方程组函数

matlab常用解方程及方程组函数 1.roots求解多项式的根 r=roots(c) 注意:c为一维向量,者返回指定多项式的所有根(包括复根),poly和roots是互为反运算,还有就是roots只能求解多项式的解 还有下面几个函数poly2sym、sym2poly、eig >>syms x >>y=x^5+3*x^3+3; >>c=sym2poly(y);%求解多项式系数 >>r=roots(c); >>poly(r) 2.residue求留数 [r, p, k] = residue(b,a) >>b = [ 5 3 -2 7] >>a = [-4 0 8 3] >>[r, p, k] = residue(b,a) 3.solve符号解方程(组)——使用最多的 g = solve(eq1,eq2,...,eqn,var1,var2,...,varn) 注意:eqn和varn可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=”号,假如说varn没有给出,使用findsym函数找出默认的求解变量。返回的g是一个结构体,以varn为字段。由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法 解方程A=solve('a*x^2 + b*x + c') 解方程组B=solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6') 4.fzero数值求零点 [x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2...) fun是目标函数,可以是句柄(@)、inline函数或M文件名 x0是初值,可以是标量也可以是长度为2的向量,前者给定一个位置,后者是给定一个范围 options是优化参数,通过optimset设置,optimget获取,一般使用默认的就可以了,具体参照帮助 p1,p2...为需要传递的其它参数 假如说(x/1446)^2+p/504.1+(t/330.9)*(log(1-x/1446)+(1-1/5.3)*x/1446)=0的根,其中p,t是已知参数,但是每次都改变 那么目标函数如下三种书写格式,效果完全等效。注意参数列表中,未知数一定放第一位,其他参数放后面 (1)objfun=@(x,p,t)(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446); (2)objfun=inline('(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446)','x','p','t') 此时的调用格式如下 fzero(objfun,x0,options,p,t)%如果options使用的默认的话,那直接使用[],p和t就是我们需要传递的参数 fzero(@(x)objfun(x,p,t),x0,options)%这种格式与上面的等效 区别就是前者,将参数p和t作为fzero的参数进行传递,而后者是将p和t作为objfun的参数进行传递,没有本质区别 (3)function f=objfun(x,p,t)%以M文件格式书写目标函数 f=(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446); 此时有三种调用格式

MATLAB之GAUSS消元法解线性方程组

Matlab之Gauss消元法解线性方程组 1.Gauss消元法 function x=DelGauss(a,b) %Gauss消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k);%计算行列式 end det=det*a(n,n); for k=n:-1:1%回代求解 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);

end Example: >>A=[1.0170-0.00920.0095;-0.00920.99030.0136;0.00950.0136 0.9898]; >>b=[101]'; >>x=DelGauss(A,b) x= 0.9739 -0.0047 1.0010 2.列主元Gauss消去法: function x=detGauss(a,b) %Gauss列主元消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0;%选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return;

Matlab求解线性方程组、非线性方程组.docx

求解线性方程组solve ,linsolve 例: A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1);% 建立一个4 元列向量 X=linsolve(A,B) diff (fun , Var, n):对表达式fun中的变量Var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)' ) ; %sym ()用来定义一个符号表达式diff(F); %matlab 区分大小写 pretty(ans) %pretty ():用习惯书写方式显示变量;ans 是答案表达式非线性方程求解 fsolVe(fun,x0,options) 其中fun 为待解方程或方程组的文件名; x0 位求解方程的初始向量或矩阵; option 为设置命令参数 建立文件fun.m : function y=fun(x) y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))]; >>clear;x0=[0.1,0.1];fsolVe(@fun,x0,optimset('fsolVe')) 注: ...为续行符 m 文件必须以function 为文件头,调用符为@;文件名必须与定义的函数名相同;fsolVe ()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。 Matlab 求解线性方程组 AX=B 或XA=B

在MATLAB 中,求解线性方程组时,主要采用前面章节介绍的除法运算符“和/ ” “”。如: X=A?B表示求矩阵方程AX = B的解; X= B/A表示矩阵方程XA=B的解。 对方程组X = A?B ,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A 的列数,方程X= B/A 同理。 如果矩阵A不是方阵,其维数是m× n,则有:m = n 恰定方程,求解精确解;m>n 超定方程,寻求最小二乘解; m

实验一用matlab求解线性方程组

实验 用matlab 求解线性方程组 第一节 线性方程组的求解 一、齐次方程组的求解 rref (A ) %将矩阵A 化为阶梯形的最简式 null (A ) %求满足AX =0的解空间的一组基,即齐次线性方程组的基 础解系 【例1】 求下列齐次线性方程组的一个基础解系,并写出通解: 我们可以通过两种方法来解: 解法1: >> A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; >> rref(A) 执行后可得结果: ans= 1 -1 0 0 0 0 -1 1 0 0 0 0 由最简行阶梯型矩阵,得化简后的方程 ??? ??=+--=+--=-+-0 22004321 43214321x x x x x x x x x x x x ?? ?=-=-0 04321x x x x

取x2,x4为自由未知量,扩充方程组为 即 提取自由未知量系数形成的列向量为基础解系,记 所以齐次方程组的通解为 解法2: clear A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; B=null(A, 'r') % help null 看看加个‘r’是什么作用,若去掉 r ,是什么结果 执行后可得结果: B= 1 0 1 0 0 1 0 1 易见,可直接得基础解系 ?????? ?====4 4432221x x x x x x x x ??? ??? ??????+????????????=????? ???????1100001142 4321x x x x x x , 00111????? ? ??????=ε, 11002????? ???????=ε2 211εεk k x +=, 0111? ?????????=ε, 1002? ?????????=ε

线性代数方程组数值解法及MATLAB实现综述

线性代数方程组数值解法及MATLAB 实现综述 廖淑芳 20122090 数计学院 12计算机科学与技术1班(职教本科) 一、分析课题 随着科学技术的发展,提出了大量复杂的数值计算问题,在建立电子计算机成为数值计算的主要工具以后,它以数字计算机求解数学问题的理论和方法为研究对象。其数值计算中线性代数方程的求解问题就广泛应用于各种工程技术方面。因此在各种数据处理中,线性代数方程组的求解是最常见的问题之一。关于线性代数方程组的数值解法一般分为两大类:直接法和迭代法。 直接法就是经过有限步算术运算,可求的线性方程组精确解的方法(若计算过程没有舍入误差),但实际犹如舍入误差的存在和影响,这种方法也只能求得近似解,这类方法是解低阶稠密矩阵方程组级某些大型稀疏矩阵方程组的有效方法。直接法包括高斯消元法,矩阵三角分解法、追赶法、平方根法。 迭代法就是利用某种极限过程去逐步逼近线性方程组精确解的方法。迭代法具有需要计算机的存储单元少,程序设计简单,原始系数矩阵在计算过程始终不变等优点,但存在收敛性级收敛速度问题。迭代法是解大型稀疏矩阵方程组(尤其是微分方程离散后得到的大型方程组)的重要方法。迭代法包括Jacobi 法SOR 法、SSOR 法等多种方法。 二、研究课题-线性代数方程组数值解法 一、 直接法 1、 Gauss 消元法 通过一系列的加减消元运算,也就是代数中的加减消去法,以使A 对角线以下的元素化为零,将方程组化为上三角矩阵;然后,再逐一回代求解出x 向量。 1.1消元过程 1. 高斯消元法(加减消元):首先将A 化为上三角阵,再回代求解。 11121121222212n n n n nn n a a a b a a a b a a a b ?? ? ? ? ???L L M M O M M L (1)(1)(1)(1)(1)11121311(2)(2)(2)(2)222322(3)(3)(3)3333()()000000n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ???L L L M M M O M M L 步骤如下:

相关主题