资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第3章 矩阵、数组和符号运算,7,、,符号方程求解,线性方程组的符号解法,函数命令,linsolve,用来求解线性方程组符号解。,对方程,A*X=B,,linsolve,的调用格式为:,X=,linsolve,(A,B),等同于,X=sym(A)sym(B),A=sym(10,-1,0;-1,10,-2;0,-2,10),A=,10,-1,0,-1,10,-2,0,-2,10,B=(9;7;6),B=,9;7;6,linsolve(A,B),ans=,473/475,91/95,376/475,vpa(ans,6),ans=,.995789,.957895,.791579,矩阵,A,必须至少是行满秩的,。,当,A,的列数大于行数时,将给出解不惟一的警告提示。,b.,非线性方程的符号解法,用,函数零点法,求,非线性方程,的解有两个函数命令,即,fzero,和,fsolve,。,fzero,命令用于求一元函数零点,fsolve,命令用于求,解非线性方程组,首先需将方程,f(x)=g(x),转化为,F(x)=f(x)-g(x)=0,,,方程组也是如此,;然后再将函数,F(x),写成,MATLAB,的,m,函数,以便在,fzero,和,fsolve,命令中调用。,求解的过程为:,先猜测一个,初始零点,,或者该零点大概所在的区间;,然后通过计算,,使猜测值不断精确化,,或使猜测区间不断收缩,,直到达到预先指定的精度为止。,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,求一元函数零点命令,fzero,的调用格式为:,x=fzero(fun,x0):,求一元函数零点命令的最简形式;,x,fval,exitflag=fzero(fun,x0,options,P1,P2,.):,求一元函数零点命令的完整格式。,x0,是初始猜测的零点;,options,是优化迭代所采用的参数选项,,options,的缺省设置可以用命令,options=,optimset,(,fzero,),获得;,P1,P2,是向函数,fun,传递的附加参数。它的具体取名和函数,fun,中一致;,x,是输出参数,为所求的零点自变量值;,fval,是输出参数,为函数,fun,在,x,处的值;,exitflag,是描述函数,fun,的退出情况。若,exitflag,0,,,则表示找到函数零点后退出;若,exitflag,0,,,则表示没有找到零点或在搜索过程中遇到了无穷大的函数值。,第3章 矩阵、数组和符号运算,用,fzero,命令求解函数 的零点,(1),建立函数,f(x),的,M,文件。,function,y=fun1(x),y=x.4-4*x-5;,(2),建立水平横轴的,M,文件。,function,y=fun2(x),y=0;,(3),用作图法估计函数零点位置。,fplot(fun1,-5,5,r),hold on,fplot(fun2,-5,5,r),(4)用,zoom,和,ginput,命令获得零点的初始近似值,在程序中输入下列命令,,可得到函数的局部放大图及鼠标操作线,。,zoom on%,局部放大命令,tt=ginput(1),yy=ginput(1)%,用鼠标获取 2 个零点猜测值,zoom off%,恢复原来图形大小,显示所得零点初始猜测值,结果为:,tt=,-0.9838 0.0001,yy=,1.8762 0.0091,(5),用函数,fzero,命令求函数的精确零点,x,fval,exitflag=fzero(fun1,tt(1),)%,靠近,tt(1),点处的精确零点,x,fval,exitflag=fzero(fun1,yy(1),)%,靠近,yy(1),点处的精确零点,结果为:,Zero found near tt.,x=,-1,fval=,0,exitflag=,1,第3章 矩阵、数组和符号运算,Zero found near yy.,x=,1.8812,fval=,-6.2172e-015,exitflag=,1,解非线性方程组的,函数命令,fsolve,其调用格式为:,x=fsolve(fun,x0),:,解非线性方程组最简单的调用格式。,该式中除两个输入参数外,其余输入输出参数都可以缺省;,x,fval,exitflag,output,jacob=fsolve(fun,x0,options,P1,P2.):,解非线性方程组最完整的调用格式。,x0,是表示零点数是猜测值的向量;,options,是 优 化 迭 代 所 采 用 参 数 的 结 构 数 组。,P1,和,P2,是向函数,fun,传递的参数;,x,和,fval,是输出参数,所求零点的自变量值和函数值;,output,是输出此命令所用的计算方法、迭代次数等信息。,jacob,是函数在,x,处的,jacobian,。,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,求方程组 的根。,首先编制函数文件,fc.m,function,y=fc(x),y(1)=x(1)-0.7*sin(x(1)-0.2*sin(x(2);,y(2)=x(2)-0.7*cos(x(1)+0.2*sin(x(2);,y=y(1),y(2);,然后用,fsolve,求解,x,fval,exitflag,output,jacob=fsolve(fc,1.,1.,),%1.,1.,为初值,x=,0.3367 0.5553,fval=,1.0e-008*,0.2029 0.5242,exitflag=,1,output=,firstorderopt:5.7877e-009,iterations:5,funcCount:16,cgiterations:4,algorithm:1x43 char,jacob=,(1,1)0.3393,(2,1)0.2313,(1,2)-0.1700,(2,2)1.1700,求方程组 的解。,初始零点猜测值为:,x0,y0=0.0,-0.0058,用,fsolve,函数命令求精确解,fun=sin(x(1)+x(2),x(1)+6*x(2);,%,用字符串表达式形式命令,。,注意自变量必须写成,x(1),和,x(2),fun,函数也可用,M,函数文件的形式,function yy=fun(x),yy(1)=sin(x(1)+x(2);,yy(2)=x(1)+6*x(2);,XX,YY=fsolve(fun,x0(1),y0(1)%,解此非线性方程组,XX=,1.0e-016*,-0.5464 0.1214,YY=,1.0e-016*,-0.4250 0.1821,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,c.,一般代数方程(组)的符号解,slove,命令可以解一般代数方程,包括,线性方程、非线性方程和超越方程,。当方程不存在符号解,且又无其他自由参数时,函数,solve,将给出数值解。,命令调用格式为:,solve(eqn1,eqn2,.,eqnN,):,对,N,个方程的默认变量求解;,solve(eqn1,eqn2,.,eqnN,var1,var2,.,varN,):,对,N,个方程的,var1,var2,.,varN,变量求解。要注意变量的英文字母顺序,且在,变量前不可有空格,;,S=solve(eqn1,eqn2,.,eqnN,var1,var2,.,varN,):,对,N,个方程的,var2,.,varN,变量求解;,S,是一个结构数组;,x1,x2,xn,=solve(eqn1,eqn2,.,eqnN,var1,var2,.,varN,):,对变量,var1,var2,.,varN,求解,求解的结果分别赋给,x1,x2,xn,(,按照变量,var1,var2,.,varN,在英文字母中的顺序给,x1,x2,xn,赋值,),。,第3章 矩阵、数组和符号运算,求非线性方程组 的解,。,解:,x,y,z=solve(x2+sqrt(2)*x+2=0,x+3*z=4,y*z=-1,x,y,z),x=,(-1/2+1/2*i*3(1/2)*2(1/2),(-1/2-1/2*i*3(1/2)*2(1/2),y=,-51/73+3/73*i*3(1/2)-27/146*(-1/2+1/2*i*3(1/2)*2(1/2)-3/146*2(1/2),-51/73-3/73*i*3(1/2)-27/146*(-1/2-1/2*i*3(1/2)*2(1/2)-3/146*2(1/2),z=,-1/3*(-1/2+1/2*i*3(1/2)*2(1/2)+4/3,-1/3*(-1/2-1/2*i*3(1/2)*2(1/2)+4/3,d.,常微分方程的符号解,函数,dsolve,用来求常微分方程的符号解。,在符号方程中,用符号表达式中包含的字母“,D”,来代替微分运算,,符号,D2、D3、DN,分别对应于第二、第三、第,N,阶导数,。因变量是位于,D,后面的变量,,缺省的自变量为,t,。,dsolve,的调用格式为:,S=dsolve(,eqn1,eqn2,.),输入参数包含三部分内容:,微分方程、初始条件和指定独立变量,。输出,S,是结构数组。,初始条件或边界条件写成,y(a)=b,或,Dy,(a)=b,等。,a、b,可以是变量使用符以外的其他字符。,当初始条件少于微分方程数时,在所得解中将出现任意常数符,C1,C2,.,,解中任意常数符的数目等于所缺少的初始条件数。,当无输出参数时,,MATLAB,工作内存中在,y1,y2,,定义的输出参数中保存计算结果。,第3章 矩阵、数组和符号运算,dsolve(Dx=-a*x),ans=,C1*exp(-a*t),dsolve(Dx=-a*x,x(0)=2),ans=,2*exp(-a*t),dsolve(Df-f-sin(t)=0,f(pi/2)=0),ans=,-1/2*cos(t)-1/2*sin(t)+1/2*exp(t)/(cosh(1/2*pi)+sinh(1/2*pi),y=dsolve(Dy)2+y2=1,y(0)=0),y=,sin(t),-sin(t),第3章 矩阵、数组和符号运算,求 ,,f,(0)=1,g,(0)=2,的解。,S=dsolve(Df=f+g,Dg=-f+g,f(0)=1,g(0)=2),S=,f:1x1 sym,g:1x1 sym,S.f,ans=,exp(t)*(cos(t)+2*sin(t),S.g,ans=,exp(t)*(-sin(t)+2*cos(t),函数,dsolve,命令求解微分方程时,如果得不到其解,则给出,警告信息,。,第3章 矩阵、数组和符号运算,8,、,符号函数的二维图,二维符号函数的专用命令,ezplot,格式为:,ezplot(sym-fun,limits),参数含义如下:,sym-fun:,符号函数或代表它的符号变量;,limits:,为自变量,x,的取值范围,即,limits=x1,x2,,其默认值为-2,pi,2pi。,用,ezplot,绘函数图,syms,x,f=(x2)(,cos,(x)2);,ezplot,(f),第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,9,、,图示化函数计算器,a.,单变量函数分析界面,用于考察,两个一元函数各自性质及其相互关系,。该函数计算器由,funtool.m,文件生成。,在,MATLAB,命令窗口中键入下面命令即可:,funtool,第3章 矩阵、数组和符号运算,单函数运算、函数和常数,a,的运算、两个函数之间的运算和辅助操作,辅助操作,b.,泰勒级数逼近分析界面,观察函数,f(x),在给定区间位置上的,N,阶泰勒多项式,逼近的情况。,在,MATLAB,工作窗口中输入命令:,taylortool,或,taylortool(fx),fx,为字符串,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符
展开阅读全文