MATLAB第5章解方程.ppt
第5章 MATLABMATLAB的符号运算5.1 5.1 符号对象的创建符号对象的创建5.2 5.2 基本的符号运算基本的符号运算5.3 5.3 符号微积分符号微积分5.4 5.4 符号方程的求解符号方程的求解5.1 5.1 符号对象的创建(定义)符号对象的创建(定义)MATLAB提供了一种数据类型提供了一种数据类型:符号型数符号型数据据,可以进行符号运算,是符号运算的对象,可以进行符号运算,是符号运算的对象,因此也把符号数据称为符号对象。因此也把符号数据称为符号对象。符号对象可以是符号变量、符号常量、符符号对象可以是符号变量、符号常量、符号表达式或符号矩阵。号表达式或符号矩阵。符号对象要先定义,后引用。符号对象要先定义,后引用。如何定义符号变量、符号常量、符号表达如何定义符号变量、符号常量、符号表达式或符号矩阵?式或符号矩阵?用用sym函数、函数、syms函数可以将运算量定义函数可以将运算量定义为符号型数据。为符号型数据。sym函数函数 syms函数函数(一)建立符号变量和符号常数(一)建立符号变量和符号常数1、sym函数函数主要功能:创建单个符号变量。主要功能:创建单个符号变量。调用形式:调用形式:符号变量名符号变量名=sym(=sym(符号字符串符号字符串)将将符符号号字字符符串串创创建建为为一一个个符符号号变变量量,符符号号变变量量的的值值就就是是该该符符号号字字符符串串,符符号号字字符符串串 可可以以是是常常量量、变量、函数变量、函数或表达式。或表达式。注意注意:每次调用该函数,只能定义:每次调用该函数,只能定义一个一个符号变量。符号变量。使用方法举例使用方法举例a=sym(a=sym(a a)%将将aa创建为符号变量,以创建为符号变量,以a a作为作为输出变量名输出变量名 a=a=a ab=sym(b=sym(b b)x=sym(x=sym(x x)y=sym(y=sym(y y)符号变量的名字不一定和字符串中的字母相同符号变量的名字不一定和字符串中的字母相同 例如:例如:m=sym(m=sym(y y)SymSym函数可以定义函数可以定义符号常数符号常数:k1=sym(9);k2=sym(3);k1=sym(9);k2=sym(3);%定义符号变量定义符号变量 r1=9;r2=3;r1=9;r2=3;%定义数值变量定义数值变量 k1+sqrt(k2)k1+sqrt(k2)%符号计算(精确的数学表达式)符号计算(精确的数学表达式)ans=9+3(1/2)ans=9+3(1/2)r1+sqrt(r2)r1+sqrt(r2)%数值计算(近似为一个有限小数)数值计算(近似为一个有限小数)ans=10.7321 ans=10.7321 2、syms函数函数 syms函函数数的的功功能能与与sym函函数数类类似似。但但syms函函数数可可以以在在一一个个语句中语句中同时定义多个符号变量同时定义多个符号变量,其一般格式为:,其一般格式为:syms arg1 arg2 argN 将将 arg1,arg2,argN 定义为符号变量。定义为符号变量。例如:例如:syms a b c d x y使使用用方方便便、书书写写简简洁洁、意意义义清清楚楚,一一般般提提倡倡使使用用syms创创建建符号变量。符号变量。(二)(二)定义符号表达式定义符号表达式 符符号号表表达达式式由由符符号号变变量量、函函数数、算算术术运运算算符符等等组成。符号表达式的书写格式与数值表达式相同。组成。符号表达式的书写格式与数值表达式相同。有三种定义方法:有三种定义方法:1.1.用用symsym函数定义函数定义2.2.用用symssyms函函数数定定义义(用用已已定定义义的的符符号号变变量量组组成符号表达式成符号表达式)3.3.用单引号定义用单引号定义 f1=sym(3*x2-5*y+2*x*y+6)f1=3*x2-5*y+2*x*y+6 syms x y (必须先定义必须先定义 x y)f2=3*x2-5*y+2*x*y+6 f2=3*x2-5*y+2*x*y+6 f3=3*x2-5*y+2*x*y+6 f3=3*x2-5*y+2*x*y+6例如,将数学表达式例如,将数学表达式 定义为符号表达式定义为符号表达式 y=1+sqrt(5*x)/2 y=1+sqr(5*x)/2 f=sym(1+sqrt(5*x)/2)f=1+sqrt(5*x)/2 syms x v=1+sqrt(5*x)/2 v=1+1/2*5(1/2)*x(1/2)(三)定义符号矩阵(三)定义符号矩阵使用使用symsym和和symssyms函数可以创建符号矩阵,可以函数可以创建符号矩阵,可以直接输入或从数值矩阵转换。直接输入或从数值矩阵转换。例例2:创建一个符号矩阵两种方法:创建一个符号矩阵两种方法 m=sym(a,b;c,d)m=a,b c,dsyms a b c dn=a,b;c,dn=a,b c,d 注意:注意:符号矩阵与普通矩阵的区别:符号矩阵与普通矩阵的区别:命令窗口的显示形式不同;命令窗口的显示形式不同;工作空间窗口显示的变量图标不工作空间窗口显示的变量图标不同。同。建立符号矩阵建立符号矩阵Z=sym(a3-b3,sin(alp)2+cos(alp)2;(15*x*y-3*x2)/(x-5*y),78);Z=a3-b3,sin(alp)2+cos(alp)2(15*x*y-3*x2)/(x-5*y),78syms a b x y alp Z1=a3-b3,sin(alp)2+cos(alp)2;(15*x*y-3*x2)/(x-5*y),78Z1=a3-b3,sin(alp)2+cos(alp)2(15*x*y-3*x2)/(x-5*y),78(四)符号表达式中符号(四)符号表达式中符号变量变量的确定的确定 在在数数学学表表达达式式中中,一一般般习习惯惯于于使使用用排排在在字字母母表表前前面面的的字字母母作作为为变变量量的的系系数数(常常数数),而而用用排排在在后后面面的的字字母母(如如x,y,zx,y,z)表示变量。例如:表示变量。例如:f=ax f=ax2 2+bx+c+bx+c 表表达达式式中中,将将x x看看作作自自变变量量,a,b,ca,b,c通通常常被被认认为为是是常常数数,用用作变量的系数。作变量的系数。i,j 通常表示虚数单位,在符号运算中不能用作自变量通常表示虚数单位,在符号运算中不能用作自变量 在在MATLABMATLAB中中引用符号表达式时,有符号常量和符号变量,如何确定谁引用符号表达式时,有符号常量和符号变量,如何确定谁是符号自变量呢?可以由用户可以指定;若用户没有指定符号变量,则自是符号自变量呢?可以由用户可以指定;若用户没有指定符号变量,则自动使用动使用findsym函数默认的变量作为函数的变量参数。函数默认的变量作为函数的变量参数。findsym函数的函数的原则为:自变量为在字母顺序排列的位置上最接近原则为:自变量为在字母顺序排列的位置上最接近x的的小写小写字母(除了字母(除了i和和j之外)。如果式子中没有上述字母,则之外)。如果式子中没有上述字母,则x会被视为默认的自会被视为默认的自变量。如下表:变量。如下表:符号表达式符号表达式 默认自变量默认自变量a*x2+b*x+c x1/(4+cos(t)t4*x/y x2*a+b b2*i+4*j x查询符号表达式的默认自变量查询符号表达式的默认自变量 findsym函函数数可可以以查查询询表表达达式式中中使使用用的的符符号号变变量量个个数数及及变变量名。量名。引用格式为:引用格式为:findsym(f,n)说明:说明:f 为用户定义的符号函数,为用户定义的符号函数,n为正整数,表示查询变量的个数。为正整数,表示查询变量的个数。n值省略时表示查询符号函数中全部系统默认变量。值省略时表示查询符号函数中全部系统默认变量。【例例3】查询符号函数】查询符号函数 中的系统默认变量。中的系统默认变量。syms a b n t x%定义符号变量定义符号变量f=a*xn+b*t;%给定符号表达式给定符号表达式findsym(f,1)%在在f函数中查询函数中查询1个系统默认变量个系统默认变量ans=x 表示表示f函数中查询的函数中查询的1个系统默认变量为个系统默认变量为x。findsym(f,2)ans=x,tfindsym(f,5)ans=x,t,n,b,a 以最接近以最接近x顺序排列的顺序排列的5个默认自变量个默认自变量findsym(f)ans=a,b,n,t,x 返回返回 f表达式中按字母顺序排列的全部自变量表达式中按字母顺序排列的全部自变量5.2 基本的符号运算基本的符号运算1.1.符号表达式的四则运算符号表达式的四则运算2.2.2.2.符号表达式的因式分解、展开、分式符号表达式的因式分解、展开、分式3.3.通分通分3.3.符号表达式的化简符号表达式的化简1.1.符号表达式的四则运算符号表达式的四则运算symadd(f1,f2)f1+f2 symsub(f1,f2)f1-f2 symmul(f1,f2)f1*f2 symdiv(f1,f2)f1/f2sympow(f1,f2)f1f2f=2*x2+3*x-5g=x2-x+7symadd(f,g)ans=3*x2+2*x+2symsub(f,g)ans=x2+4*x-12symmul(f,g)ans=(2*x2+3*x-5)*(x2-x+7)symdiv(f,g)ans=(2*x2+3*x-5)/(x2-x+7)sympow(f,3*x)ans=(2*x2+3*x-5)(3*x)2.2.符号表达式的因式分解、展开、分式通分符号表达式的因式分解、展开、分式通分因式分解函数为因式分解函数为 factorfactor 调用格式为:调用格式为:factor(s)factor(s)举例举例符号表达式的展开符号表达式的展开 函数为函数为 expand 调用格式为:调用格式为:expand(s)举例举例同类项合并函数为同类项合并函数为 collect 调用格式为:调用格式为:collect(s,n)举例举例 S为符号表达式,为符号表达式,n为要合并系数的自变量为要合并系数的自变量符号表达式的分式通分函数为符号表达式的分式通分函数为 numden 调用格式为:调用格式为:n,d=numden(s)举例举例 n 为通分后的分子,为通分后的分子,d为分母为分母3.3.符号表达式的化简符号表达式的化简表达式的化简函数为表达式的化简函数为 simple、simplify 调用格式为调用格式为:simplify(s)使用使用Maple的化简规则化简函数的化简规则化简函数 r,how=simple(s)用多种方法寻找符号表达式用多种方法寻找符号表达式s的最简型,的最简型,r为返回的为返回的化简形式化简形式,how为化简过程使用的主要为化简过程使用的主要方法方法 举例举例【例例1】对表达式对表达式 进行因式分解进行因式分解 syms x f=factor(x9-1)f=(x-1)*(x2+x+1)*(x6+x3+1)pretty(f)%按照类似书写习惯的方式显示按照类似书写习惯的方式显示(x-1)(x2+x+1)(x6+x3+1)【例例2】对大整数进行因式分解对大整数进行因式分解 【例例3】展开表达式展开表达式 和和 syms x y f=(x+1)5;expand(f)ans=x5+5*x4+10*x3+10*x2+5*x+1 f=sin(x+y);expand(f)ans=sin(x)*cos(y)+cos(x)*sin(y)【例例4】对表达式对表达式 分别将分别将自变量自变量x和和t的同类项合并的同类项合并 syms x t f=x*(x*(x-6)+12)*t;collect(f)ans=t*x3-6*t*x2+12*t*x collect(f,t)ans=x*(x*(x-6)+12)*t【例例5】对表达式对表达式 进行通分进行通分 syms x y f=x/y+y/x;n,d=numden(f)n=x2+y2 d=y*x【例【例6 6】对表达式对表达式 进行化简进行化简 syms x f=sin(x)2+cos(x)2;simplify(f)simplify(f)ans=ans=1 1【例【例7 7】将表达式将表达式 用嵌套形式表示。用嵌套形式表示。syms x horner(x3-6*x2+11*x-6)ans=-6+(11+(-6+x)*x)*x2.2.符号表达式的替换符号表达式的替换 通过符号替换使表达式的输出形式简化,得到一个简单通过符号替换使表达式的输出形式简化,得到一个简单的表达式的表达式 符号表达式的替换函数有:符号表达式的替换函数有:subexpr subexpr、subs subs 调用格式:调用格式:y,sigma=y,sigma=subexprsubexpr(s,sigma)(s,sigma)用变量用变量sigmasigma的值的值替换替换表达式表达式s s中中重复出现的字符串重复出现的字符串,y y返回替换后的结果。返回替换后的结果。调用格式:调用格式:r=subs(s,old,new)r=subs(s,old,new)举例举例 用新的符号变量用新的符号变量newnew代替代替表达式表达式s s中的变量中的变量oldold,r r为返回为返回替换后的结果。替换后的结果。【例【例8 8】分别用新变量替换表达式】分别用新变量替换表达式 a+b a+b 和表达式和表达式 中的变量中的变量 syms a b subs(a+b,a,5)ans=5+b subs(cos(a)+sin(b),a,b,sym(alpha),2)ans=cos(alpha)+sin(2)1.符号极限符号极限 函数函数limit用于求符号函数用于求符号函数f的极限。系统可以的极限。系统可以根据用户要求,计算变量从不同方向趋近于指定值根据用户要求,计算变量从不同方向趋近于指定值的极限值。该函数的格式及功能:的极限值。该函数的格式及功能:5.3 符号微积分符号微积分 limit(f,x,a):求符号函数求符号函数f(x)的极限值。即计算当变量的极限值。即计算当变量x趋近于常数趋近于常数a时,时,f(x)函数的极限值。函数的极限值。limit(f,a):求符号函数求符号函数f(x)的极限值。由于没有指定符的极限值。由于没有指定符号函数号函数f(x)的自变量,则使用该格式时,符号函数的自变量,则使用该格式时,符号函数f(x)的变量为的变量为函数函数findsym(f)确定的默认自变量,即变量确定的默认自变量,即变量x趋近于趋近于a。limit(f):求符号函数求符号函数f(x)的极限值。符号函数的极限值。符号函数f(x)的变量的变量为函数为函数findsym(f)确定的默认变量;没有指定变量的目标值时,确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于系统默认变量趋近于0,即,即a=0的情况。的情况。limit(f,x,a,right):求符号函数求符号函数f的极限值。的极限值。right表示变量表示变量x从右边趋近于从右边趋近于a。limit(f,x,a,left):求符号函数求符号函数f的极限值。的极限值。left表示表示变量变量x从左边趋近于从左边趋近于a。【例【例1 1】求极限求极限syms xsyms x;%定义符号变量定义符号变量f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/sin(x)3f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/sin(x)3;%确定符号表达式确定符号表达式w=limit(f)%w=limit(f)%求函数的极限求函数的极限w=-1/2w=-1/22.符号微分符号微分3.diff函数用于对符号表达式求微分。该函数的一般引用格式为:函数用于对符号表达式求微分。该函数的一般引用格式为:diff(s,v,n)其中:其中:s s为符号表达式,为符号表达式,n n为正整数,为正整数,v v为变量为变量。说明:说明:diff(s,v,n)或或diff(s,n,v)求求符符号号表表达达式式s对对于于自自变变量量v求求n阶阶微分。微分。diff(s)求符号表达式求符号表达式s对于对于默认自变量默认自变量的的一阶一阶微分。微分。diff(s,v)求符号表达式求符号表达式s对于自变量对于自变量v的的一阶一阶微分。微分。diff(s,n)求符号表达式求符号表达式s对于对于默认自变量默认自变量求求n阶阶微分。微分。【例【例2】求下列函数:】求下列函数:f=xx的导数和的导数和3次导数次导数 syms x%定义符号变量定义符号变量 f=xx diff(f)diff(f,3)3符号积分符号积分 函函数数int可可以以实实现现符符号号表表达达式式的的积积分分。其其引引用格式为:用格式为:int(s,v,a,b)a、b表示定积分运算的下限和上限表示定积分运算的下限和上限。int(s,v,a,b)求符号表达式)求符号表达式s对于自变量对于自变量v从从a到到b的的定积分。定积分。int(s,a,b)求符号表达式求符号表达式s对于默认自变量从对于默认自变量从a到到b的的定积分。定积分。int(s)求符号表达式求符号表达式s对于默认自变量的对于默认自变量的不定积分不定积分。int(s,v)求符号表达式求符号表达式s对于自变量对于自变量v 的的不定积分不定积分。【例【例3 3】求下述积分。】求下述积分。求积分:求积分:syms xint(1/(1+x2)ans=atan(x)【例例4 4】定定义义一一个个符符号号函函数数 fxy=fxy=(a*x2+b*y2)/c2,分分别别求该函数对求该函数对x、y的导数和对的导数和对x的积分。的积分。syms a b c x y%定义符号变量定义符号变量fxy=(a*x2+b*y2)/c2;%生成符号函数生成符号函数 diff(fxy,x)%符号函数符号函数fxy对对x求导数求导数ans=2*a*x/c2diff(fxy,y)%符号函数符号函数fxy对对y求导数求导数 ans=2*b*y/c2int(fxy,x)%符号函数符号函数fxy对对x求积分求积分ans=1/c2*(1/3*a*x3+b*y2*x)4.符号求和符号求和(级数求和级数求和)表表达达式式求求和和(级级数数求求和和)运运算算是是数数学学中中常常见见的的一一种运算。种运算。函函数数symsum可可以以实实现现表表达达式式求求和和。该该函函数数的的引引用用时时,应应确确定定级级数数的的通通项项式式s,变变量量的的变变化化范范围围a和和b。该该函函数数的的引引用用格格式为:式为:symsum(s,a,b)【例【例5 5】求级数的和】求级数的和:1/1 12 2+1/2+1/22 2+1/3+1/32 2+1/4+1/42 2+找出通项式:找出通项式:syms k symsum(1/k2,1,Inf)%k值为值为1到无穷大到无穷大ans=1/6*pi2其结果为:其结果为:1/1 12 2+1/2+1/22 2+1/3+1/32 2+1/4+1/42 2+=+=2/6思考:5.Taylor级数展开级数展开 Taylor级数展开由函数级数展开由函数taylor实现。其调用格式为:实现。其调用格式为:taylor(f):计计算算表表达达式式f在在默默认认自自变变量量等等于于0处处的的5阶阶Taylor级级数展开式。数展开式。taylor(f,n,v):计计算算表表达达式式f在在默默认认自自变变量量v=0处处的的n-1阶阶Taylor级数展开式。级数展开式。taylor(f,n,v,a):计计算算表表达达式式f在在默默认认自自变变量量v=a处处的的n-1阶阶Taylor级数展开式。级数展开式。【例【例6 6】求表达式】求表达式 的的5 5阶阶TaylorTaylor级数展开式级数展开式syms xsyms xf=1/(5+cos(x)f=1/(5+cos(x)r=taylor(f)r=taylor(f)r=r=1/6+1/72*x21/6+1/72*x2 解代数方程(组)的函数为解代数方程(组)的函数为solvesolve格式为:格式为:solve(expr)solve(expr)solve(expr,var)solve(expr,var)solve(expr1,expr2,.,exprN,var1,var2,.varN)solve(expr1,expr2,.,exprN,var1,var2,.varN)solve(expr1,expr2,.,exprN)solve(expr1,expr2,.,exprN)expr1,expr2,.,exprNexpr1,expr2,.,exprN为为代代数数方方程程组组,var1,var2,.varNvar1,var2,.varN为为未未知知数数(自自变变量)。量)。说明:说明:若若不不指指明明符符号号表表达达式式expr1,expr2,.,exprNexpr1,expr2,.,exprN的的值值,系系统统默默认认为为0 0。例例如如给给出出一一个个表表达达式式x2-3*x-8,x2-3*x-8,则则系系统统将将按按x2-3*x-8=0 x2-3*x-8=0进进行行运运算算;故故应应将将等等号号右右侧的数值移过来。侧的数值移过来。5.4 符号方程的求解1.1.代数方程求解代数方程求解【例【例7 7】解代数方程:】解代数方程:a*xa*x2 2-b*x-6=0-b*x-6=0syms a b xsyms a b xsolve(a*x2-b*x-6)solve(a*x2-b*x-6)solve(a*x2-b*xsolve(a*x2-b*x6)6)ans=ans=1/2/a*(b+(b2+24*a)(1/2)1/2/a*(b+(b2+24*a)(1/2)1/2/a*(b-(b2+24*a)(1/2)1/2/a*(b-(b2+24*a)(1/2)即该方程有两个根即该方程有两个根:x x1 1=1/2/a*(b+(b2+24*a)(1/2)=1/2/a*(b+(b2+24*a)(1/2);x x2 2=1/2/a*(b-(b2+24*a)(1/2)=1/2/a*(b-(b2+24*a)(1/2)【例【例8 8】求解代数方程组求解代数方程组syms x y xf=x2-y2+z-10;g=x+y-5*z;h=2*x-4*y+z;x,y,z=solve(f,g,h)s=solve(f,g,h);s.x,s.y,s.zx=-19/80+19/240*2409(1/2)-19/80-19/240*2409(1/2)y=-11/80+11/240*2409(1/2)-11/80-11/240*2409(1/2)Z=-3/40+1/40*2409(1/2)-3/40-1/40*2409(1/2)ans=-19/80+19/240*2409(1/2),-11/80+11/240*2409(1/2),-3/40+1/40*2409(1/2)-19/80-19/240*2409(1/2),-11/80-11/240*2409(1/2),-3/40-1/40*2409(1/2)2.2.微分方程求解微分方程求解 常微分方程的符号解由常微分方程的符号解由dsolvedsolve实现,其调用格式为:实现,其调用格式为:r=dsolve(eq1,eq2,cond1,cond2,vr=dsolve(eq1,eq2,cond1,cond2,v)求由求由eq1,eq2,eq1,eq2,代表的常微分方程的符号解,代表的常微分方程的符号解,condition为初始条件,如果初始条件没有给出,则给出通解形式,为初始条件,如果初始条件没有给出,则给出通解形式,v v为自为自变量,若不指定,则为默认自变量。默认所有这些变量都是对自变量,若不指定,则为默认自变量。默认所有这些变量都是对自变量变量t求导。求导。r r为解。为解。在在方程方程中,用大写字母中,用大写字母D来表示一次微分,其后的数字表示来表示一次微分,其后的数字表示几重微分,几重微分,D2D2和和D3D3分别表示二次及三次微分,分别表示二次及三次微分,D D后面的字符为因后面的字符为因变量。变量。【例【例9 9】求微分方程求微分方程 的通解和当的通解和当y(0)=b时的特解时的特解dsolve(Dy=a*y)dsolve(Dy=a*y)ansansc1*exp(a*t)c1*exp(a*t)dsolve(Dy=a*y,y(0)=dsolve(Dy=a*y,y(0)=b)b)ans=b*exp(a*t)ans=b*exp(a*t)【例【例1010】求】求微分方程微分方程 的通解和当的通解和当y(0)=1及及 的特解的特解dsolve(D2y=-a2*y,y(0)=1,Dy(pi/a)=0)ans=cos(a*t)x,y=dsolve(Dx=y+x,Dy=2*x,x(0)=0,y(0)=1)%求微分方程组的解,加初始条件求微分方程组的解,加初始条件x=3*exp(t)-3-2*ty=1+2*t【例【例1111】求】求微分方程组微分方程组 的解,其中的解,其中x(0)=0,y(0)=1