搜档网
当前位置:搜档网 › matlab求解代数方程组

matlab求解代数方程组

matlab求解代数方程组
matlab求解代数方程组

第三讲 Matlab 求解代数方程组

理论介绍:直接法+迭代法,简单介绍相关知识和应用条件及注意事项 软件求解:各种求解程序

讨论如下表示含有n 个未知数、由n 个方程构成的线性方程组:

1111221121122222

1122n n n n n n nn n n

a x a x a x

b a x a x a x b a x a x a x b +++=??+++=???

?+++=? (1)

一、直接法 1.高斯消元法: 高斯消元法的基本原理: 在(1)中设110,a ≠将第一行乘以1

11

,k a a -

加到第(2,3,,),k k n = 得: (1)(1)(1)(1)11112211(2)(1)(2)

22112

(2)(2)(2)22n n n n n nn n n a x a x a x b a x a x b a x a x b ?+++=?++=???

?++=?

(2)

其中(1)

(1)1111,.k k a

a b b ==再设(2)22

0,a ≠将(2)式的第二行乘以(2)2

(2)22

,(3,,)k a k n a -= 加到第k 行,如此进行下去最终得到:

(1)(1)(1)(1)11112211(2)(1)(2)

22112(1)(1)(1)

1,111,1()()

n n n n n n n n n n n n n n n n nn n n a x a x a x b a x a x b a x a x b a x b --------?+++=?++=?

?

??+=?

?=?

(3) 从(3)式最后一个方程解出n x ,代入它上面的一个方程解出1n x -,并如此进行

下去,即可依次将121,,,,n n x x x x - 全部解出,这样在()

0(1,2,,)k kk a k n ≠= 的假设

下,由上而下的消元由下而上的回代,构成了方程组的高斯消元法. 高斯消元法的矩阵表示:

若记11(),(,,),(,,)T T ij n n n n A a x x x b b b ?=== ,则(1)式可表为.Ax b =于是高斯

消元法的过程可用矩阵表示为:

121121.n n M M M Ax M M M b --=

其中:

(1)21

(1)

11

1(1)

1

(1)11

111n a a M a a ?? ? ?- ?=

? ? ? ?- ??? (2)32

(2)222(2)

2(2)

221

111n a a M a a ??

?

? ?

-

?

=

? ? ?

?- ???

高斯消元法的Matlab 程序: %顺序gauss 消去法,gauss 函数 function[A,u]=gauss(a,n) for k=1:n-1

%消去过程 for i=k+1:n for j=k+1:n+1

%如果a(k,k)=0,则不能削去 if abs(a(k,k))>1e-6 %计算第k 步的增广矩阵 a(i,j)=a(i,j)-a(i,k)/a(k,k)*a(k,j); else

%a(k,k)=0,顺序gauss 消去失败 disp (‘顺序gauss 消去失败‘); pause; exit; end end end end

%回代过程 x(n)=a(n,n+1)/a(n,n); for i=n-1:-1:1 s=0; for j=i+1:n s=s+a(i,j)*x(j); end

x(i)=(a(i,n+1)-s)/a(i,i); end

%返回gauss 消去后的增广矩阵 A=triu(a); %返回方程组的解 u=x ;

练习和分析与思考: 用高斯消元法解方程组:

12345124512345124512452471523814

476192536x x x x x x x x x x x x x x x x x x x x x x ++++=??+++=??

++++=??+++=?

+++=??

2.列主元素消元法

在高斯消元法中进行到第k 步时,不论()

k ik a 是否为0,都按列选择()

||(,,)k ik a i k n = 中最大的一个,称为列主元,将列主元所在行与第k 行交换再

按高斯消元法进行下去称为列主元素消元法。

列主元素消元法的matlab 程序 %列主元guass 消去函数 function[A,u]=gauss(a,n) %消去过程 for k=1:n-1 %选主元

c=0;

for q=k:n

if abs(a(q,k))>c

c=a(q,k);

l=q;

end

end

%如果主元为0,则矩阵A不可逆

if abs(c)<1e-10

disp(‘error’);

pause;

exit

end

%如果l不等于k,则交换第l行和第k行if l~=k

for q=k:n+1

temp=a(k,q);

a(k,q)=a(l,q);

a(l,q)=temp;

end

end

%计算第k步的元素值

for i=k+1:n

for j=k+1:n

a(i,j)=a(i,j)-a(i,k)/a(k,k)*a(k,j);

end

end

end

%回代过程

x(n)=a(n,n+1)/a(n,n);

for i=n-1:-1:1 s=0; for j=i+1:n s=a+a(i,j)*x(j); end

x(i)=(a(i,n+1)-s)/a(i,i); end

%返回列主元gauss 消去后的增广矩阵 A=triu(a); %返回方程组的解 u=x ;

练习和分析与思考:

用列主元消去法重新求解gauss 消元法求解的上述问题。 二、迭代法

1.迭代法的总体思想 (1)迭代公式的构造:

对线性方程组Ax b =,可以构造迭代公式(1)(),k k X BX f +=+给出(0),X 由迭代公式的(),k X 如果()k X 收敛于*,X 则*X 就是原方程组的解。 (2)矩阵的分解:

设线性方程组Ax b =,其中A 非奇异,则可以把A 矩阵分解:A D L U =--,

1122[,,,]nn D diag a a a = ,

1213121

23231

321,1

2

3

0000000n n n n n n n a a a a a a L a a U a a a a -????

?

?

?

? ? ?=-=- ? ?

?

?

? ???

??

于是Ax b =化为11(),x D L U x D b --=++与之对应的迭代公式为:

(1)1()1().k k x D L U x D b +--=++

2.雅可比(Jacobian )迭代法公式:

11(),B D L U f D b --=+=

用A 矩阵的元素表示为:

()

1,(1),(1,2,,)n

k i ij j j j i

k i ii

b a x x i n a =≠+-=

=∑

Jacobian 迭代法的Matlab 程序

function [y,n]=jacobi(A,b,x0,eps) %误差

if nargin==3 eps=1.0e-6; elseif nargin<3 error return end

%求A 的对角矩阵,下三角阵,上三角阵

D=diag(A);diag(diag(A))? L=-tril(A,-1); U=-triu(A,1); B=D\(L+U); f=D\b; y=B*x0+f; %迭代的次数

n=1;

%当误差没有满足要求时继续迭代

while norm(y-x0)>=eps x0=y; y=B*x0+f; n=n+1; end

练习和分析与思考:

利用Jacobian 迭代法求解方程组:

13234

12324312263155248

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

++=??+=? 3.高斯-塞德尔(Gauss-Seidel )迭代法公式:

将Jacobi 迭代公式(1)()()k k Dx L U x b +=++改进为(1)(1)()k k k Dx Lx Ux b ++=++,于是得到(1)1()1()()k k x D L Ux D L b +--=-+-.

11(),()B D L U f D L b --=-=-

用A 矩阵的元素表示为:

1

()

()1

1

(1),(1,2,,)i n

k k i ij j

ij

j j i k i ii

b a x

a

x i n a -==++--

=

=∑∑

Gauss-Seidel 迭代法的Matlab 程序

function [y,n]=gauseidel(A,b,x0,eps) %误差

if nargin==3 eps=1.0e-6; elseif nargin<3 error return end

%求A 的对角矩阵,下三角阵,上三角阵

D=diag(A);diag(diag(A))? L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; y=G*x0+f;

%迭代的次数

n=1;

%当误差没有满足要求时继续迭代

while norm(y-x0)>=eps x0=y; y=G*x0+f; n=n+1; end

4.超松弛(Successive Over Relaxation method )迭代法(SOR ) 三、求解非线性方程的方法 1.根的隔离——二分法

利用函数的性质确定根的大致范围(,),a b 取(,)a b 的中点0,2

a b

x +=

若0()0f x =,则0x 即是根,否则如果0()()0,f a f x ?<令1,a a =10,b x =如果0()()

0,f b f x ?<令10,a x =1,b b =则在11(,)a b 内至少有一根,

且11(,)(,),a b a b ?再取11(,)a b 的中点11

12

a b x +=

,如此进行下去,包含根的区间(,)(1,2,)n n a b n = 的长度每次缩小一半,n 足够大时即可获得满意精度。 2.切线法

对于方程()0f x =将()f x 在k x 作Taylor 展式保留线性项,即

'()()()(),k k k f x f x f x x x =+-

设'()0,k f x ≠然后用1k x +代替右端的x 就得到迭代公式:1'

()

()

k k k k f x x x f x +=-,这种方法称为牛顿(Newton )切线法。 3.割线法

在牛顿切线法中用差商

11

()()

k k k k f x f x x x ----代替'()k f x ,则

111()()

()()

k k k k k k k f x x x x x f x f x -+--=-

-(割线法)

练习和分析与思考:

求方程2()14f x x x =+-的一个正根。 四、求解非线性方程组的牛顿法

方程组记作()0,F x =其中112(,,),()((),(

),,()),

T T

n n x x x F x f x f x f x == 设()()()1(,,),k k k T

n x x x = 且方程组()0F x =的第k 步近似解,与牛顿切线法类似,在

()k x 作Taylor 展式,线性化后用(1)k x +代替x 可得:

()()(1)

()

(1)()(1)()

111()()()()()()(1,2,,)k k k k k k k k i i i i n n n

f x f x f x f x x x x x i n x x +++??=+-++-=??

1

1112222'1

21

2

()n n n n n n f f f x x x f f f x x x F x f f f x x x ????? ?

??? ? ????

????= ? ? ???? ? ??????

则有(1)()'()(1)()()()()()k k k k k F x F x F x x x ++=+-,若'()()k F x 可逆,我们得到解非线性方程组的牛顿迭代公式:(1)()'()1()[()]()k k k k x x F x F x +-=-.

注:实际上在计算过程的第k 步,往往先计算()()k F x 和'()()k F x ,再解方程组'()()()()()k k k F x x F x =- 得到()k x 后,令(1)()()k k k x x x +=+ 即可.迭代过程需要分析其收敛性、分支与混沌. 练习和分析与思考:

用牛顿迭代法解非线性方程组:

22

112322

12332221

22310702030

x x x x x x x x x x x x ?-+++=?+-=??+-+=? 五、Matlab 求解(非)线性方程组的内置工具箱 1.线性方程组求解

(1)直接求解:线性方程组Ax b =,解法\,x A b =(注意:此处\不是/符号)

若A 为方阵,()*x inv A b =,若A 不是方阵,()*.x pinv A b = 练习和分析与思考:

求方程组的解.

12123234345

45561560560560

51

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

++=??++=?+=?? (2)利用矩阵分解求解线性方程组

矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积.常见的矩阵分解有LU 分解、QR 分解、Cholesky 分解以及Schur 分解、Hessenberg 分解、奇异分解等.

LU 分解:矩阵的LU 分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式.只要方阵A 非奇异,矩阵的LU 分解总是可以进行的.

Matlab 提供的lu 函数用于对矩阵进行LU 分解,其调用格式为:

[L,U]=lu(A):产生一个上三角阵U 和一个变换形式的下三角矩阵L (行交换)使之满足A=LU ,注意:这里的矩阵A 必须是方阵.

[L,U,P]=lu(A): 产生一个上三角阵U 和一个变换形式的下三角矩阵L 以及一个置换矩阵P 使之满足PA=LU ,注意:这里的矩阵A 必须是方阵.

实现LU 分解后,线性方程组Ax b =的解为:\(\)\(\).x U L b x U L Pb ==或 QR 分解:矩阵的QR 分解就是将一个矩阵A 分解成一个正交矩阵Q 和一个上三角矩阵R 的乘积形式. QR 分解只能对方阵进行. Matlab 的函数qr 用于对矩阵进行QR 分解,其调用格式为:

[Q,R]=qr(A):产生一个正交矩阵Q 和一个上三角矩阵R 使之满足A=QR . [Q,R,E]=qr(A): 产生一个正交矩阵Q 和一个上三角矩阵R 以及一个置换矩 阵E 使之满足AE=QR 方阵.

实现QR 分解后,线性方程组Ax b =的解为:\(\)(\(\)).x R Q b x E R Q b ==或 Cholesky 分解:如果矩阵A 是对称正定的,则Cholesky 分解将矩阵A 分解成一个下三角矩阵R 和上三角矩阵的乘积R’(R 的转置),即A= R’R . Matlab 的函数

chol(A)用于对矩阵进行Cholesky 分解,其调用格式为:

R=chol(A):产生一个上三角矩阵R 使之满足A=R ’R .若矩阵A 不是对称正定 的,则输出一个出错信息.

[R,p]=chol(A): 这个命令格式不输出出错信息. 当A 是对称正定的,则p=0,R 与上述格式得到的结果相同,否则p 为一个正整数,如果A 为满秩矩阵,则R 为一个阶数为q=p-1的上三角阵,且满足R ’R=A(1:q,1:q).

实现Cholesky 分解后, Ax b =变为'R Rx b =,所以'\(\).x R R b = 2.单变量非线性方程求解

Matlab 的函数fzero 可用于对矩阵求单变量非线性方程的根,其调用格式为:z=fzero(‘fname’,x0,tol,trace)

其中fname 是待求根的函数文件名,x0为搜索起点,一个函数可能有多个根,但fzero 函数只给出离x0最近的那个根.tol 控制结果的相对精度,缺省时取tol=eps,trace 指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时trace=0. 练习和分析与思考:

求()102x f x x =-+在00.5x =附近的根. 3.非线性方程组的求解

对于非线性方程组()0F x =用fsolve 函数求其数值解.fsolve 函数的调用格式为:x=fsolve (‘f un ’,x0,option)

其中x 为返回的解,fun 用于定义需求解的非线性方程组的函数文件名,x0是求根过程的初值,option 为最优化工具箱的选项设定.最优化工具箱提供了20多个选项,用户可以使用optimset 命令将它们显示出来.如果想改变其中某个选项,可以调用optimset()函数来完成.例如optimset(‘display’,’off’). 六、实例赏析

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中求方程的近似根(解)

第七讲MATLAB中求方程的近似根(解) 教学目的:学习matlab中求根命令,了解代数方程求根求解的四种方法,即图解法、准解析法、数值方法以及迭代方法,掌握对分法、迭代法、牛顿切法线求方程近似根的基本过程;掌握求代数方程(组)的解的求解命令. 教学重点:求方程近似解的几种迭代方法,代数方程(组)的解的求解命令的使用方法.利用所学的编程知识,结合具体的实例,编制程序进行近似求根.掌握相关的代数方程(组)的求解命令及使用技巧. 教学难点:方程的近似求解和非线性方程(组)的求解. 一、问题背景和实验目的 求代数方程0 x f的根是最常见的数学问题之一(这里称为代数方程,主要是想和 (= ) 后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当) f为线性方程,否则称之为非线性方程.(x (= x ) f是一次多项式时,称0 当0 (x f的多样性,尚无一般的解析解法可使用,但如f是非线性方程时,由于) ) x (= 果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.同时对于多未知量非线性方程(组)而言,简单的迭代法也是可以做出来的,但在这里我们介绍相关的命令来求解,不用迭代方法求解. 通过本实验,达到下面目的: 1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程; 2. 求代数方程(组)的解. 首先,我们先介绍几种近似求根有关的方法: 1.对分法 对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根. 设) a f ?b f,即()0 f a>,()0 f a<,()0 f b<或()0 f b>.则 ) , (< (x [b f在] a上连续,0 ( ) 根据连续函数的介值定理,在) fξ=. a内至少存在一点ξ,使()0 , (b 下面的方法可以求出该根:

MATLAB 微分代数方程解法Microsoft Word 文档

微分代数方程(DAE)的Matlab解法 所谓微分代数方程,是指在微分方程中,某些变量满足某些代数方程的约束。假设微分方程的更一般形式 可以写成 前面所介绍的ODEs数值解法主要针对能够转换为一阶常微分方程组的类型,故DAE就无法使用前面介绍的常微分方程解法直接求解,必须借助DAE的特殊解法。 其实对于我们使用Matlab求解DAE时,却没有太大的改变只需增加一个Mass参数即可。描述f(t,x)的方 法和普通微分方程完全一致。 注意:ode15i没法设置Mass属性,换句话说除了ode15i外其他ode计算器都可以求解DAEs问题1.当M(t,y)非奇异的时候,我们可以将微分方程等效的转换为y'=inv(M)*f(t,y),此时就是一个普通的ODE(当 然我们可以将它当成DAEs处理),对任意一个给定的初值条件都有唯一的解 2.当m(t,y)奇异时,我们叫它为DAEs(微分代数方程),DAEs问题只有在同时提供状态变量初值y0和状态变量一阶导数初值py0,且满足M(t0,y0)*yp0=f(t0,y0)时才有唯一解,假如不满足上面的方程,DAEs解算器会将提供的y0和py0作为猜测初始值,并重新计算与提供初值最近的封闭初值 3.质量矩阵可是一个常数矩阵(稀疏矩阵),也可以是一个自定义函数的输出。但是ode23s只能求解Mass 是常数的DAEs 4.对于Mass奇异的DAEs问题,特别是设置MassSingular为yes时,只能ode15s和ode23t解算器 5.对于DAE我们还有几个参数需要介绍 a.Mass:质量矩阵,不说了,这个是DAE的关键,后面看例子就明白了 b.MStateDependence:质量矩阵M(t,y)是否是y的函数,可以选择none|{weak}|strong,none表示M与 y无关,weak和strong都表示与y相关 c.MvPattern:注意这个必须是稀疏矩阵,S(i,j)=1表示M(t,y)的第i行中任意元素都与第j个状态变量yi有 关,否则为0 d.MassSingular:设置Mass矩阵是否奇异,当设置为yes时,只能使用ode15s和ode23t e.InitialSlope:状态变量的一阶导数初值yp0,和y0具有相同的size,当使用ode15s和ode23t时,该属 性默认为0 下面我们以实例说明,看下面的例子,求解该方程的数值解 【解】 真是万幸,选取状态变量和求状态变量的一阶导数等,微分方程转换工作,题目已经帮我们完成。 可是细心的网友会发现,最后一个方程不是微分方程而是一个代数方程(这就是为什叫DAE的原因),其实 我们可以将它视为对三个状态变量的约束。 (1)用矩阵形式表示出该DAEs

matlab-解方程

1、解方程 最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MA TLAB中有两种方法: (1)x=inv(A)*b —采用求逆运算解方程组; (2)x=A —采用左除运算解方程组。 例: 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 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); 结果是: x = 1.635+3.029*i 1.635-3.029*i -.283 -2.987 y = 1.834-3.301*i 1.834+3.301*i -.3600 -3.307。 二元二次方程组,共4个实数根;

matlab实验报告--求代数方程的近似根

数学实验报告 实验序号: 第二次 日期:2012 年 5月10日 班级 0920861 小组成员姓名 徐易斌;王勇 王康 学号 30 12 33 实验名称:求代数方程的近似根 问题背景描述: 求代数方程0)(=x f 的根是最常见的数学问题之一,当)(x f 是一次多项式时,称0)(=x f 为线性方程,否则称之为非线性方程. 当0)(=x f 是非线性方程时,由于)(x f 的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求. 本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间],[b a ,或给出某根的近似值0x .

实验目的: 1. 了解代数方程求根求解的四种方法:对分法、迭代法、牛顿切线法 2. 掌握对分法、迭代法、牛顿切线法求方程近似根的基本过程。 实验原理与数学模型: 1.对分法 对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根. 设)(x f 在],[b a 上连续,0)()(,()0f b <或()0f a <,()0f b >.则根据连续函数的介值定理,在),(b a 内至少存在一点 ξ,使()0f ξ=. 下面的方法可以求出该根: (1) 令02 a b x +=,计算0()f x ; (2) 若0()0f x =,则0x 是()0f x =的根,停止计算,输出结果0x x =. 若 0()()0f a f x ?<,则令1a a =,10b x =,若0()()0f a f x ?>,则令10a x =,1b b =;11 12 a b x +=. ……,有k a 、k b 以及相应的2 k k k a b x += . (3) 若()k f x ε≤ (ε为预先给定的精度要求),退出计算,输出结果2 k k k a b x +=; 反之,返回(1),重复(1),(2),(3). 以上方法可得到每次缩小一半的区间序列{[,]}k k a b ,在(,)k k a b 中含有方程的根. 当区间长k k b a -很小时,取其中点2 k k k a b x += 为根的近似值,显然有 1111111 ()()()2222 k k k k k k x b a b a b a ξ--+-≤-=??-==- 以上公式可用于估计对分次数k . 2. 迭代法 1) 迭代法的基本思想: 由方程()0f x =构造一个等价方程

用Matlab解代数方程

一般的代数方程 函数solve用于求解一般代数方程的根,假定S为符号表达式,命令solve (S)求解表达式等于0的根,也可以再输入一个参数指定未知数。例: syms a b c x S=a*x^2+b*x+c; solve(S) ans= [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] b=solve(S,b) b = -(a*x^2+c)/x

线性方程组 线性方程组的求解问题可以表述为:给定两个矩阵A和B,求解满足方程AX=B或XA=B的矩阵X。方程AX=B的解用X=A\B或X=inv (A)*B表示;方程XA=B 的解用X=B/A或X=B*inv (A)表示。不过斜杠和反斜杠运算符计算更准确,占用内存更小,算得更快。

线性微分方程 函数dsolve用于线性常微分方程(组)的符号求解。在方程中用大写字母D表示一次微分,D2,D3分别表示二阶、三阶微分,符号D2y相当于y关于t的二阶导数。 函数dsolve的输出方式 格式说明 y=dsolve(‘Dyt=y0*y’) 一个方程,一个输出参数[u,v]=dsolve(‘Du=v’,’Dv=u’) 两个方程,两个输出 参数 S=dsolve(‘Df=g’,’Dg=h’,’Dh=-2*f ‘)方程组的解以S.f S.g S.h结构数组的形式输出

例1 求 2 1u dt du += 的通解. 解 输入命令:dsolve('Du=1+u^2','t') 结 果:u = tg(t-c) 例2 求微分方程的特解. ???íì===++15 )0(',0)0(029422 y y y dx dy dx y d 解输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') 结果为: y =3e -2x sin (5x )

MATLAB Jacobi法解线方程组

Jacobi 法解线性代数方程组 Jacobi 法解线性代数方程组算法: Step 1取初始点)0(x ,精度要求eps Step 2若ε>-∞+) ()1(k k x x 转到Step 3 否则转到Step 4 Step 3用下式计算:b D x U L D x k k 1)(1)1()(--+++=转到Step 2 Step 4停止计算()1(+k x 作为线性方程组的解) Step 5 )22(6 43211k k k k h y y n n ++++ =+ Jacobi 法解线性代数方程组程序: function Jacobi(A,b,x0,eps) %A----线性方程组系数矩阵 %b----线性方程组的解(列向量) %x0---初始迭代点 %D----A 对角阵 %e----取误差(计算范数) D=diag(diag(A)); D=inv(D);%D 取自己的逆矩阵 L=tril(A,-1);%取下三角阵 U=triu(A,1);%取上三角阵 B=-D*(L+U); f=D*b; e=1000; while e>=eps x=B*x0+f; e=norm(x-x0); x0=x; end x

例:用Jacobi 迭代法解下列线性方程组 ???? ??????=????????????????????-1166122111221321x x x 输入:A=[1 2 -2;1 1 1;2 2 1]; b=[6;6;11]; x0=[0;0;0]; eps=1e-3; Jacobi(A,b,x0,eps) 得到: x = 2 3 1 指导教师: 年 月 日

matlab求解代数方程组解析

第三讲 Matlab 求解代数方程组 理论介绍:直接法+迭代法,简单介绍相关知识和应用条件及注意事项 软件求解:各种求解程序 讨论如下表示含有n 个未知数、由n 个方程构成的线性方程组: 1111221121122222 1122n n n n n n nn n n a x a x a x b a x a x a x b a x a x a x b +++=??+++=??? ?+++=? (1) 一、直接法 1.高斯消元法: 高斯消元法的基本原理: 在(1)中设110,a ≠将第一行乘以1 11 ,k a a - 加到第(2,3,,),k k n = 得: (1)(1)(1)(1)11112211(2)(1)(2) 22112 (2)(2)(2)22n n n n n nn n n a x a x a x b a x a x b a x a x b ?+++=?++=??? ?++=? (2) 其中(1) (1)1111,.k k a a b b ==再设(2)22 0,a ≠将(2)式的第二行乘以(2)2 (2)22 ,(3,,)k a k n a -= 加到第k 行,如此进行下去最终得到: (1)(1)(1)(1)11112211(2)(1)(2) 22112(1)(1)(1) 1,111,1()() n n n n n n n n n n n n n n n n nn n n a x a x a x b a x a x b a x a x b a x b --------?+++=?++=? ? ??+=? ?=? (3) 从(3)式最后一个方程解出n x ,代入它上面的一个方程解出1n x -,并如此进行 下去,即可依次将121,,,,n n x x x x - 全部解出,这样在() 0(1,2,,)k kk a k n ≠= 的假设 下,由上而下的消元由下而上的回代,构成了方程组的高斯消元法. 高斯消元法的矩阵表示: 若记11(),(,,),(,,)T T ij n n n n A a x x x b b b ?=== ,则(1)式可表为.Ax b =于是高斯

matlab实验报告--求代数方程近似根1

数学实验报告 实验序号:第二次 日期:2012年5月10日班级0920861小组成员姓名徐易斌;王勇王康 学号 301233实验名称:求代数方程的近似根 问题背景描述: 求代数方程0)(=x f 的根是最常见的数学问题之一,当)(x f 是一次多项式时,称0)(=x f 为线性方程,否则称之为非线性方程. 当0)(=x f 是非线性方程时,由于)(x f 的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求. 本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间],[b a ,或给出某根的近似值0x .

实验目的: 1.了解代数方程求根求解的四种方法:对分法、迭代法、牛顿切线法 2.掌握对分法、迭代法、牛顿切线法求方程近似根的基本过程。 实验原理与数学模型: 1.对分法 对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根. 设)(x f 在],[b a 上连续,0)()(,()0f b <或()0f a <,()0f b >.则根据连续函数的介值定理,在),(b a 内至少存在一点ξ,使()0f ξ=. 下面的方法可以求出该根: (1)令02 a b x +=,计算0()f x ;(2)若0()0f x =,则0x 是()0f x =的根,停止计算,输出结果0x x =. 若0()()0f a f x ?<,则令1a a =,10b x =,若0()()0f a f x ?>,则令10a x =,1b b =;1112 a b x += .……,有k a 、k b 以及相应的2k k k a b x +=.(3)若()k f x ε≤(ε为预先给定的精度要求),退出计算,输出结果2 k k k a b x += ;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列{[,]}k k a b ,在(,)k k a b 中含有方程的根. 当区间长k k b a -很小时,取其中点2k k k a b x += 为根的近似值,显然有1111111()()()2222 k k k k k k x b a b a b a ξ--+-≤-=??-==- 以上公式可用于估计对分次数k .2.迭代法 1)迭代法的基本思想:

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

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

matlab中方程根的近似计算

实验一方程根的近似计算 一、问题 求非线性方程的根 二、实验目的 1、学会使用matlab中内部函数roots、solve、fsolve、fzero求解方程,并用之解决实际问题。 4、熟悉Matlab的编程思路,尤其是函数式M文件的编写方法。 三、预备知识 方程求根是初等数学的重要内容之一,也是科学和工程中经常碰到的数值计算问题。它的一般形式是求方程f(x)=0的根。如果有x*使得f(x*)=0,则称x*为f(x)=0的根,或函数f(x)的零点。并非所有的方程都能求出精确解或解析解。理论上已经证明,用代数方法可以求出不超过3次的代数方程的解析解,但对于次数大于等于5的代数方程,没有代数求根方法,即它的根不能用方程系数的解析式表示。至于超越方程,通常很难求出其解析解。不存在解析解的方程就需要结合具体方程(函数)的性质,使用作图法或数值法求出近似解。而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。下面介绍几种常见的求近似根的方法。 1. 求方程近似解的简单方法 1.1 图形方法—放大法求根

图形的方法是分析方程根的性态最简洁的方法。不过,不要总是想得到根的精确值。这些值虽然粗糙但直观,多少个根,在何范围,一目了然。并且还可以借助图形局部放大功能,将根定位得更加准确一些。 例1.1 求方程x5+2x2+4=0的所有根及其大致分布范围。 解 (1)画出函数f(x)=x5+2x2+4的图形,确定方程的实数根的大致范围。为此,在matlab命令窗中输入 clf ezplot x-x, grid on hold on ezplot('x^5+2*x^2+4',[-2*pi,2*pi]) 1-1 函数f(x)=x5+2x2+4的图形

相关主题