当前位置:首页 > 建筑/环境 > 设计及方案 > 工程优化设计与MATLAB实现 第二讲2
2、MATLAB的符号运算——matlab不仅具有数值运算功能,还开发了在matlab环境下实现符号计算的工具包Symbolic、MathToolbox。符号计算是matlab数值运算的扩展,在运算过程中以符号表达式或符号矩阵为运算对象,对象是一个字符,数字也被当作字符来处理。符号运算的功能符号表达式、符号矩阵的创建符号线性代数因式分解、展开和简化符号代数方程求解符号微积分符号微分方程运算对象可以是没赋值的符号变量可以获得任意精度的解SymbolicMathToolbox——符号运算工具包通过调用Maple软件实现符号计算的。maple软件——主要功能是符号运算,它占据符号软件的主导地位。符号运算的特点1.符号运算的基本操作1.什么是符号运算•与数值运算的区别※数值运算中必须先对变量赋值,然后才能参与运算。※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。2.符号变量与符号表达式f='sin(x)+5x'f——符号变量名sin(x)+5x——符号表达式''——符号标识符号表达式一定要用''单引号括起来matlab才能识别。''的内容可以是符号表达式,也可以是符号方程。例:f1='ax^2+bx+c'——二次三项式f2='ax^2+bx+c=0'——方程f3='Dy+y^2=1'——微分方程※符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算用字符串直接创建矩阵模仿matlab数值矩阵的创建方法需保证同一列中各元素字符串有相同的长度。例:A=['[a,2*b]';'[3*a,0]']A=[a,2*b][3*a,0]3.符号矩阵的创建用函数sym创建矩阵(symbolic)命令格式:A=sym('[]')※符号矩阵内容同数值矩阵※需用sym指令定义※需用''标识例如:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方括号,这是与matlab数值矩阵的一个重要区别。符号矩阵的修改a.直接修改可用、键找到所要修改的矩阵,直接修改b.指令修改用A1=subs(A,'new','old')来修改例如:A=[a,2*b][3*a,0]A(2,2)='4*b'A=[a,2*b][3*a,4*b]A2=subs(A,'c','b')A2=[a,2*c][3*a,4*c]符号矩阵与数值矩阵的转换将数值矩阵转化为符号矩阵函数调用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]将符号矩阵转化为数值矩阵函数调用格式:numeric(A)A=[1/3,5/2][10/7,2/5]numeric(A)ans=0.33332.50001.42860.40001.符号矩阵运算数值运算中,所有矩阵运算操作指令都比较直观、简单。例如:a=b+c;a=a*b;A=2*a^2+3*a-5等。而符号运算就不同了,所有涉及符号运算的操作都有专用函数来进行。二、符号运算例1:f=2*x^2+3*x-5;g=x^2+x-7;symsxf=2*x^2+3*x-5;g=x^2+x-7;h=f+gh=3*x^2+4*x-12例2:f=cos(x);g=sin(2*x);symsxf=cos(x);g=sin(2*x);f/g+f*gans=cos(x)/sin(2*x)+cos(x)*sin(2*x)2.因式的分解、展开、化简factor函数的功能为:把多项式S分解为多个因式,各多项式的系数均为有理数。格式为:factor(s)expand函数的功能为:把多项式和初等函数的符号展开,也可以展开三角函数,指数和对数函数。格式为:expand(s)simple函数的功能为:搜索符号表达式的最简形式。格式为:simple(s)例3:symsax;f1=x^5*x^3+5*x^2+5*x-6;factor(f1)ans=(x-1)*(x-2)*(x-3)*(x+1)例4:symsxfactor(x^9-1)ans=(x-1)*(x^2+x+1)*(x^6+x^3+1)例5:symsxy;expand(cos(x+y))ans=cos(x)*cos(y)-sin(x)*sin(y)例6:f=sym('cos(x)^2+sqrt(x^2+2*x+1)+sin(x)^2');F=simple(f);F=simple(F)2.符号极限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。例7求下列极限极限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)diff(f)—对缺省变量求微分diff(f,v)—对指定变量v求微分diff(f,v,n)—对指定变量v求n阶微分int(f)—对f表达式的缺省变量求不定积分int(f,v)—对f表达式的v变量求不定积分int(f,v,a,b)—对f表达式的v变量在(a,b)区间求定积分3.符号微积分与积分变换mtaylor(f,n)——泰勒级数展开ztrans(f)——Z变换Invztrans(f)——反Z变换Laplace(f)——拉氏变换Invlaplace(f)——反拉氏变换fourier(f)——付氏变换Invfourier(f)——反付氏变换例9:求导数symsx%定义符号变量diff(sin(x^2))%求导运算ans=2*cos(x^2)*xdxxd2sin例10.计算二重不定积分symsxyF=int(int(x*exp(-x*y),x),y)F=1/y*exp(-x*y)例11.求级数的和键入:1/12+1/22+1/32+1/42+……symsksymsum(1/k^2,1,Inf)%k值为1到无穷大ans=1/6*pi^2其结果为:1/12+1/22+1/32+1/42+……=π2/6symsatx;f=[a,t^3;t*cos(x),log(x)];df=diff(f)dfdt2=diff(f,t,2)dfdxdt=diff(diff(f,x),t)df=[0,0][-t*sin(x),1/x]dfdt2=[0,6*t][0,0]dfdxdt=[0,0][-sin(x),0]例12.计算微分4.符号代数方程求解matlab符号运算能够解一般的线性方程、非线性方程及一般的代数方程、代数方程组。当方程组不存在符号解时,又无其他自由参数,则给出数值解。命令格式:solve(f)——求一个方程的解Solve(f1,f2,…fn)——求n个方程的解例13.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一般格式例14.解方程组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=x:[1x1sym]y:[1x1sym]z:[1x1sym][x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')disp(f.x),disp(f.y),,disp(f.z)x=2/3y=-1/2z=5/65.符号微分方程求解——用一个函数可以方便地得到微分方程的符号解符号微分方程求解指令:dsolve命令格式:dsolve(f,g)f——微分方程,可多至12个微分方程的求解;g为初始条件默认自变量为'x',可任意指定自变量't','u'等微分方程的各阶导数项以大写字母D表示例15.y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')ans=exp(-x)*cos(x)+exp(-x)*sin(x)ezplot(y)——方程解y(t)的时间曲线图22dxyd+2dydx02y00)(dxdy,1)0(y求该方程的解-6-4-2024050100150200250texp(-t)sin(t)+exp(-t)cos(t)
本文标题:工程优化设计与MATLAB实现 第二讲2
链接地址:https://www.777doc.com/doc-147509 .html