您好,欢迎访问三七文档
第四章MATLAB的符号计算目标•掌握符号表达式的建立,代数运算,操作和转换•掌握符号极限、微积分和级数求和•掌握符号积分变换•掌握符号方程的求解什么是符号运算•符号计算:解数学表达式、方程时,不是在离散化的数值点上进行的,而是凭借一系列恒等式和数学定理,通过推理和演绎,获得解析结果。•MATLAB具有符号数学工具箱(SymbolicMathToolbox)。•符号计算是可以对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。符号运算与数值运算的区别•符号运算与数值运算的区别:•※数值运算中必须先对变量赋值,然后才能参与运算。•※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。符号运算的功能符号线性代数(linearalgebra)因式分解、展开和简化(simplificationandsubstitution)符号代数方程求解(solvingequations)符号微积分(Calculus)符号微分方程•符号数字:符号运算中需要参与计算的数字完全正确,为了区别于数字的一般有限字长记录,从而引进符号数字sym(‘数字’)%创建符号数字•sym(数字,参数)%按某种格式转换为符号数字•说明:参数可以选择为’d’、’f’、’e’或’r’四种格式,也可省略。•EX:a=sym('sin(2)')•a=sym(sin(2),'r')•‘r’广义有理表达‘d’“十进制浮点”近似表达•‘e’带eps误差的理性近似表达‘f’十六进制浮点近似表达创建符号数字•1.使用sym命令创建符号变量和表达式•sym(‘变量/表达式’)%把变量/表达式定义为符号对象•2.使用syms命令创建符号变量•syms(‘arg1’,‘arg2’,…,‘argn’)•symsarg1arg2…arg2n创建符号变量和表达式创建符号变量和表达式•例如:•f1=sym('a*x^2+b*x+c')%创建表达式•symsabcx%创建变量•f2=a*x^2+b*x+c%创建表达式•syms('a','b','c','x')•f3=a*x^2+b*x+c创建符号矩阵•例如,使用sym命令创建的符号矩阵:•A=sym('[a,b;c,d]')•例如,使用syms命令创建相同的符号矩阵:•symsabcd•A=[ab;cd]•比较符号矩阵与字符串矩阵:•B=‘[a,b;c,d]’%创建字符串矩阵•C=sym(‘[a,b;c,d]’)%创建符号矩阵符号表达式的代数运算•由于MATLAB采用了重载技术,使得符号表达式的运算符和基本函数都与数值计算中的几乎完全相同。•例如:•A+2•A.’•det(A)•A.^2例如:f=sym('2*x^2+3*x+4')g=sym('5*x+6')f+gf*g•(1)算术运算符•运算符“+”,“-”,“*”,“\”,“/”,“^”分别实现符号矩阵的加、减、乘、左除、右除、求幂运算。•运算符“.*”,“./”,“.\”,“.^”分别实现符号数组的乘、除、求幂,即数组间元素与元素的运算。•运算符“′”,“.′”分别实现符号矩阵的共轭转置、非共轭转置。•(2)关系运算符•运算符“==”、“~=”分别对运算符两边的符号对象进行“相等”、“不等”的比较。符号运算中的运算符•2.函数运算符(1)三角函数和双曲函数及反函数(除atan2外)(2)指数和对数函数(如exp,expm)(3)复数函数(没有幅角函数angle)(4)矩阵分解函数(如eig,svd)(5)方程求解函数solve(6)微积分函数(如diff,int)(7)积分函数和反变换函数(如laplace,ilaplace)(8)绘图函数(如ezplot,ezsurf)符号运算中的运算符符号数值任意精度控制和运算•在SymbolicMathToolbox中有三种不同的算术运算:•数值型:MATLAB的浮点运算。•有理数型:Maple的精确符号运算。•VPA型:Maple的任意精度运算。•任意精度的VPA型运算可以使用digits和vpa命令来实现。•digits(n)%设定默认的精度•S=vpa(s,n)%将s表示为n位有效位数的符号对象符号数值任意精度控制和运算[例]digits,vpa指令的使用digitsp0=sym('(1+sqrt(5))/2');p1=sym((1+sqrt(5))/2);e01=vpa(abs(p0-p1))Digits=32p0=(1+sqrt(5))/2p1=7286977268806824*2^(-52)e01=5.432115265842679*10^(-17)符号对象与数值对象的转换•将数值矩阵转化为符号矩阵•函数调用格式:sym(A)•EX:A=[1/3,2.5;1/0.7,2/5]•sym(A)•将符号矩阵转化为数值矩阵函数调用格式:double(A)•EX:a=sym('2/3')•b=double(a)符号表达式中自由变量的确定符号表达式“f=ax2+bx+c”中只有一个变量是独立变量:小写字母i和j不能作为自由变量。符号表达式中如果有多个符号变量,则按照以下顺序选择自由变量:首先选择x作为自由变量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。大写字母比所有的小写字母都靠后。自动识别变量时,字母的优先顺序:x,y,w,z,v•也可以用findsym函数来自动确定。自由变量的确定原则(TheDefaultSymbolicVariables)符号表达式的操作•同一个多项式的符号表达式可以表示成三种形式:•多项式形式的表达方式:f(x)=x3+6x2+11x-6•因式形式表达方式:f(x)=(x-1)(x-2)(x-3)•嵌套形式的表达方式:f(x)=x(x(x-6)+11)-6•pretty:给出排版形式的输出结果。•collect:将表达式写成多项式形式,并可对指定的符号对象的同幂项系数进行合并。32x-6x+11x-6x^3-6*x^2+11*x-6•horner:将多项式形式写成嵌套形式•factor:将表达式写成因式形式•expand:将表达式按多项式、三角函数、指数对数形式展开•simplify:对表达式进行化简•例如:k=sym('cos(x)^2-sin(x)^2')•simplify(k)•simple:寻求表达式的多种简化形式,使之包含最少数目的字符-6+(11+(6+x)*x)*x2*cos(x)^2-1(x-1)*(x-2)*(x-3)符号表达式的操作•subs函数:对符号表达式中符号变量的替换。•subs(s)%用给定值替换符号表达式s中的所有变量•subs(s,new)%用new替换符号表达式s中的自由变量•subs(s,old,new)%用new替换符号表达式s中的old变量•例:•f=sym('x^3-6*x^2+11*x-6')•x=5•subs(f)•subs(f,6)•subs(f,'x',5)•可以用来计算多项式的值,以及化简。符号表达式的替换求反函数和复合函数•1.求反函数•对于函数f(x),存在另一个函数g(x)使得g(f(x))=x成立,则函数g(x)称为函数f(x)的反函数。•g=finverse(f,v)•%对指定自变量v的函数f(v)求反函数•2.求复合函数•运用函数compose可以求符号函数f(x)和g(y)的复合函数。•compose(f,g,z)%求f(x)和g(y)的复合函数f(g(z))符号表达式的转换•1.符号表达式与多项式的转换•构成多项式的符号表达式f(x)可以与多项式系数构成的行向量进行相互转换,MATLAB提供了函数sym2poly和poly2sym实现相互转换。•2.提取分子和分母•如果符号表达式是一个有理分式(两个多项式之比),可以利用numden函数来提取分子或分母,还可以进行通分。•[n,d]=numden(f)%n是分子,m是分母•EX:提取分子和分母系数。•f=sym('(1+2*s)/(s^2+2*s+1)')•pretty(f)•[n,d]=numden(f)•n1=sym2poly(n)•d1=sym2poly(d)符号表达式的转换•[例]分别求1/x在0处从两边趋近、从左边趋近和从右边趋近的三个极限值。•f=sym('1/x')•limit(f)%对x求趋近于0的极限•limit(f,x,0)%对x求趋近于0的极限•limit(f,x,0,'left')%左趋近于0•limit(f,x,0,'right')%右趋近于0•[例]求symsxkLim_f=limit((1-1/x)^(k*x),x,inf)符号极限kxxx)11(lim符号微分•函数diff是用来求符号表达式的微分。•diff(f)%求f对自由变量的一阶微分•diff(f,t)%求f对符号变量t的一阶微分•diff(f,n)%求f对自由变量的n阶微分•diff(f,t,n)%求f对符号变量t的n阶微分符号微分[例]求、和symsatx;f=[a,t^3;t*cos(x),log(x)];df=diff(f)dfdt2=diff(f,t,2)dfdxdt=diff(diff(f,x),t)xxttadxdlncos3xxttadtdlncos322xxttadxdtdlncos32、符号积分•积分有定积分和不定积分,运用函数int可以求得符号表达式的积分,即找出一个符号表达式F使得diff(F)=f,也可以说是求微分的逆运算。•int(f,t)%求符号变量t的不定积分•int(f,t,a,b)%求符号变量t的定积分符号积分[例]求不定积分symsxf=sqrt((1+x)/x)/xs=int(f,x)s=simple(simple(s))[例]求定积分symsxyzF2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2)VF2=vpa(F2)2122222)(xxyxxydzdydxzyxdxxxx11符号级数•1.symsum函数(SymbolicSummation)•symsum(s,x,a,b)%计算表达式s的级数和•说明:x为自变量,x省略则默认为对自由变量求和;s为符号表达式;[a,b]为参数x的取值范围。•2.taylor函数(TaylorSeries)•taylor(F,x,n)%求泰勒级数展开•说明:x为自变量,F为符号表达式;对F进行泰勒级数展开至n项,参数n省略则默认展开前n-1项。符号级数[例]求,symskt;f1=[tk^3];f2=[1/(2*k-1)^2,(-1)^k/k]s1=simple(symsum(f1))s2=simple(symsum(f2,1,inf))[例]求f(x)=xex在x=0处展开8阶taylor级数symsxR=taylor(x*exp(x),9,x,0)103ttkt12)1()12(1kkkk•1.fourier变换•F=fourier(f,t,w)%求时域函数f(t)的fourier变换F•说明:返回结果F是符号变量w的函数,f为t的函数。•2.fourier反变换•f=ifourier(F,w,t)•说明:ifourier函数的用法与fourier函数相同。•symstw•F=fourier(1/t,t,w)%fourier变换•F=i*pi*(Heaviside(-w)-Heaviside(w))傅里叶变换及其反变换拉普拉斯变换及其反变换•1.Laplace变换•F=laplace(f,t,s)%求时域函数f的Laplace变换
本文标题:第4章 符号运算
链接地址:https://www.777doc.com/doc-3232548 .html