您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第3章MATLAB符号计算
第3章MATLAB符号计算3.1多项式运算3.2极限、微积分3.3符号方程求解3.4MATLAB数据分析syms函数函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:syms变量名1变量名2…变量名n用这种格式定义符号变量时不要在变量名上加字符串分界符(‘),变量间用空格而不要用逗号分隔。例如:symsxbaca*x^2+b*x+cans=a*x^2+b*x+cpoly2sym(p)可将矩阵p转换为多项式例如:p=[1-4302]poly2sym(p)p=1-4302ans=x^4-4*x^3+3*x^2+2符号表达式的因式分解与展开MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:factor(s):对符号表达式s分解因式。expand(s):对符号表达式s进行展开。collect(s):对符号表达式s合并同类项。collect(s,v):对符号表达式s按变量v合并同类项。s=x^4-y^4factor(s)ans=(x-y)*(x+y)*(x^2+y^2)s=(a+b)^5expand(s)ans=a^5+5*a^4*b+10*a^3*b^2+10*a^2*b^3+5*a*b^4+b^5s=x+x^2+2*x+9+10*x+2;collect(s)ans=13*x+x^2+114.符号表达式的化简MATLAB提供的对符号表达式化简的函数有:simplify(s):应用函数规则对s进行化简。simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。例:s=(x+y)*(x-y);simplify(s)ans=x^2-y^26.5多项式计算6.5.1多项式的四则运算1.多项式的加减运算2.多项式乘法运算函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量。例求多项式x4+8x3-10与多项式2x2-x+3的乘积。f=x^4+8*x^3-10g=2*x^2-x+3conv(f,g)???Function'filter'isnotdefinedforvaluesofclass'sym'.f=[1800-10]g=[2-13]conv(f,g)ans=215-524-2010-30poly2sym(ans)ans=2*x^6+15*x^5-5*x^4+24*x^3-20*x^2+10*x-303.多项式除法函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式r返回P1除以P2的余式。这里,Q和r仍是多项式系数向量。deconv是conv的逆函数,即有P1=conv(P2,Q)+r。例:deconv(f,g)ans=0.50004.25001.3750例求多项式x4+8x3-10除以多项式2x2-x+3的结果。6.5.2多项式的导函数对多项式求导数的函数是:p=polyder(P):求多项式P的导函数p=polyder(P,Q):求P·Q的导函数[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。例6-18求有理分式的导数。命令如下:p=[1:3]p=123poly2sym(p)ans=x^2+2*x+3polyder(p)ans=221.代数多项式求值polyval函数用来求代数多项式的值,其调用格式为:Y=polyval(P,x)若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。例已知多项式x^4+8*x^3-10,分别取x=1和一个2×3矩阵为自变量计算该多项式的值。p=[1800-10]polyval(p,1)ans=2使用subs(f,c)计算f在x=c时的值f=4*x^4+8*x^3-10subs(f,1)ans=22.矩阵多项式求值polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式x^3-5*x^2+8,那么polyvalm(P,A)的含义是:A*A*A-5*A*A+8*eye(size(A))而polyval(P,A)的含义是A.*A.*A-5*A.*A+8*ones(size(A))例已知多项式x^4+8*x^3-10p=[4800-10]polyvalm(p,[12;01])ans=28002polyval(p,[12;01])ans=2118-102符号方程求解符号代数方程求解在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:solve(s):求解符号表达式s的代数方程,求解变量为默认变量。solve(s,v):求解符号表达式s的代数方程,求解变量为v。solve(s1,s2,…,sn,v1,v2,…,vn):求解符号表达式s1,s2,…,sn组成的代数方程组,求解变量分别v1,v2,…,vn。例1.f=ax2+bx+c求解f='a*x^2+b*x+c';solve(f)%对缺省变量x求解ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]计算机格式aacbb242一般格式symsabcxf=a*x^2+b*x+cf=a*x^2+b*x+csolve(f)ans=1/2/a*(-b+(b^2-4*a*c)^(1/2))1/2/a*(-b-(b^2-4*a*c)^(1/2)解方程x2-6x-12=0symsxsolve('x^2-6*x-12')solve('x^2-6*x-12=0')solve('x^2-6*x=12')ans=3+21^(1/2)3-21^(1/2)ans(1)ans(2)解方程log10(x)-log10(x-3)=1symsxsolve('log10(x)-log10(x-3)=1')ans=10/3例3.解方程组x+y+z=1x-y+z=22x-y-z=1g1='x+y+z=1',g2='x-y+z=2',g3='2*x-y-z=1'f=solve(g1,g2,g3)f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')f=z=5/6,y=-1/2,x=2/3solve(f1,f2,f3)ans=x:[1x1sym]y:[1x1sym]z:[1x1sym]q=solve(f1,f2,f3)q=x:[1x1sym]y:[1x1sym]z:[1x1sym]Q.xQ.yQ.z只是solve的解有多个分量时不直接显示出来.调用pretty(f)函数,让f的显示形式更接近数学习惯表达方式p=[1593578553314]f=poly2sym(p)f=x^7+59*x^6+3*x^5+5*x^4+78*x^3+55*x^2+33*x+14pretty(f)765432x+59x+3x+5x+78x+55x+33x+149.2符号微积分9.2.1符号极限limit函数的调用格式为:(1)limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。(2)limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。(3)limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。(4)limit(f,x,a,'right'):求符号函数f的极限值。'right'表示变量x从右边趋近于a。(5)limit(f,x,a,‘left’):求符号函数f的极限值。‘left’表示变量x从左边趋近于a。例求下列极限。极限1:symsamx;f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);limit(f,x,a)ans=(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a极限2:symsxt;limit((1+2*t/x)^(3*x),x,inf)ans=exp(6*t)极限3:symsx;f=x*(sqrt(x^2+1)-x);limit(f,x,inf,'left')ans=1/2极限4:symsx;f=(sqrt(x)-sqrt(2)-sqrt(x-2))/sqrt(x*x-4);limit(f,x,2,'right')ans=-1/2判断x3时,(x-3)/|x-3|的极限值是否存在symsxf=(x-3)/abs(x-3);a=limit(f,x,3,'left')a=-1a=limit(f,x,3,'right')a=1所以,该函数极限值不存在Limit函数可以获得函数的渐近线已知y=1/(x(x-)),则x=0和x=1处存在渐近线。limit(f,x,0)ans=NaNlimit(f,x,0,'left')ans=Inflimit(f,x,0,'right')ans=-Inf1)找出函数突然快速变化的点symsxg=x*(x-1);s=solve(g)s=01f=1/g;ezplot(f)holdonplot(double(s(1))*[11],[-12],'--')plot(double(s(2))*[11],[-12],'--')holdoff找出x/(x^3-3x)的渐近线,并绘制图像symsxg=x^3-3*x;s=solve(g)f=x/g;ezplot(f)holdonplot(double(s(1))*[11],[-55],'--')plot(double(s(2))*[11],[-55],'--')plot(double(s(3))*[11],[-55],'--')holdoff8.2数值微分8.2.1导数计算在MATLAB中,提供求数值导数的函数diff,其调用格式为:DX=diff(X):计算X的1阶导数。DX=diff(X,n):计算X的n阶导数。例计算x^2的导数symsxdiff(x^2)ans=2*x计算te-3t的导数symstdiff(t*exp(-3*t))ans=ep(-3*t)-3*t*exp(-3*t)isequal检查两个数是否相等,如果相等返回1,否则返回0isequal(2,3)ans=0isequal(2,2)ans=1y(t)=3sint+7cos5t是y”+y=-5cos2t的解吗symsty=3*sin(t)+7*cos(5*t);f=-5*cos(2*t);a=diff(y,2)+y;isequal(a,f)ans=0a=diff(y,2)+y函数f(x)=x^3-3x^2+3x在[0,2]内的最值symsxf=x^3-3*x^2+3*xezplot(f,[02])g=diff(f)s=solve(g)subs(f,0),subs(f,1),subs(f,2)ans=a
本文标题:第3章MATLAB符号计算
链接地址:https://www.777doc.com/doc-3264376 .html