《MATLAB符号运算与微积分实验.ppt》由会员分享,可在线阅读,更多相关《MATLAB符号运算与微积分实验.ppt(124页珍藏版)》请在三一办公上搜索。
1、数学实验,Mathematical Experiments,第5章 MATLAB符号运算 与微积分实验,华 锐 学 院 数 计 系 张 加 勇办公室:2号楼312 办公电话:6391028,Matlab本身并没有符号计算功能,MathWorks公司于1993年购买了著名的符号数学软件Maple的使用权,并利用Maple已有的函数库,开发了符号数学工具箱(Symbolic Math Toolbox)。当进行MATLAB运算时,系统请求Maple软件去计算并将结果返回给MATLAB。,Matlab符号数学工具箱使用字符串来进行符号分析与运算,其主要功能包括:符号表达式的创建、符号矩阵的运算、符号表
2、达式的化简、符号微积分、符号方程(主要指代数方程与常微分方程)的求解、符号函数绘图等。,符号计算是精确计算,可以获得任意精度的解;,符号运算的特点:,运算对象可以是没赋值的符号变量。符号计算定义在符号变量的基础上,符号表达式计算前必须定义符号变量;,符号计算的计算速度较慢;,符号计算的运算符和基本数学函数与数值计算中的运算符和基本数学函数几乎完全相同。,符号运算与数值运算的区别:,数值运算中必须先对变量赋值,然后才能参与运算。,符号运算无须事先对独立变量赋值,运算结果以标准的 符号形式表达。,第5章 MATLAB符号运算 与微积分实验,5.1.符号对象的创建,5.2.符号表达式运算,5.3.符
3、号微积分,5.4.符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,5.1、符号对象的创建,(一)创建符号变量和符号表达式,sym函数,参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。符号变量要先定义,后引用。Matlab提供了两个建立符号变量的函数:sym和syms,两个函数的用法不同。,sym函数的主要功能是创建单个符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:S=sym(s,参数)%由数值创建符号对象S=sym(s,参数)%由字符串创建符号对象,当被转换的s是数值时,参数可以是d、f、e或r,当被转换的
4、s是字符串时,参数可以是real、unreal和positive,其含义如下:,syms函数,函数sym一次只能定义一个符号变量,使用不方便。Matlab 提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:,syms 符号变量名1 符号变量名2 符号变量名n,用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。,建立符号表达式的方法,使用已定义的符号变量组成;syms,用sym函数和引号建立。,如:syms a b c x f1=ax2+bx+c 二次三项式 f2=ax2+bx+c=0 方程,符号表达式或符号方程可以赋给符号变
5、量,以后调用方便;也可以不赋给符号变量直接参与运算,a=sym(a);b=sym(b);c=sym(c);d=sym(d);%定义4个符号变量w=10;x=5;y=-8;z=11;%定义4个数值变量A=a,b;c,d%建立符号矩阵AB=w,x;y,z%建立数值矩阵Bdet(A)%计算符号矩阵A的行列式det(B)%计算数值矩阵B的行列式,使用符号变(常)量进行代数运算和数值变(常)量进行的运算是不同的。,例1 考察符号变量和数值变量的差别。,eg:diff(f1),diff(a*x2+b*x+c),例2 分别使用sym和syms函数创建符号表达式。syms a b c x f1=a*x2+b*
6、x+cf1=a*x2+b*x+c f2=sym(y2+y+1)%创建符号表达式f2=y2+y+1 f3=sym(sin(z)2+cos(z)2=1)%创建符号方程f3=sin(z)2+cos(z)2=1,符号表达式中变量的确定,Matlab 中的符号可以表示符号变量和符号常数。findsym可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式为:findsym(S,n),函数返回符号表达式S中的n个符号变量,若没有指定n,则返回 S 中的全部符号变量。,在求函数的极限、导数和积分时,如果用户没有明确指定自变量,Matlab将按缺省原则确定自变量并对其进行相应微积分运算。可用findsy
7、m(S,1)查找系统的缺省变量。,事实上,Matlab 按离字符x最近原则确定缺省变量若表达式中有两个符号变量与 x 的距离相等,则ASCII 码大者优先(字母表靠后的优先)。,常量 pi,i,j 不作为符号变量,例3 查询符号函数 f=xn g=sin(at+b)中的系统缺省变量。,表示函数 f 中查询的 1 个系统缺省变量为 x。,syms a b n t x%定义符号变量f=xn;%给定符号函数g=sin(a*t+b);findsym(f,1)%在f函数中查询1个系统缺省变量ans=x,(二)符号矩阵的创建,符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。
8、但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。,用字符串直接创建符号矩阵,例4 A=a,2*b;3*a,0 A=a,2*b3*a,0,模仿matlab数值矩阵的创建方法;每一行都要用方括号括起来;需保证同一列中各行元素字符串有相同的长度(较短的字符串要用空格补齐长度)。,用sym函数创建符号矩阵,命令格式:A=sym(),符号矩阵内容同数值矩阵:矩阵元素可以是任何不带等号的符号表达式,各矩阵元素之间用逗号或空格分隔,各行之间用分号分隔,各元素字符串的长度可以不相等;需用sym函数定义;需用 标识。,例5 A=sym(a,2*b;3*a,0)A=a,2*b3*a,0,注意:符号
9、矩阵的每一行的两端都有方括号,这是与 Matlab数值矩阵的一个重要区别。,将数值矩阵转化为符号矩阵,A=1/3,2.5;1/0.7,2/5A=0.3333 2.5000 1.4286 0.4000 sym(A)ans=1/3,5/210/7,2/5,函数调用格式:sym(A),例4,A=sym(1/3,5/2;10/7,2/5)B=eval(A),将符号矩阵转化为数值矩阵,函数调用格式:eval(A),A=1/3,5/210/7,2/5B=0.3333 2.5000 1.4286 0.4000,例5,subs(f,x,a)用 a 替换字符函数 f 中的字符变量 x a 可以是 数/数值变量/
10、表达式 或 字符变量/表达式,若 x 是一个由多个字符变量组成的数组或矩阵,则 a 应该具有与 x 相同的形状的数组或矩阵。,用给定的数据替换符号表达式中的指定的符号变量,符号表达式的替换,subs 举例,f=sym(2*u);subs(f,u,2)f2=subs(f,u,u+2)a=3;subs(f2,u,a+2)subs(f2,u,a+2)syms x y f3=subs(f,u,x+y)subs(f3,x,y,1,2),ans=4,f2=2*(u+2),ans=14,ans=2*(a+2)+2),f3=2*x+2*y,ans=6,例6:指出下面各条语句的输出结果,f=2*u,第5章 MA
11、TLAB符号运算 与微积分实验,5.1.符号对象的创建,5.2.符号表达式运算,5.3.符号微积分,5.4.符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,1.算术运算(1)“”,“”,“*”,“”,“/”,“”(2)“.*”,“./”,“.”,“.”(3)“”,“.”2.关系运算只有运算符“=”、“=”分别对符号对象进行“相等”、“不等”的比较。3.三角函数、双曲函数和相应的反函数三角函数包括sin、cos和tan,双曲函数包括sinh、cosh和tanh,5.2、符号表达式运算,(一)符号表达式的基本运算,4.指数和对数函数5.复数函数复数的共轭conj、求实部re
12、al、求虚部imag和求模abs函数与数值计算中的使用方法相同。没有提供求相角的命令。6.矩阵代数命令符号运算中的矩阵代数命令有diag,inv,det,rank,poly,expm和eig等,它们的用法几乎与数值计算中的情况完全一样,练习,例7 符号表达式的四则运算示例。,syms x y;f1=2*x+x2*x-5*x+x3%符号表达式的结果为最简形式f2=2*x/(5*x)%符号表达式的结果为最简形式f3=(x+y)*(x-y)%符号表达式的结果不是x2-y2,%而是(x+y)*(x-y),f1=-3*x+2*x3 f2=2/5 f3=(x+y)*(x-y),syms xf=2*x2+3
13、*x-5;g=x2+x-7;h=f+g,syms xf=cos(x);g=sin(2*x);f/g+f*g,(1)f=2*x2+3*x-5;g=x2+x-7;,例8,(2)f=cos(x);g=sin(2*x);,h=3*x2+4*x-12,ans=sin(2*x)*cos(x)+cos(x)/sin(2*x),例9 计算3阶范得蒙矩阵行列式的值。设A是一个由符号变量a,b,c确定的范得蒙矩阵。,syms a b c;U=a,b,c;A=1,1,1;U;U.2%建立范得蒙符号矩阵det(A)%计算A的行列式值,A=1,1,1 a,b,c a2,b2,c2 ans=b*c2-c*b2-a*c2+
14、a*b2+a2*c-a2*b,该函数将符号表达式s转换为分子和分母都是整系数的最佳多项式,并分别存放在n与d中。,(二)符号表达式的分式通分,如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:,n,d=numden(s),例10 对表达式 进行通分。,syms x yf=x/y+y/x;n,d=numden(f),n=x2+y2d=y*x,factor(S)对S分解因式,pretty(S)将S按照类似书写习惯的方式显示;expand(S)对S进行展开collect(S)对S合并同类项,collect(S,v)对S按变量v合
15、并同类项。以上S均是符号表达式或符号矩阵,(三)符号表达式的因式分解、展开与合并,Matlab 提供了符号表达式的因式分解与展开的函数,函数的调用格式为:,例11 将表达式(x9-1)分解为多个因式。,syms xfactor(x9-1),ans=(x-1)*(x2+x+1)*(x6+x3+1),factor 也可用于正整数的分解,s=factor(100),factor(sym,syms xf=(x+1)5;expand(f),syms a b x y;A=2*a2*b3*x2-a*b4*x3+10*a*b6*x4,3*x*y-5*x2;4,a3-b3;factor(A)%对A的每个元素分解
16、因式pretty(A),例12 对符号矩阵A的每个元素分解因式。,例13 展开表达式f=(x+1)5,ans=a*b3*x2*(10*b3*x2-b*x+2*a),-x*(-3*y+5*x)4,(a-b)*(a2+a*b+b2)2 3 2 4 3 6 4 2 2 a b x-a b x+10 a b x 3 y x-5 x 3 3 4 a-b,ans=x5+5*x4+10*x3+10*x2+5*x+1,syms x t;f=x*(x*(x-6)+12)*t;collect(f)collect(f,t),例14 对于表达式 f=x(x(x-6)+12)t,分别将自变量x和t的同类项合并。,ans
17、=t*x3-6*t*x2+12*t*xans=x*(x*(x-6)+12)*t,(四)符号表达式的化简,Matlab提供的对符号表达式化简的函数有:,syms x y;s=(x2+y2)2+(x2-y2)2;r,how=simple(s)%Matlab自动调用多种函数对s进行化简,并显示每步结果。,simple(s):调用Matlab 的其他函数对表达式进行综合化简,以寻求s的最简形式,并显示化简过程。调用格式为:,simplify(s):应用函数规则对s进行化简;,r,how=simple(s),返回s的最简化形式,r为返回的简化形式,how为化简过程中使用的主要方法,包括simplify,
18、radsimp,combine,collect,factor,convert,expand等。,例15 化简,r=2*x4+2*y4 how=simplify,(五)符号表达式嵌套形式重写,将符号多项式s用嵌套形式表示,即用多层括号的形式表示。Horner函数可以实现此功能。该函数的调用格式为:,syms xhorner(x3-6*x2+11*x-6),horner(s),例16 将表达式x3-6*x2+11*x-6用嵌套形式表示。,ans=-6+(11+(-6+x)*x)*x,(六)任意精度的数学运算,在symbolic中有三种不同的算术运算:数值类型matlab的浮点算术运算;有理数类型m
19、aple的精确符号运算;vpa类型maple的任意精度算术运算。,浮点算术运算1/2+1/3(定义输出格式format long)ans=0.83333333333333符号运算sym(1/2)+(1/3)ans=5/6 精确解任意精度算术运算digits(n)设置可变精度,缺省16位vpa(x,n)显示可变精度计算,digits(6)vpa(1/2+1/3),vpa(5/6,4)ans=0.8333a=sym(1/4,exp(1);log(3),3/7)a=1/4,exp(1)log(3),3/7vpa(a,10)ans=.2500000000,2.718281828 1.098612289
20、,.4285714286,例17,ans=0.833333,第5章 MATLAB符号运算 与微积分实验,5.1.符号对象的创建,5.2.符号表达式运算,5.3.符号微积分,5.4.符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,5.3、符号微积分,(一)符号极限,limit(f,x,a,left):求符号函数f在x=a处的左极限。,limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,函数f(x)的极限值;,limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,使用该格式时,符号函数f(x)的变量为函数fi
21、ndsym(f)确定的默认自变量,既变量x趋近于a;,limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况;,limit(f,x,a,right):求符号函数f在x=a处的右极限;,函数 limit 用于求符号函数 f 的极限。系统可以根据用户要求,计算变量从不同方向趋近于指定值的极限值。,例18 求极限。syms t;f1=exp(-t)*sin(t);f2=1/t;a1=limit(f1,t,inf),a2=limit(f2)a3=limit(f2,t,0,left),a4
22、=limit(f2,t,0,right),a1=0 a2=NaN a3=-Inf a4=Infsyms x t;limit(1+2*t/x)(3*x),x,inf)ans=exp(6*t)syms x;f=x*(sqrt(x2+1)-x);limit(f,x,inf,left)ans=1/2syms x;f=(sqrt(x)-sqrt(2)-sqrt(x-2)/sqrt(x*x-4);limit(f,x,2,right)ans=-1/2,(二)符号导数,diff函数用于对符号表达式求导数。其一般调用格式为:,diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号
23、表达式s求一阶导数。,diff(s,v):以v为自变量,对符号表达式s求一阶导数。,diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。,diff(s,v,n):以v为自变量,对符号表达式s求n阶导数。,例19 求导数:,x=sym(x);diff(sin(x2),ans=2*cos(x2)*x,例20 求函数的导数。,f=sym(sqrt(1+exp(x)tx;exp(x)x+y)diff(f)%未指定求导变量和阶数,按缺省规则处理,f=x*cos(x);diff(f,x,2)%求f对x的二阶导数diff(f,x,3)%求f对x的三阶导数,ans=ex
24、p(x)/(2*(exp(x)+1)(1/2),tx*log(t)exp(x),1,ans=-2*sin(x)-x*cos(x)ans=-3*cos(x)+x*sin(x),syms a b t x y zf1=a*cos(t);f2=b*sin(t);diff(f2)/diff(f1)%按参数方程求导公式求y对x的导数(diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/(diff(f1)3%求y对x的二阶导数,f=x*exp(y)/y2;diff(f,x)%z求f对x的偏导数diff(f,y)%z求f对y的偏导数,f=x2+y2+z2-a2;zx=-diff(f
25、,x)/diff(f,z)%按隐函数求导公式求z对x的偏导数zy=-diff(f,y)/diff(f,z)%按隐函数求导公式求z对y的偏导数,ans=-b*cos(t)/a/sin(t)ans=-(a*sin(t)2*b+a*cos(t)2*b)/a3/sin(t)3,ans=exp(y)/y2 ans=x*exp(y)/y2-2*x*exp(y)/y3,zx=-x/z zy=-y/z,(三)符号积分,int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间a,b上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数
26、f关于变量x在闭区间a,b上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。,符号积分由函数 int 来实现。该函数的一般调用格式为:,int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分,int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。,例21 求不定积分。,x=sym(x);f=(3-x)3;jf=int(f)%求不定积分diff(jf)f=sqrt(x2+1);int(f)%求不定积分,jf=-(x-3)4/4 ans=
27、-(x-3)3ans=(x/2+1/4)*(x2+x)(1/2)-log(x+(x*(x+1)(1/2)+1/2)/8,x=sym(x);t=sym(t);int(abs(1-x),1,2)%求定积分f=1/(1+x2);int(f,-inf,inf)%求定积分int(4*t*x,x,2,sin(t)%求定积分f=x3/(x-1)100;I=int(f,2,3)%用符号积分的方法求定积分double(I)%将上述符号结果转换为数值,例22 求定积分。,ans=1/2 ans=pi ans=2*t*(sin(t)2-4)I=/ans=0.0821,例23 计算二重积分,syms x yF=int
28、(int(x*exp(-x*y),x),y),F=1/y*exp(-x*y),syms x yF=int(int(x*exp(-x*y),x,0,2),y,0,1),F=1/exp(2)+1,?,例24 轴的长度为10米,若该轴的线性密度计算公式是f(x)=6+0.3x千克/米(其中x为距轴的端点距离),求轴的质量,syms x;f=6+0.3*x;m=int(f,0,10),m=quad(fx,0,10,1e-6),(1)符号函数积分。,(2)数值积分。,先建立一个函数文件 fx.m:,function fx=fx(x)fx=6+0.3*x;,m=75,再在MATLAB命令窗口,输入命令:,
29、m=75,(四)级数的符号求和,求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:,symsum(s,v,n,m),其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。,n=sym(n);s1=symsum(1/n2,n,1,inf)s2=symsum(-1)(n+1)/n,1,inf)%未指定求和变量,缺省为ns3=symsum(n*xn,n,1,inf)%此处的求和变量n不能省s4=symsum(n2,1,100)%计算有限级数的和,例25 求级数之和。,s1=1/6*pi2 s2=log(2)s3=3*x/(3*
30、x-1)2 s4=338350,(五)函数的泰勒展开,Matlab中提供了将函数展开为幂级数的函数taylor,其调用格式为:,该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。,taylor(f,v,n,a),例26 求函数在指定点的泰勒展开式。,ans=1+2*x+2*x2-2*x4 ans=1/6*x2+x3+119/72*x4+239/72*x5,x=sym(x);f1=(1+x+x2)/(1-x+x2);f2=sqrt(1-2*x+x3)-(1-3*x+
31、x2)(1/3);taylor(f1,x,5)%展开到x的4次幂时应选择n=5taylor(f2,6),x=sym(x);p=1+3*x+5*x2-2*x3;f=taylor(p,x,-1,4),例27 将多项式表示成x+1的幂的多项式。,f=-8-13*x+11*(1+x)2-2*(1+x)3,例28 求定积分。程序如下:a=0;b=3*pi;n=1000;h=(b-a)/n;x=a:h:b;f=exp(-0.5*x).*sin(x+pi/6);for i=1:n s(i)=(f(i)+f(i+1)*h/2;end s=sum(s),目录,事实上,MATLAB提供了有关数值积分的标准函数,实
32、际应用中可直接调用这些函数求数值积分。,s=754/837,(六)数值积分,quad(fun,a,b,tol,trace)%辛普森法算积分trapz(x,y)%梯形法算积分x时表示积分区间的离散化向量,y是与x同维数的向量,表示被积函数,z返回积分值 dblquad(fun,a,b,c,d)%矩形区域二重数值积分,(六)数值积分,f=inline(exp(-0.5*x).*sin(x+pi/6);jf=quad(f,0,3*pi)jf=0.90084 754/837ans=0.90084,一元函数的数值积分,采用自适应的Simpson方法。q=quad(fun,a,b,tol,trace)例2
33、9:计算定积分,法二:fhnd=(x)(exp(-x.2);q2=quad(fhnd,-1,1),法一:function f=fun(x)f=exp(-x.2);endq1=quad(fun,-1,1),法三:f=inline(exp(-x.2);q3=quad(f,-1,1),例30 计算数值积分,先用梯形积分法命令trapz计算 clear;x=-2:0.1:2;y=x.4;trapz(x,y)%积分步长为0.1结果为ans=12.8533,用符号积分法命令int计算 clear;syms x;int(x4,x,-2,2)结果为ans=64/5,如果取积分步长为0.01,MATLAB代码为
34、:clear;x=-2:0.01:2;y=x.4;trapz(x,y)%积分步长为0.01结果为ans=12.8005,用quad计算 fhnd=(x)(x.4);q2=quad(fhnd,-2,2)结果为q2=12.8000,例31计算 的近似值,法一:用被积函数在x=0处的泰勒展开式的部分项 作为被积函数的近似表达式,syms xf=exp(-x2);int(f)ff=taylor(f,x,5)int(ff,0,1)j5=double(ans)j5=0.766666666666667,j10=0.747486772486773,j20=0.746824120701185,j30=0.746
35、824132812450,function jf=qjs(n)syms xf=exp(-x2);int(f);ff=taylor(f,x,n);jf=double(int(ff,0,1);end,法二:,function jf=nhjs(n)x=0:1/n:1;y=exp(-x.2);f1=polyfit(x,y,n);fa=polyint(f1);jf=polyval(fa,1);end,nhjs(20),nhjs(30),ans=0.746824132821579,ans=0.746824132812396,第5章 MATLAB符号运算 与微积分实验,5.1.符号对象的创建,5.2.符号表
36、达式运算,5.3.符号微积分,5.4.符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,5.4、符号方程的求解,(一)符号代数方程(组)的求解,在Matlab中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:,solve(s1,s2,sn,v1,v2,vn):求解符号表达式s1,s2,sn组成的代数方程组,求解变量分别为v1,v2,vn。,solve(s,v):求解符号表达式s的代数方程,求解变量为v,solve(s):求解符号表达式s的代数方程,求解变量为默认变量。,x=solve(1/(x+2)+4*x/(x2-4)=1+2/(x-2),x)f=
37、sym(x-(x3-4*x-7)(1/3)=1);x=solve(f)x=solve(2*sin(3*x-pi/4)=1)x=solve(x+x*exp(x)-10,x)%仅标出方程的左端,例32 求非线性方程的解。,x=1 x=3 x=(5*pi)/36(13*pi)/36 x=,一般格式,ans=1/2/a*(-b+(b2-4*a*c)(1/2)1/2/a*(-b-(b2-4*a*c)(1/2),计算机格式,例33 求f=ax2+bx+c 的解。,f=a*x2+b*x+c;solve(f),例34 求方程组的解。,x y=solve(1/x3+1/y3=28,1/x+1/y=4,x,y),
38、x=1 1/3 y=1/3 1,u,v=solve(u3+v3-98,u+v-2,u,v)x y=solve(x2+y2-5,2*x2-3*x*y-2*y2),u=-3 5 v=5-3,x=-1 1 2-2 y=2-2 1-1,例35 解方程组 x+y+z=1 x-y+z=2 2x-y-z=1,f=solve(x+y+z=1,x-y+z=2,2*x-y-z=1),x,y,z=solve(x+y+z=1,x-y+z=2,2*x-y-z=1),g1=x+y+z=1;g2=x-y+z=2;g3=2*x-y-z=1;f=solve(g1,g2,g3),f=x:1x1 sym y:1x1 sym z:1
39、x1 sym,f=x:1x1 sym y:1x1 sym z:1x1 sym,x=2/3 y=-1/2z=5/6,(二)符号常微分方程的求解,dsolve(eqn1,eqn2,eqnN,condition1,conditionN,var1,varN),Matlab的符号运算工具箱中提供了功能强大的求解常微分方程(组)的函数dsolve。该函数的调用格式为:,dsolve(eqn1,condition,var),该函数求解微分方程eqn1在初值条件condition下的特解。参数var描述方程中的自变量符号,省略时按缺省原则处理。若没有给出初值条件condition,则求方程的通解。,函数求解微
40、分方程组eqn1、eqnN在初值条件conditoion1、conditionN下的解,若不给出初值条件,则求方程组的通解,var1、varN给出求解变量。,在Matlab中,用大写字母D表示导数。例如,Dy表示y,D2y表示y,Dy(0)=5表示y(0)=5。D3y+D2y+Dy-x+5=0表示微分方程y+y+y-x+5=0。,y1=dsolve(Dy-(x2+y2)/x2/2,x)%方程右端为0时可以不写y2=dsolve(Dy*x2+2*x*y-exp(x),x)y3=dsolve(Dy-x/y/sqrt(1-x2),x),例36 求微分方程的通解。,y1=x*(-2+log(x)+C1
41、)/(log(x)+C1)y2=(exp(x)+C1)/x2 y3=(-2*(1-x2)(1/2)+C1)(1/2)-(-2*(1-x2)(1/2)+C1)(1/2),y=dsolve(Dy=2*x*y2,y(0)=1,x)y=dsolve(Dy-x2/(1+y2),y(2)=1,x),例37 求微分方程的特解。,y=-1/(-1+x2)y=(x3/2-2)2+1)(1/2)+x3/2-2)(1/3)-1/(x3/2-2)2+1)(1/2)+x3/2-2)(1/3),x,y=dsolve(Dx=4*x-2*y,Dy=2*x-y,t)x,y=dsolve(D2x-y,D2y+x,t),例38 求
42、微分方程组的解。,x=C1+C2*exp(3*t)y=1/2*C2*exp(3*t)+2*C1 x=-C1*exp(1/2*2(1/2)*t)*sin(1/2*2(1/2)*t)-C2*exp(-1/2*2(1/2)*t)*sin(1/2*2(1/2)*t)+C3*exp(1/2*2(1/2)*t)*cos(1/2*2(1/2)*t)+C4*exp(-1/2*2(1/2)*t)*cos(1/2*2(1/2)*t)y=-C1*exp(1/2*2(1/2)*t)*cos(1/2*2(1/2)*t)+C2*exp(-1/2*2(1/2)*t)*cos(1/2*2(1/2)*t)-C3*exp(1/2
43、*2(1/2)*t)*sin(1/2*2(1/2)*t)+C4*exp(-1/2*2(1/2)*t)*sin(1/2*2(1/2)*t),x,y=dsolve(Dx=y,Dy=-x,x(0)=0,y(0)=1)dsolve(D2y=-a2*y,y(0)=1,Dy(pi/a)=0),x=sin(t)y=cos(t)ans=cos(a*t),y=dsolve(D2y+2*Dy+2*y=0,y(0)=1,Dy(0)=0)ans=exp(-t)*cos(t)+exp(-t)*sin(t)ezplot(y)%方程解y(t)的时间曲线图,例39 求下述方程的解,例40 求解两点边值问题:,y=dsolve
44、(x*D2y-3*Dy=x2,y(1)=0,y(5)=0,x),ezplot(y,-1,6)hold onplot(1,5,0,0,.r,MarkerSize,20)%标记点的大小为20 text(1,1,y(1)=0)text(4,1,y(5)=0)title(x*D2y-3*Dy=x2,y(1)=0,y(5)=0)hold off,(1)求解边值问题,y=31/468*x4-1/3*x3+125/468,(2)观察“解”的图形,两点边值问题的解曲线,对于二元函数的极值问题,根据二元函数极值的必要和充分条件,可分为以下几个步骤:步骤1.定义二元函数.步骤2.求解方程组,得到驻点.步骤3.对于
45、每一个驻点,求出二阶偏导数步骤4.对于每一个驻点,计算判别式,如果,则该驻点是极值点,当 为极小值,为极大值;如果,需进一步判断此驻点是否为极值点;如果 则该驻点不是极值点.,例41 求函数 的极值点和极值.,首先用diff命令求z关于x,y的偏导数clear;syms x y;z=x4-8*x*y+2*y2-3;diff(z,x)diff(z,y)结果为ans=4*x3-8*y ans=-8*x+4*y,再求解各驻点的坐标。一般方程组的符号解用solve命令,求解方程的MATLAB代码为:clear;x,y=solve(4*x3-8*y=0,-8*x+4*y=0,x,y)结果有三个驻点,分别
46、是P(-2,-4),Q(0,0),R(2,4).,下面再求判别式中的二阶偏导数:clear;syms x y;z=x4-8*x*y+2*y2-3;A=diff(z,x,2)B=diff(diff(z,x),y)C=diff(z,y,2)结果为A=2*x2 B=-8 C=4,由判别法可知P(-2,-4)和R(2,4)都是函数的极小值点,而点Q(0,0)不是极值点,实际上,P(-2,-4)和R(2,4)是函数的最小值点。当然,我们可以通过画函数图形来观测极值点与鞍点。clear;x=-5:0.2:5;y=-5:0.2:5;X,Y=meshgrid(x,y);Z=X.4-8*X.*Y+2*Y.2-3
47、;mesh(X,Y,Z)xlabel(x),ylabel(y),zlabel(z)结果如图1,图1,可见在图1中不容易观测极值点,这是因为z的取值范围为-500,100,是一幅远景图,局部信息丢失较多,观测不到图像细节.可以通过画等值线来观测极值.contour(X,Y,Z,600)xlabel(x),ylabel(y)结果如图2,图2,由图2可见,随着图形灰度的逐渐变浅,函数值逐渐减小,图形中有两个明显的极小值点P(-2,-4)和R(2,4).根据提梯度与等高线之间的关系,梯度的方向是等高线的法方向,且指向函数增加的方向.由此可知,极值点应该有等高线环绕,而Q(0,0)点周围没有等高线环绕,
48、不是极值点,是鞍点.,syms xd1=diff(exp(1/2*x)*sin(2*x)d2=diff(d1)x=2:0.1:3*pi;y1=exp(x/2).*sin(2*x);y2=1/2*exp(1/2*x).*sin(2*x)+2*exp(1/2*x).*cos(2*x);y3=15/4*exp(1/2*x).*sin(2*x)+2*exp(1/2*x).*cos(2*x);y4=zeros(1,length(x);plot(x,y1,b,x,y2,g,x,y3,r,x,y4)gtext(y=f(2)(x);y=f(1)(x);y=f(x),例42已知函数(1)求出该函数的一阶导函数,
49、二阶导函数,并画出它们相应的曲线;(2)观察函数的单调区间,凹凸区间,极值点和拐点,第5章 MATLAB符号运算 与微积分实验,5.1.符号对象的创建,5.2.符号表达式运算,5.3.符号微积分,5.4.符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,5.5、符号数学的简易绘图,利用计算获得的符号表达式直接绘图;,据获得的符号表达式或符号数值结果,进而转换得到数值数据,再利用Matlab的数值绘图指令绘制所需的图形,符号计算结果的可视化有两种方法:,Matlab中有一组专门实现函数可视化的指令,它们的名称特点是:名称前两个字符都是“ez”。,简捷作图指令汇总表,(一)二
50、维绘图函数,ezplot(f):绘制表达式f(x)的二维图形,轴坐标的近似范围为-2,2;,ezplot(f,xmin,xmax):绘制表达式f(x)的二维图形,轴坐标的近似范围为xmin,xmax;,ezplot(f,xmin,xmax,ymin,ymax):在指定x和y范围内,绘制y=f(x)描写的平面曲线。,(1)对于函数f=f(x),ezplot函数的调用格式为:,ezplot(f):在默认区间-2x2和-2y2绘制f(x,y)=0的图形;,ezplot(f,xmin,xmax):绘制f(x,y)=0的二维图形,轴坐标的近似范围为xmin,xmax;,ezplot(f,xmin,xma