第二讲符号运算——matlab不仅具有数值运算功能,还开发了在matlab环境下实现符号计算的工具包SymbolicMathToolbox一、符号运算入门02512xx:求解一元二次方程例在matlab中利用命令solve(‘a*x^2+b*x+c=0’)可以计算出一元二次方程的解析解。ans=1/2/a*(-b+(b^2-4*a*c)^(1/2))1/2/a*(-b-(b^2-4*a*c)^(1/2))对于例1,可运行如下语句:solve('x^2+5*x+2=0')即可得到方程的根:ans=-5/2+1/2*17^(1/2)-5/2-1/2*17^(1/2))(cos22xdxd:求导数例可以利用matlab求导数的命令diff来解决这个问题symsxdiff((cos(x))^2)得到结果:ans=-2*cos(x)*sin(x)badxx23:计算定积分例可以运行以下两条matlab语句来求得此积分:symsxabint(x^2,a,b)得到结果:ans=1/3*b^3-1/3*a^3aydtdy:求解一阶微分方程例4可以运行以下matlab语句来求解这个微分方程:symsaydsolve(‘Dy=a*y’)得到结果:ans=C1*exp(a*t)从上面的例子可以看出,matlab符号运算的主要对象是没有赋值的变量,得到的结果也是文字符号。符号运算是数学理论中的主要运算方式。与数值运算的区别※数值运算中必须先对变量赋值,然后才能参与运算。※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。二、符号对象的创建1、创建符号常量符号常量是不含变量的符号表达式,用sym命令来创建符号常量。语法:sym(‘常量’)例:a=sym(‘sin(2)’)a=sin(2)2、创建符号变量和表达式(1)使用sym命令创建符号变量和表达式;语法:创建符号变量:sym(‘arg’,’参数’)创建符号表达式:sym(‘表达式’)说明:参数用来设置限定符号变量的数学特性,可以选择为:’positive’,’real’,’unreal’表示:正,实和非实。不限定可以省略。2、创建符号变量和表达式例:x=sym(‘x’,’real’)y=sym(‘y’,’real’)z=x+i*yreal(z)x=sym(‘x’,’unreal’)real(z)比较一下两个real(z)命令的结果有什么不同?为什么呢?2、创建符号变量和表达式例:f1=sym(‘a*x^2+b*x+c’)f1=a*x^2+b*x+c上面的语句只创建了f1的符号表达式,没有创建符号变量。也可以用sym命令定义符号变量后,利用符号变量的计算来生成符号表达式。(怎么在matlab中实现?)2、创建符号变量和表达式(2)使用syms命令创建符号变量和符号表达式:语法:syms(‘arg1’,’arg2’,…,参数)也可以简写为:symsarg1arg2…参数说明:参数设置与sym命令相同。该命令可以一次创建多个符号变量2、创建符号变量和表达式例:symsabcxf2=a*x^2+b*x+csyms(‘a’,’b’,’c’,’x’)f3=a*x^2+b*x+c上面的语句即创建了符号变量a,b,c,x,又创建了符号表达式,f1,f2,f3符号表达式相同。注:符号表达式中自由变量的确定(1)小写字母i和j不能作为自由变量(2)首先选择x作为自由变量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。(3)大写字母比所有的小写字母都靠后。3、符号矩阵用sym和syms命令都可以创建符号矩阵:例:A=sym(‘[a,b;c,d]’)和symsabcdA=[a,b;c,d]都可以得到下面的结果A=[a,b][c,d]4、符号表达式的转化与化简1、expand函数将符号表达式展开成多项式形式:2、factor函数将符号表达式写成因式分解的形式;例:f1=sym(‘x*(x*(x-6)+11)-6’)f2=expand(f1)f3=factor(f2)3、simple函数可以寻求包含最少数目字符的表示式简化形式:例:y=sym(‘cos(x)^2-sin(x)^2’)simple(y)转化与化简命令中,比较常用的还有horner,collect,simplify等三个命令。请通过matlab帮助或网络查询它们的用法!5、符号表达式的替换利用subs函数可用来进行符号表达式中符号变量的替换。语法:subs(s)%用给定的值替换符号表达式s中的所有变量。subs(s,new)%用new替换符号表达式s中的自由变量。subs(s,old,new)%用new替换符号表达式s中的old变量。例:f=sym(‘(x+y)^2+3*(x+y)+5’)x=5f1=subs(f)f2=subs(f,3)f3=subs(f,’x+y’,’s’)f4=subs(f,’x’,’z’)四、符号极限、微积分和级数求和1、符号极限表达式:函数格式limit(f)limit(f,’x’,a)limit(f,’x’,a,’left’)limit(f,’x’,a,’right’))(limxfax)(lim0xfx)(limxfax)(limxfax2、符号导数函数diff(f)用来求符号表达式的导数语法:diff(f)求f对自由变量的一阶导数diff(f,’t’)求f对变量t的一阶导数diff(f,n)求f对自由变量的n阶导数diff(f,’t’,n)求f对变量t的n阶导数2、符号导数函数diff也可以用于符号矩阵,其结果是矩阵的每一个元素进行求导运算。例:求导数对符号矩阵xexttx)sin(*22symstxg=sym(‘[2*tt^2;tsin(x)exp(x)]’)diff(f)diff(f,’t’)3、符号积分函数int可以求符号表达式的积分语法:int(f,’t’)求符号变量t的不定积分int(f,’t’,a,b)求符号变量t的在[a,b]区间的定积分,a,b是具体的数值int(f,’t’,’m’,’n’)求符号变量t的在[m,n]区间的定积分,m,n是符号3、符号积分和微分一样,int对符号矩阵的积分也是将各个元素逐个进行积分。例:symstxg=sym(‘[2*tt^2;tsin(x)exp(x)]’)int(g)int(g,’t’)int(g,’a’,’b’)4、符号级数(1)symsum函数语法:symsum(s,’x’,a,b)说明:x为自变量,x省略则对默认的自由变量求和;s为符号表达式;[a,b]为参数x的取值范围。4、符号级数symsxks1=symsum(1/k^2,1,10)s2=symsum(1/k^2,1,inf)s3=symsum(x^k,’k’,1,inf)的和和求级数kxxxk222211312114、符号级数(2)taylor函数语法:taylor(F,’x’,n)说明:x为自变量,F为符号表达式,n为展开的项数,默认为5项例:symsxs1=taylor(exp(x),8)s2=taylor(exp(x))六、符号方程的求解1、代数方程语法:solve(‘eq’,’v’)求解方程关于变量v的解。solve(‘eq1’,’eq2’,…’v1’,’v2’,..)求解方程组关于变量v1,v2,…的解1、代数方程例:f1=sym(‘a*x^2+b*x+c’)solve(f1)solve(f1,’a’)f2=sym(‘sin(x)’)solve(f2)当方程有多个解时,只能得出0附近的有限几个解例:求解方程lnx+x=2。SymxSolve(‘log(x)+x=2’,x)看看结果,分析原因!1、代数方程例:eq1=sym(‘x^2+2*x+1’)eq2=sym(‘x+3*z=4’)eq3=sym(‘y*z=-1’)[x,y,z]=solve(eq1,eq2,eq3)S=solve(eq1,eq2,eq3)看看最后一句的结果?2、符号常微分方程语法:dsolve(‘eq’,’con’,’v’)说明:’eq’为微分方程,’con’为微分初始条件,可省略;’v’为指定自由变量,省略时则默认为x或t;dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v2…’)说明:求解微分方程组,变量意义与上一样。y的一阶导数表示为Dy;y的n阶导数表示为Dny2、符号常微分方程例:y=dsolve(‘x*D2y-3*Dy=x^2’,’x’)y=dsolve(‘x*D2y-3*Dy=x^2’,’y(1)=0,y(5)=0’,’x’)[x,y]=dsolve(‘Dx=y,Dy=-x’)matlab符号计算实验:,...2,1,0,sin)(1,...2,1,0,cos)(1)sincos(2)()(210ndxlxnxflbndxlxnxflalxnblxnaaxfxflTllnllnnnn其中:式为:则它的傅里叶级数展开满足收敛定理条件,的周期函数定理:设周期为请编制一个程序,把一个周期为2l的函数展开成傅里叶级数。给出下面函数的展开结果0,10,1)(xxxf作业:函数幂级数展开的结果。点在点及在给出展开成幂级数。阶导数的函数内具有在试编制一个程序把一个12)(0)sin()()()(),()(!2)(...)(!2)(''))((')()(040000)(200000xxxxfxxxfxfnxUxRxxxfxxxfxxxfxfxfnnn