MAT用基础及教程 9_第1页
MAT用基础及教程 9_第2页
MAT用基础及教程 9_第3页
MAT用基础及教程 9_第4页
MAT用基础及教程 9_第5页
已阅读5页,还剩40页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

符号运算的特点符号对象的创建和使用符号多项式函数运算符号微积分运算符号方程求解Chapter_05MATLAB语言符号运算内容提纲重点难点创建MATLAB符号对象

熟悉MATLAB的符号函数的各种运算(cha.5)Next:cha.6

在MATLAB中的命令,如果其操作对象不是数值而是符号(符号表达式或符号数组),相应的计算称为符号计算。例:当a,b是变量时,计算积分就是符号计算。在符号计算中,通过符号常数、符号变量及有关符号操作形成符号表达式。

MATLAB中符号计算函数是数值计算函数的重载、符号计算工具箱采用的函数和数值计算的函数有一部分同名,为了得到准确的在线帮助,不能直接使用”help函数名”的格式、而应该使用”helpsym/函数名”的格式。

[例]查询逆矩阵符号计算。

helpsym/inv5.1MATLAB符号运算的概述helpsym/invinvSymbolicmatrixinverse.inv(A)computesthesymbolicinverseofAinv(VPA(A))usesvariableprecisionarithmetic.Examples:SupposeBis[1/(2-t),1/(3-t)][1/(3-t),1/(4-t)]Theninv(B)is[-(-3+t)^2*(-2+t),(-3+t)*(-2+t)*(-4+t)][(-3+t)*(-2+t)*(-4+t),-(-3+t)^2*(-4+t)]digits(10);inv(vpa(sym(hilb(3))));Seealsovpa.1符号运算与数值运算的区别

※数值运算中必须先对变量赋值,然后才能参与运算。

※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。 特点:运算对象可以是没赋值的符号变量可以获得任意精度的解SymbolicMathToolbox——符号运算工具包通过调用Maple软件实现符号计算的。maple软件——主要功能是符号运算,它占据符号软件的主导地位。5.2MATLAB符号对象的创建和使用一、Matlab符号矩阵的创建数值矩阵A=[1,2;3,4]A=[a,b;c,d]——不识别1)用matlab函数str2sym创建矩阵(symbolic的缩写)命令格式:A=str2sym('[]')※符号矩阵内容同数值矩阵

※需用str2sym指令定义※需用'

'标识2)用syms先定义变量,然后直接输入矩阵表达式A=str2sym('[a2*b;3*a0]')A=[a,2*b][3*a,0]symsab>>B=[a2*b;3*a0]

B=[a,2*b][3*a,0](2)两种定义符号表达式的区别:f1=str2sym('x^2+1')f1=x^2+1symsxf2=x^2+1f3='x^2+1'f3=x^2+1>>whosNameSizeBytesClassAttributesf11x1112symf21x1112symf31x510charx1x1112sym3.基本的符号运算MATLAB中基本的符号运算范围及所采用的运算符号与数值运算没有大的差异,涉及的运算函数也几乎与数值计算中的情况完全一样,简介如下:(A)算术运算加、减、乘、左除、右除、乘方:+、-、*、\、/、^;

点乘、点左除、点右除、点乘方:.*、.\、./、.^;共轭转置、转置:′、.′;(B)关系运算相等运算符号:==;不等运算符号:~=;符号关系运算仅有以上两种。(C)三角函数、双曲函数和相应的反函数三角函数:sin、cos和tan等;双曲函数:sinh、cosh和tanh等;(D)三角函数、双曲函数的反函数反三角函数:asin、acos和atan等;反双曲函数:asinh、acosh和atanh等;(E)复数函数求复数的共轭:conj;求复数的实部:real;求复数的虚部:imag;求复数的模:abs;求复数的相角:angle;等等;

(F)矩阵函数求矩阵对角元素:diag;求矩阵的上三角矩阵:triu;求矩阵的下三角矩阵:tril;求矩阵的逆:inv;求矩阵的行列式:det;求矩阵的秩:rank;求矩阵的特征多项式:poly;求矩阵的指数函数:expm;求矩阵的特征值和特征向量:eig;求矩阵的奇异值分解:svd;等等;【例5-2】举例说明数值量与符号对象的混合运算。>>symsabc>>B=[ab;c0]]%定义一个符号矩阵BB=[a,b][c,0]>>C=inv(B)C=[0,1/c][1/b,-a/(b*c)]>>D=[12;34];%定义一个数值矩阵DD=1234>>C+D%数值矩阵D与符号矩阵C直接相加ans=[1,1/c+2][1/b+3,4-a/(b*c)]4.符号矩阵的修改a.直接修改可用、键找到所要修改的矩阵,直接修改A(*,*)=‘new’b.指令修改用A1=subs(A,'old‘,'new')来修改

例如:A=sym('[a,2*b;3*a,0]')

A=[a,2*b][3*a,0]A(2,2)='4*b'A=[a,2*b][3*a,4*b]A2=subs(A,'b’,'c')A2=[a,2*c][3*a,0]将数值矩阵转化为符号矩阵函数调用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]5.符号矩阵与数值矩阵的转换将符号矩阵转化为数值矩阵可以用double()A=[1/3,5/2][10/7,2/5]double(A)ans=0.33332.50001.42860.40006.符号函数1)使用符号表达式

[例]计算使用符号表达式分别形成符号函数f=sin(x)cos(y)、g=ln(x2+y2)。

[算例代码]clear;symsxy;f=sin(x)*cos(y)g=log(x^2+y^2)2)使用m文件实际编程中,使用编制m文件形成符号函数、然后再行调用,有时候更为方便一些。functionf=f0605symsxyf=sin(x)*cos(y)5.3MATLAB符号多项式函数运算一、多项式函数的符号表达形式及相互转换(1)多项式的展开采用以下的函数指令可以将多项式展开成乘积项和的形式。g=expand(f)%将多项式展开成乘积项和的形式通过输入以下的命令行进行举例说明:symsxyabc>>f1=(x-a)*(x-b)*(x-c);>>f2=a*sin(x+b)+c*sin(x+a);>>g1=expand(f1)%将多项式f1展开g1=x^3-b*x^2-c*x^2-a*x^2-a*b*c+a*b*x+a*c*x+b*c*x>>g2=expand(f2)g2=a*cos(b)*sin(x)+a*sin(b)*cos(x)+c*cos(a)*sin(x)+c*sin(a)*cos(x)(2)多项式的整理多项式的书写习惯是按照升幂或降幂的规则来完成,否则需要加以整理。上例中g1式子并不符合人们的书写习惯,可以使用下列的函数指令加以整理。h=collect(g)%按照默认的变量整理表达式g,h=collect(g,v)%按照指定的变量或表达式v整理表达式g通过输入以下的命令行进行举例说明:>>h1=collect(g1)%按照变量x整理表达式g1h1=x^3+(-a-b-c)*x^2+(a*b+a*c+b*c)*x-a*b*c>>h2=collect(g2,cos(x))h2=(a*sin(b)+c*sin(a))*cos(x)+a*cos(b)*sin(x)+c*cos(a)*sin(x)(3)多项式的因式分解把一个多项式在一个范围内化为几个整式的积的形式,这种变形叫做因式分解,也称为分解因式。MATLAB所提供的因式分解函数指令格式为:p=factor(f)%将符号对象f进行因式分解输入以下的命令行进行举例说明:>>symsx%声明一个符号变量集>>f1=x^2-3*x+2;%定义符号表达式f1>>h1=factor(f1)%将f1进行因式分解h1=[x-1,x-2]

例当取何值时,齐次线性方程组:有非零解对于齐次线性方程组,当rank(A)<n或时,齐次方程组有非零解。程序如下:symslamdaA=[1-lamda,-2,4;2,3-lamda,1;1,1,1-lamda];>>D=det(A)D=-lamda^3+5*lamda^2-6*lamdafactor(D)ans=[-1,lamda,lamda-2,lamda-3](4)多项式转换成嵌套形式

在编制多项式计算程序时,如若知道多项式的嵌套形式,那么便可以采用一种迭代的算法来完成多项式的计算。MATLAB所提供的多项式转换成嵌套形式函数指令格式为:g=horner(f)%将多项式f转换成嵌套形式g输入以下的命令行进行举例说明:>>symsx>>f1=2*x^6-5*x^5+3*x^4+x^3-7*x^2+7*x-20;>>g1=horner(f1)%将一维多项式f1转换成嵌套形式g1g1=x*(x*(x*(x*(x*(2*x-5)+3)+1)-7)+7)-20二、符号多项式的向量表示形式(1)以向量形式输入多项式MATLAB提供了系数行向量的表达方式,其等同于输入了多项式f,相比于符号的表达形式则多项式向量的输入更为简洁。输入以下的命令行进行举例说明:>>symsxabc>>m=a*x^2+b*x+c;%以符号方式输入一个一元多项式m>>p=[abc]p=[a,b,c]%输入系数向量用来代表一个一元多项式p;f=poly2sym(p)%依照系数向量p写出x为变元的符号多项式

f=a*x^2+b*x+c

(1)单自变量函数求反函数的指令

格式如下:g=finverse(f)

%

对原函数f

的默认变量求反函数g

输入以下的命令行进行举例说明:>>symsx>>f1=2*x^2+3*x++1>>g1=finverse(f1)Warning:finverse(2*x^2+3*x+1)isnotunique.>Insym.finverseat43%运行过程中警示其反函数值不止一个g1=-3/4+1/4*(1+8*x)^(1/2)%对反函数g的定义域需定义一个主值范围三、反函数和复合函数求解(2)多自变量函数求反函数的指令

格式如下:g=finverse(f,v)

%

对原函数f

的指定变量v求反函数g输入以下的命令行进行举例说明:>>symstxab>>f1=b*exp(-t+a*x);>>g1=finverse(f1,t)%

对原函数f1

的指定变量t求反函数g1g1=a*x-log(t/b)继续输入:>>g2=finverse(f1)%

对原函数f1

的默认变量x求反函数g2g2=(t+log(x/b))/a(3)f(g(y))形式的复合函数k1=compose(f,g)%复合法则是g(y)代入f(x)中x所在的位置k2=compose(f,g,t)%g(y)代入f(x)中x所在的位置,变量t再代替y输入以下的命令行进行举例说明:>>symsxyt>>f=x*exp(-t);>>g=sin(y);>>k1=compose(f,g)k1=sin(y)*exp(-t)继续输入:>>k2=compose(f,g,t)k2=sin(t)*exp(-t)一、函数的极限

(1)求函数极限的指令格式limit(f,x,a)%相当于数学符号limit(f,a)%求函数f极限,只是变元为系统默认limit(f)%求函数f极限,变元为系统默认,a取0limit(f,x,a,’right’)%求函数f右极限(x右趋于a)limit(f,x,a,’left’)%求函数f左极限(x左趋于a)输入以下的命令行进行举例说明:>>symsx>>limit(sin(x)/x)%已知,求ans=15.4

符号微积分运算(2)一维函数的泰勒级数展开taylor(f,x,a)%将函数f在x=a处展开成5阶(默认)的泰勒级数taylor(f,x)%将函数f在x=0处展开成5阶泰勒级数taylor(f)%将函数f在默认变量为0处展开成5阶泰勒级数此外,以上指令格式中还可以添加参数,指定‘ExpansionPoint’(扩展点),‘Order’(阶数),‘OrderMode’(阶的模式)等计算要求,其格式如下:taylor(f,x,a,'PARAM1',val1,'PARAM2',val2,...)输入以下的命令行进行举例说明:symsxyz>>f=exp(-x)>>h1=taylor(f)h1=-x^5/120+x^4/24-x^3/6+x^2/2-x+1

继续输入:>>h2=taylor(f,'order',7)h2=x^6/720-x^5/120+x^4/24-x^3/6+x^2/2-x+1继续输入:>>h3=taylor(f,'ExpansionPoint',1,'order',3)h3=exp(-1)-exp(-1)*(x-1)+(exp(-1)*(x-1)^2)/2MATLAB还可以求二维函数的泰勒级数展开。二、求函数导数的命令(1)单变量函数求导diff(f,x,n)%计算f对变量x的n阶导数diff(f,x)%计算f对变量x的一阶导数diff(f,n)%计算f对默认变量的n阶导数diff(f)%计算f对默认变量的一阶导数输入以下的命令行进行举例说明:>>symsxa>>f=a*x^5>>g1=diff(f)g1=5*a*x^4

继续输入:>>g2=diff(f,2)g2=20*a*x^3(2)多元函数求偏导diff(f,x,y)%计算f对变量x偏导数,再求对变量y偏导diff(f,x,y,z)%求x偏导数,再求y偏导,然后再求z偏导输入以下的命令行进行举例说明:>>symsxyzabc>>f=sin(a*x^2+b*y^2+c*z^2)>>h1=diff(f,x)h1=2*a*x*cos(a*x^2+b*y^2+c*z^2)>>h2=diff(f,x,y)h2=-4*a*b*x*y*sin(a*x^2+b*y^2+c*z^2)>>h3=diff(f,x,y,z)h3=-8*a*b*c*x*y*z*cos(a*x^2+b*y^2+c*z^2)三、符号积分运算(1)求函数积分的命令int(S,v,a,b)%求函数S对指定变量v在[a,b]区间上的定积分int(S,a,b)%求函数S对默认变量在[a,b]区间上的定积分int(S,v)%求函数S对指定变量v的不定积分int(S)%求函数S对默认变量的不定积分

【例5-7】求函数的原函数。输入以下的命令行进行解题:>>symsx>>f=(x^2+1)^(-1/2)>>g=int(f)%求f的不定积分便可以求出f的原函数g=asinh(x)因而函数f的原函数是函数g:g=asinh(x)+C【例5-8】求定积分的值。输入以下的命令行进行解题:>>symsx>>f=(1/sqrt(2*pi))*exp(-x^2/2)>>int(f,0,inf)ans=(7186705221432913*2^(1/2)*pi^(1/2))/36028797018963968

得到的是一个计算式而非一个数,需要再做一次计算从而得到一个确切的数继续输入:>>(7186705221432913*2^(1/2)*pi^(1/2))/36028797018963968ans=0.5000(2)双重积分和三重积分运算举例【例5-9】求由方程确定的园面积。输入以下的命令行进行解题:>>symsxy>>S=int(int(1,y,-sqrt(1-x^2),sqrt(1-x^2)),x,-1,1)S=pi所求面积公式为:,

需要说明的是算法是由人设计的,即本题中的计算公式先由人推导出,其后交由MATLAB进行计算。当然,本题中求面积的算法不是唯一的,下例的三重积分其算法就可以更多了。(1)单变量符号方程求解可采用的函数指令格式如下:S=solve(eqn1)%求解方程eqn1关于默认变量的符号解S,所谓默认变量可由symvar(eqn1)找寻;S=solve(eqn1,var1)%求解方程eqn1关于指定变量var1的符号解S;输入以下的命令行进行举例说明:>>symsabxy>>eqn1=a*sin(x)==beqn1=a*sin(x)==b

继续输入:一、符号代数方程求解5.5符号方程求解>>S=solve(eqn1)%求解方程eqn1关于指定变量x的符号解SS=asin(b/a)%注意只给出了两个解

pi-asin(b/a)很明显,答案中只给出了两个解,这是需要进一步的分析的。此时可以在函数指令中加入参数:'ReturnConditions',参数默认值为false,若取为true时则额外提供两个参数。使用格式及应用举例说明如下:>>[S,params,conditions]=solve(eqn1,'ReturnConditions',true)S=asin(b/a)+2*pi*kpi-asin(b/a)+2*pi*kparams=kconditions=a~=0&in(k,'integer')a~=0&in(k,'integer')(2)多变量符号方程组求解可采用的函数指令格式如下:[Svar1,Svar2,...,SvarN]=solve(eqn1,eqn2,...,eqnM,var1,var2,...,varN)%为了避免求解方程时对符号解产生混乱,需要指明方程组中需要求解的变量var1,var2,...,varN,其所列的次序就是slove返回解的顺序,M不一定等于N。输入以下的命令行进行举例说明:>>symsabxy>>eqn2=x-y==a>>eqn3=2*x+y==b[Sx,Sy]=solve(eqn2,eqn3,x,y)Sx=a/3+b/3Sy=b/3-(2*a)/3二、符号常微分方程求解(1)单个符号常微分方程求解MATLAB提供的dsolve函数指令使用格式如下:S=dsolve(eqn,'cond','v')%上列函数指令对微分方程eqn在条件cond下对指定的自变量v进行求解。其中自变量v省略不写,自变量默认为t,或在符号声明中指出自变量;cond是初始条件,也可省略,而所得解中将出现任意常数符C,构成微分方程的通解;eqn为微分方程的符号表达式,方程中D被定义为微分,则D2、D3被定义为二阶、三阶微分,y的一阶导数dy/dx或dy/dt则可定义为Dy。【例5-12】求解下列常微分方程,已知初始条件:>>symsy(t)a%定义函数y及自变量t>>Dy=diff(y)%定义Dy为t的一阶导数Dy(t)=diff(y(t),t)>>D2y=diff(y,2)%定义D2y为t的二阶导数D2y(t)=diff(y(t),t,t)

继续输入:>>yt=dsolve(D2y==-a^2*y,y(0)==1,Dy(pi/a)==0)yt=exp(-a*t*1i)/2+exp(a*t*1i)/2

%请注意微分方程及初始条件的格式,均为符号表达式而非字符串形式。符号表达式中的等号应采用关系运算符“==”。(2)符号常微分方程组的求解符号常微分方程组的求解仍然使用dsolve函数指令,其使用格式如下:[Sv1,Sv2,…]=dsolve(eqn1,eqn2,…,'cond1','cond2',…,'v1','v2',…

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论