第5章符号运算第5章符号计算(1)MATLAB7.X程序设计2/44主要内容:①创建符号常量和变量;②符号多项式的运算;③符号微积分的计算;④符号积分变换的计算;⑤符号微分方程和代数方程的求解。第5章符号计算(1)MATLAB7.X程序设计3/445.1数值运算与符号运算符号计算的特点:1)符号计算定义在符号变量的基础上,符号表达式计算前必须定义符号变量。2)符号计算是精确计算。3)符号计算的计算速度较慢。4)符号计算的运算符和基本数学函数与数值计算中的运算符和基本数学函数几乎完全相同。第5章符号计算(1)MATLAB7.X程序设计4/445.2.1创建符号常量•sym函数创建符号常量,格式1为:sym(‘常量’)b=sym('pi')%创建符号常量5.2符号变量和符号表达式第5章符号计算(1)MATLAB7.X程序设计5/44•sym函数的格式2为:sym(常量,参数)功能:把常量按参数的格式要求转换为符号常量。其中参数的含义:d返回最接近的十进制数(默认位数为32位)f返回该符号值最接近的浮点表示r返回该符号值最接近的有理数型(为系统默认方式),可表示为p/q、p*q、10^q、p/q、2^q和sqrt(p)形式之一e返回最接近的带有机器浮点误差的有理值第5章符号计算(1)MATLAB7.X程序设计6/445.2.2创建符号变量sym(‘变量’,参数)功能:把变量定义为符号对象。其中参数用来设置限定符号变量的数学特性,有三种选择:•’positive’表示为“正、实”符号变量,•’real’表示为“实”符号变量,•’unreal’表示为“非实”符号变量。如果不限定则参数可省略。第5章符号计算(1)MATLAB7.X程序设计7/44syms函数的格式为:syms(‘arg1’,‘arg2’,…,参数)symsarg1arg2…参数功能:创建多个符号变量。a=sym('a');b=sym('b');c=sym('c');x=5;y=-8;z=11;w=a*a+b*b+c*cw=x*x+y*y+z*z第5章符号计算(1)MATLAB7.X程序设计8/445.2.3建立符号表达式(1)利用单引号来生成符号表达式。y='1/sqrt(2*x)’f='cos(x^2)-sin(2*x)=0'第5章符号计算(1)MATLAB7.X程序设计9/44(2)用sym函数建立符号表达式f=sym(‘表达式’)u=sym('3*x^2-5*y+2*x*y+6')m=sym('[a,b;c,d]')第5章符号计算(1)MATLAB7.X程序设计10/44(3)使用已经定义的符号变量组成符号表达式symsxy;v=3*x^2-5*y+2*x*y+6第5章符号计算(1)MATLAB7.X程序设计11/445.3符号表达式的运算1.算术运算与数值运算一样,注意”\”,”/”的区别第5章符号计算(1)MATLAB7.X程序设计12/44例表达式的算术运算f1=sym('1/(a-b)');f2=sym('a/(a+b)');f1+f2f1-f2f1*f2f1^2第5章符号计算(1)MATLAB7.X程序设计13/442.关系运算运算符:==~=关系成立为1,不成立为0f1==f2f1~=f2第5章符号计算(1)MATLAB7.X程序设计14/443.函数运算(1)合并collect格式:collect(f)对符号表达式f合并同类项collect(f,v)对符号表达式f按变量v合并第5章符号计算(1)MATLAB7.X程序设计15/44例合并symsxy;R1=collect([(x+1)*(y+1),x+y])R1=[(y+1)*x+y+1,x+y]R2=collect((x+y)*(x^2+y^2+1),y)R2=y^3+x*y^2+(x^2+1)*y+x*(x^2+1)第5章符号计算(1)MATLAB7.X程序设计16/44(2)展开expand格式:expand(f)将表达式f展开例:展开symsxyabR1=expand((x-2)*(x-4))R2=expand(cos(x+y))R3=expand(exp((a+b)^2))第5章符号计算(1)MATLAB7.X程序设计17/44(3)因式分解factor格式:factor(f)将f因式分解例因式分解f=sym(‘x^2+y^2+2*x*y');R1=factor(f)第5章符号计算(1)MATLAB7.X程序设计18/44(4)化简simplify(f):利用代数中的函数规则对表达式进行化简simple(f):使用其他方法尽可能将表达式化简第5章符号计算(1)MATLAB7.X程序设计19/44例化简f=sym('cos(x)^2+sin(x)^2');g=sym('cos(x)+(-sin(x)^2)^(1/2)');R=simplify(f)R1=simplify(g)R2=simple(g)第5章符号计算(1)MATLAB7.X程序设计20/44(5)提取分子、分母格式:[n,d]=numden(f)提取分子、分母n=numden(f)只提取分子第5章符号计算(1)MATLAB7.X程序设计21/44例提取分子、分母f=sym('(x-1)/(x-2)+(x-3)/(2*x-1)');[nf,df]=numden(f)nf=3*x^2-8*x+7df=(x-2)*(2*x-1)g=sym(‘[x/2,a*x/(b*x+c);1/3,4*x+5]’);[ng,dg]=numden(g)ng=[x,a*x][1,4*x+5]dg=[2,b*x+c][3,1]第5章符号计算(1)MATLAB7.X程序设计22/44(6)反函数格式:finverse(f)对默认自变量的函数求反函数finverse(f,v)对自变量v的函数f(v)求反函数第5章符号计算(1)MATLAB7.X程序设计23/44例反函数symsxy;finverse(1/tan(x))ans=atan(1/x)f=x^2+y;finverse(f,y)ans=-x^2+ytg(x)=1/zx=argtg(1/z)第5章符号计算(1)MATLAB7.X程序设计24/44(7)复合函数composef=f(x)g=g(y)格式:compose(f,g)f(g(y))compose(f,g,z)f(g(z))compose(f,g,x,z)f(g(z))x是f的自变量compose(f,g,x,y,z)f(g(z))x是f的自变量y是g的自变量第5章符号计算(1)MATLAB7.X程序设计25/44例复合函数symsxyztf=1/(1+x^2);g=sin(y);h=x^t;compose(f,g)compose(f,g,t)compose(h,g,x,z)%h(g(z))x为自变量compose(h,g,t,z)%h(g(z))t为自变量第5章符号计算(1)MATLAB7.X程序设计26/44(8)表达式替换函数格式:subs(s,new)用符号或数值变量new替换s中的默认变量subs(s,old,new)用符号或数值变量new替换s中的符号变量old第5章符号计算(1)MATLAB7.X程序设计27/44例替换函数symsabsubs(a+b,a,4)subs(cos(a)+sin(b),[a,b],[sym('alpha'),2])f=sym('y-sin(x)');f1=subs(f,pi)f2=subs(f1,y,2)第5章符号计算(1)MATLAB7.X程序设计28/44求tex的反函数。f=sym('t*e^x')%原函数g=finverse(f)%对默认自由变量x求反函数g=finverse(f,'t')%对t求反函数求y=x2的反函数。symsx;f=x^2;g=finverse(f)fg=compose(g,f)%验算g(f(x))是否等于x第5章符号计算(1)MATLAB7.X程序设计29/44符号表达式与数值表达式之间的转换1.利用函数sym可以将数值表达式变换成它的符号表达式。2.函数numeric或eval可以将符号表达式变换成数值表达式。第5章符号计算(1)MATLAB7.X程序设计30/44sym(1.5)sym(3.14)phi='(1+sqrt(5))/2'eval(phi)第5章符号计算(1)MATLAB7.X程序设计31/445.4微积分1.符号极限格式:limit(f,x,a):limit(f):limit(f,a):limit(f,x,a,’left’):limit(f,x,a,’right’):0lim()xfxlim()xafxlim()xaflim()xafxlim()xafx第5章符号计算(1)MATLAB7.X程序设计32/44symxlimit(x^x,x,0,’right’)ans=1limit(sin(x)/x,x,0)ans=1limit(1/x,x,0,’left’)ans=-Inf%负无穷大0sinlimxxx01limxx例计算,,0limxxx第5章符号计算(1)MATLAB7.X程序设计33/44函数极值格式:fmin(‘fname’,x1,x2)fmin(‘fname’,x0)求在[0,5]内的最小值3()25fxxx第5章符号计算(1)MATLAB7.X程序设计34/442.微分格式:diff(f):求f对默认自变量的一次微分值diff(f,t):求f对自变量t的一次微分值diff(f,n):求f对默认自变量的n次微分值diff(f,t,n):求f对自变量t的n次微分值第5章符号计算(1)MATLAB7.X程序设计35/44例求f(x)=ax2+bx+c的微分f=sym(’a*x^2+b*x+c’);diff(f)%对x求一次微分diff(f,2)%对x求二次微分diff(f,a)%对a求一次微分diff(f,a,2)%对a求二次微分diff(diff(f),a)%对x和a偏导第5章符号计算(1)MATLAB7.X程序设计36/443.积分符号积分格式:int(f):求f对默认自变量的不定积分int(f,t):求f对t的不定积分int(f,a,b):求f对默认自变量的定积分,积分区间[a,b]int(f,t,a,b):求f对t的定积分,积分区间[a,b]第5章符号计算(1)MATLAB7.X程序设计37/44例求f(x)=ax2+bx+c的积分symsabcxf=sym('a*x^2+b*x+c');int(f)%f的不定积分,自变量是xint(f,0,2)%f在[0,2]的定积分,自变量是xint(f,a)%f的不定积分,自变量是aint(int(f,a),x)第5章符号计算(1)MATLAB7.X程序设计38/44数值积分[I,n]=quad(‘fname’,a,b,tol,trace)[I,n]=quad8(‘fname’,a,b,tol,trace)dblquad(fun,a,b,c,d,tol)triplequad(fun,a,b,c,d,e,f,tol)第5章符号计算(1)MATLAB7.X程序设计39/44例求定积分。g=inline('exp(-0.5*x).*sin(x+pi/6)');[S,n]=quad(g,0,3*pi)[S,n]=quad8(g,0,3*pi)30[sin()]6xexdx第5章符号计算(1)MATLAB7.X程序设计40/44例求二重积分。f=inline('exp(-x.^2/2).*sin(x.^2+y)','x','y');I=dblquad(f,-2,2,-1,1)212/2