第5章MATLAB符号运算与微积分实验.ppt_第1页
第5章MATLAB符号运算与微积分实验.ppt_第2页
第5章MATLAB符号运算与微积分实验.ppt_第3页
第5章MATLAB符号运算与微积分实验.ppt_第4页
第5章MATLAB符号运算与微积分实验.ppt_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,数学实验,Mathematical Experiments,第5章 MATLAB符号运算 与微积分实验,华 锐 学 院 数 计 系 张 加 勇 办公室:2号楼312 办公电话:6391028 移动电话所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。,Matlab本身并没有符号计算功能, MathWorks公司于1993年购买了著名的符号数学软件Maple的使用权,并利用Maple已有的函数库,开发了符号数学工具箱。,符号运算与数值运算的区别:,数值运算中必须先对变量赋值,然后才能参与运算。,符号运算无须事先对独立变量赋值,运算结

2、果以标准的 符号形式表达。,符号计算是精确计算,可以获得任意精度的解; Symbolic Math Toolbox符号运算工具包通过调用Maple软件实现符号计算的。 Maple软件主要功能是符号运算,它占据符号软件的主导地位。,符号运算的特点:,运算对象可以是没赋值的符号变量。符号计算定义在符号变量的基础上,符号表达式计算前必须定义符号变量;,Matlab的符号数学工具箱的主要功能包括:符号表达式的创建、符号矩阵的运算、符号表达式的化简、符号微积分、符号方程(主要指代数方程与常微分方程)的求解、符号函数绘图等。,符号计算的计算速度较慢;,符号计算的运算符和基本数学函数与数值计算中的运算符和基

3、本数学函数几乎完全相同。,第5章 MATLAB符号运算 与微积分实验,5.1. 符号对象的创建,5.2. 符号表达式运算,5.3. 符号微积分,5.4. 符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,S=sym(s,参数) %由数值创建符号对象 S=sym(s,参数)%由字符串创建符号对象,5.1、符号对象的创建,(一) 创建符号变量和符号表达式,sym函数,参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。符号变量要先定义,后引用。Matlab提供了两个建立符号变量的函数:sym和syms,两个函数的用法不同。,sym函数的主要功能是创建单个符号变量,以便进行

4、符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:,当被转换的s是数值时,参数可以是d、f、e或r 四种格式,当被转换的s是字符串时,参数可以是real、unreal和positive三种格式,如: f1=ax2+bx+c 二次三项式 f2= ax2+bx+c=0 方程 f3=Dy+y2=1 微分方程,符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算,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 %建

5、立符号矩阵A B=w,x;y,z %建立数值矩阵B det(A) %计算符号矩阵A的行列式 det(B) %计算数值矩阵B的行列式,使用符号变(常)量进行代数运算和数值变(常)量进行的运算是不同的。,例1 考察符号变量和数值变量的差别。,syms函数,函数sym一次只能定义一个符号变量,使用不方便。Matlab 提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:,syms 符号变量名1 符号变量名2 符号变量名n,用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。,建立符号表达式的方法,使用已定义的符号变量组成;syms,用

6、sym函数和引号建立。,例2 分别使用sym和syms函数创建符号表达式。 syms a b c x f1=a*x2+b*x+c f1 = 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 中的全部符号

7、变量。,在求函数的极限、导数和积分时,如果用户没有明确指定自变量,Matlab将按缺省原则确定自变量并对其进行相应微积分运算。可用findsym(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); finds

8、ym(f,1) %在f函数中查询1个系统缺省变量 ans= x,(二) 符号矩阵的创建,符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。,用字符串直接创建符号矩阵,例4 A = a,2*b; 3*a, 0 A = a, 2*b 3*a, 0,模仿matlab数值矩阵的创建方法; 每一行都要用方括号括起来; 需保证同一列中各行元素字符串有相同的长度(较短的字符串要用空格补齐长度)。,用sym函数创建符号矩阵,命令格式:A=sym( ),符号矩阵内容同数值矩阵:矩阵元素可以是任何不带等号的符号表达式,各

9、矩阵元素之间用逗号或空格分隔,各行之间用分号分隔,各元素字符串的长度可以不相等; 需用sym函数定义; 需用 标识。,例5 A = sym(a , 2*b ; 3*a , 0) A = a, 2*b 3*a, 0,注意:符号矩阵的每一行的两端都有方括号,这是与 Matlab数值矩阵的一个重要区别。,将数值矩阵转化为符号矩阵,A=1/3,2.5;1/0.7,2/5 A = 0.3333 2.5000 1.4286 0.4000 sym(A) ans = 1/3, 5/2 10/7, 2/5,函数调用格式:sym(A),例6,A =sym(1/3,5/2;10/7,2/5) B=eval(A),将

10、符号矩阵转化为数值矩阵,函数调用格式: eval(A),A = 1/3, 5/2 10/7, 2/5 B = 0.3333 2.5000 1.4286 0.4000,例7,numeric(A),或,实际上,Matlab的符号数学工具箱提供了两个符号表达式的替换函数subexpr和subs,可以通过符号替换使表达式的输出形式简化,以得到一个简单的表达式。,符号表达式的替换,将表达式中重复出现的字符串用变量代替的函数为subexpr,其调用形式为:,此函数用变量Sigma(字符或字符串)的值代替符号表达式S中重复出现的字符串,Y返回替换后的结果。,Y,Sigma=subexpr(S,Sigma),

11、例8 求解并化简 3 次方程 x3+ax+1=0 的符号解。,t=solve(x3+a*x+1=0),t = (a3/27 + 1/4)(1/2) - 1/2)(1/3) - a/(3*(a3/27 + 1/4)(1/2) - 1/2)(1/3) a/(6*(a3/27 + 1/4)(1/2) - 1/2)(1/3) - (a3/27 + 1/4)(1/2) - 1/2)(1/3)/2 - (3(1/2)*i*(a/(3*(a3/27 + 1/4)(1/2) - 1/2)(1/3) + (a3/27 + 1/4)(1/2) - 1/2)(1/3)/2 a/(6*(a3/27 + 1/4)(1/

12、2) - 1/2)(1/3) - (a3/27 + 1/4)(1/2) - 1/2)(1/3)/2 + (3(1/2)*i*(a/(3*(a3/27 + 1/4)(1/2) - 1/2)(1/3) + (a3/27 + 1/4)(1/2) - 1/2)(1/3)/2,r,s=subexpr(t,s),r = s(1/3) - a/(3*s(1/3) a/(6*s(1/3) - s(1/3)/2 - (3(1/2)*i*(a/(3*s(1/3) + s(1/3)/2 a/(6*s(1/3) - s(1/3)/2 + (3(1/2)*i*(a/(3*s(1/3) + s(1/3)/2 s = (a

13、3/27 + 1/4)(1/2) - 1/2,而函数 subs 用指定符号替换符号表达式中的某一特定符号。,subs(f,x,a) 用 a 替换字符函数 f 中的字符变量 x a 可以是 数/数值变量/表达式 或 字符变量/表达式,若 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

14、,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,例9:指出下面各条语句的输出结果,f=2*u,第5章 MATLAB符号运算 与微积分实验,5.1. 符号对象的创建,5.2. 符号表达式运算,5.3. 符号微积分,5.4. 符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,1. 算术运算 (1)“”,“”,“*”,“”,“/”,“” (2)“.*”,“./”,“.”,“.” (3)“”,“.” 2. 关系运算 只有运算符“= =”、“=”分别对符号对象进行“相等

15、”、“不等”的比较。 3. 三角函数、双曲函数和相应的反函数 三角函数包括sin、cos和tan,双曲函数包括sinh、cosh和tanh,5.2、符号表达式运算,(一)符号表达式的基本运算,4. 指数和对数函数 5. 复数函数 复数的共轭conj、求实部real、求虚部imag和求模abs函数与数值计算中的使用方法相同。没有提供求相角的命令。 6. 矩阵代数命令 符号运算中的矩阵代数命令有diag,triu,tril,inv,det,rank,poly,expm,eig和svd等,它们的用法几乎与数值计算中的情况完全一样,练习,例10 符号表达式的四则运算示例。,syms x y; f1=2

16、*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 x f=2*x2+3*x-5; g= x2+x-7; h=f+g,syms x f=cos(x);g=sin(2*x); f/g+f*g,(1) f= 2*x2+3*x-5; g= x2+x-7;,例11,(2)f=cos(x);g= sin(2*x);,h = 3*x2+4*x-12,ans =

17、 sin(2*x)*cos(x) + cos(x)/sin(2*x),例12 计算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+a*b2+a2*c-a2*b,该函数将符号表达式s转换为分子和分母都是整系数的最佳多项式,并分别存放在n与d中。,(二)符号表达式的分式通分,如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函

18、数来提取符号表达式中的分子或分母。其一般调用格式为:,n,d=numden(s),例13 对表达式 进行通分。,syms x y f=x/y+y/x; n,d=numden(f),n = x2+y2 d = y*x,factor(S)对S分解因式,S是符号表达式或符号矩阵; pretty(S)将符号表达式S按照类似书写习惯的方式显示; expand(S)对S进行展开,S是符号表达式或符号矩阵; collect(S)对S合并同类项,S是符号表达式或符号矩阵; collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。,(三)符号表达式的因式分解、展开与合并,Matlab 提供了符

19、号表达式的因式分解与展开的函数,函数的调用格式为:,例14 将表达式(x9-1)分解为多个因式。,syms x factor(x9-1),ans = (x-1)*(x2+x+1)*(x6+x3+1),factor 也可用于正整数的分解, s=factor(100),factor(sym(12345678901234567890),syms x f=(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的每个元素分解因式 pretty(A),例15 对符号

20、矩阵A的每个元素分解因式。,例16 展开表达式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),例17 对于表达式 f=x(x(x-6)+12)t,分别将自变量x和t的同类项合并。,ans

21、 = t*x3-6*t*x2+12*t*x ans = 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为化简过程中使用的主要方法,包

22、括simplify, radsimp, combine, collect, factor, convert, expand等。,例18 化简,r = 2*x4+2*y4 how = simplify,(五)符号表达式嵌套形式重写,将符号多项式s用嵌套形式表示,即用多层括号的形式表示。Horner函数可以实现此功能。该函数的调用格式为:,syms x horner(x3-6*x2+11*x-6),horner(s),例19 将表达式x3-6*x2+11*x-6用嵌套形式表示。,ans = -6+(11+(-6+x)*x)*x,(六)任意精度的数学运算,在symbolic中有三种不同的算术运算:

23、数值类型matlab的浮点算术运算; 有理数类型maple的精确符号运算; 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.8333 a=sym(1/4,exp(1);log(3),3/7) a = 1/4,exp(1) log(3),

24、3/7 vpa(a,10) ans = .2500000000, 2.718281828 1.098612289, .4285714286,例20,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) 的极限值;,li

25、mit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,既变量x趋近于a;,limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况;,limit(f,x,a,right):求符号函数f在x=a处的右极限;,函数 limit 用于求符号函数 f 的极限。系统可以根据用户要求,计算变量从不同方向趋近于指定值的极限值。,例21 求极限。 syms t; f1=exp(-t)*s

26、in(t);f2=1/t;a1=limit(f1,t,inf),a2=limit(f2) a3=limit(f2,t,0,left), a4=limit(f2,t,0,right), ans = (1/2*a*exp(sin(a)+1/2*a-exp(tan(a)+1)/a syms 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/2 syms x; f=(sqrt(x)-sqrt(2)-sqrt(x-2)/sqrt(x*x-4); li

27、mit(f,x,2,right) ans = -1/2,(二)符号导数,diff函数用于对符号表达式求导数。其一般调用格式为:,diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。,diff(s,v):以v为自变量,对符号表达式s求一阶导数。,diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。,diff(s,v,n):以v为自变量,对符号表达式s求n阶导数。,例22 求导数:,x = sym(x); diff(sin(x2),ans = 2*cos(x2)*x,例23 求函数的导数。,f=sym(s

28、qrt(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 = exp(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 z f1=a*cos(t);f2=b*sin(t); diff(f2)/diff(f1) %按参数方程求导公式求y对x的导数 (d

29、iff(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,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)/y

30、2 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)。当函数f关于变量x在闭区间a,b上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。,符号积分由函数 int 来实现。该函数的一般调用格式为:,int(s):没有指定积分变量和积分阶数时,系统按finds

31、ym函数指示的默认变量对被积函数或符号表达式s求不定积分,int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。,例24 求不定积分。,x=sym(x); f=(3-x)3; jf=int(f) %求不定积分 diff(jf) f=sqrt(x2+1); int(f) %求不定积分,jf =-(x - 3)4/4 ans =-(x - 3)3 ans = (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)

32、; int(f,-inf,inf) %求定积分 int(4*t*x,x,2,sin(t) %求定积分 f=x3/(x-1)100; I=int(f,2,3) %用符号积分的方法求定积分 double(I) %将上述符号结果转换为数值,例25 求定积分。,ans = 1/2 ans = pi ans = 2*t*(sin(t)2-4) I = 97893129180187301565519001875382615/1192978373971185320372138406360121344 ans = 0.0821,例26 计算二重不定积分,syms x y F=int(int(x*exp(-x*

33、y),x),y),F = 1/y*exp(-x*y),例27 轴的长度为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命令窗口,输入命令:,m = 75,(四)级数的符号求和,求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:,symsum(s,v,n,m)

34、,其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。,n=sym(n); s1=symsum(1/n2,n,1,inf) s2=symsum(-1)(n+1)/n,1,inf) %未指定求和变量,缺省为n s3=symsum(n*xn,n,1,inf) %此处的求和变量n不能省 s4=symsum(n2,1,100) %计算有限级数的和,例28 求级数之和。,s1 = 1/6*pi2 s2 = log(2) s3 = 3*t/(3*t-1)2 s4 = 338350,(五)函数的泰勒展开,Matlab中提供了将函数展开为幂级数的函

35、数taylor,其调用格式为:,该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。,taylor(f,v,n,a),例29 求函数在指定点的泰勒展开式。,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+x2)(1/3); taylor(f1,x,5) %展开到x的4次幂时应选择n=5

36、taylor(f2,6),x=sym(x); p=1+3*x+5*x2-2*x3; f=taylor(p,x,-1,4),例30 将多项式表示成x+1的幂的多项式。,f = -8-13*x+11*(1+x)2-2*(1+x)3,quad(fun,a,b,tol,trace)%辛普森法算积分 trapz(x,y) %梯形法算积分x时表示积分区间的离散化向量,y是与x同维数的向量,表示被积函数,z返回积分值 sum %等宽矩形法算积分 fblquad(fun,a,b,c,d) %矩形区域二重数值积分,(六)数值积分,一元函数的数值积分,采用自适应的Simpson方法。 q =quad(fun,a,

37、b,tol,trace) 例:计算定积分,法二 :fhnd=(x)(exp(-x.2); q2=quad(fhnd,-1,1),法一: function f=fun(x) f=exp(-x.2); end q1=quad(fun,-1,1),法三:f=inline(exp(-x.2); q3=quad(f,-1,1),例 求定积分 。 程序如下: 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),目录,事实上,MATL

38、AB提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。,s = 754/837,例31 计算数值积分,先用梯形积分法命令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代码为: clear; x=-2:0.01:2; y=x.4;trapz(x,y) %积分步长为0.01 结果为ans =12.8005,用quad计算 fhnd=(

39、x)(x.4);q2=quad(fhnd,-2,2) 结果为q2 =12.8000,例32计算 的近似值,法一:用被积函数在x=0处的泰勒展开式的部分项 作为被积函数的近似表达式,syms x f=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.746824132812450,function jf=qjs(n) syms x f=exp(-x2); int(f); ff=t

40、aylor(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. 符号表达式运算,5.3. 符号微积分,5.4. 符号方程的求解,5.6、图形化符号函数计算器,5.5

41、、符号数学简易绘图,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的代数方程,求解变量为默认变量。,当方程组不存在符号解时,又无其他自由参数,则给出数值解。,例33 求线性方程组AX=b的解。,此外,Matlab中提供了一个求解线性代数方程组的函数linsolve,其调用

42、格式为:,linsolve(A,b),方程组符号求解的命令如下: syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3; A=a11,a12,a13;a21,a22,a23;a31,a32,a33; b=b1;b2;b3; X=linsolve(A,b) %调用linsolve函数求解 XX=Ab %用左除运算求解,方程组数值求解的命令如下: A=34,8,4;3,34,3;3,6,8; b=4;6;2; X=linsolve(A,b) %调用linsolve函数求解 Ab %用另一种方法求解,X = 0.0675 0.1614 0.1037 an

43、s = 0.0675 0.1614 0.1037,x=solve(1/(x+2)+4*x/(x2-4)=1+2/(x-2),x) f=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) %仅标出方程的左端,例34 求非线性方程的解。,x = 1 x = 3 x = (5*pi)/36 (13*pi)/36 x = 1.6335061701558463841931651789789,一般格式,ans = 1/2/a*(-b+(b2-4*a*c)(1/2) 1/2/a*(-

44、b-(b2-4*a*c)(1/2),计算机 格式,例35 求f = ax2+bx+c 的解。,f=a*x2+b*x+c; solve(f),例36 求方程组的解。,x y=solve(1/x3+1/y3=28,1/x+1/y=4,x,y),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,例37 解方程组 x+y+z=1 x-y+z=2 2x-y-z=1,f=solve(x+y+z=1

45、,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: 1x1 sym,f = x: 1x1 sym y: 1x1 sym z: 1x1 sym,x= 2/3 y= -1/2 z = 5/6,(二)符号常微分方程的求解,dsolve(eqn1,eqn2,eqnN,condition1,conditionN,var1,varN),Matlab的符号运算工具箱中提供了功

46、能强大的求解常微分方程(组)的函数dsolve。该函数的调用格式为:,dsolve(eqn1,condition,var),该函数求解微分方程eqn1在初值条件condition下的特解。参数var描述方程中的自变量符号,省略时按缺省原则处理。若没有给出初值条件condition,则求方程的通解。,函数求解微分方程组eqn1、eqnN在初值条件conditoion1、conditionN下的解,若不给出初值条件,则求方程组的通解,var1、varN给出求解变量。,在Matlab中,用大写字母D表示导数。例如,Dy表示y,D2y表示y,Dy(0)=5表示y(0)=5。D3y+D2y+Dy-x+5

47、=0表示微分方程y+y+y-x+5=0。,y=dsolve(Dy-(x2+y2)/x2/2,x) %方程的右端为0时可以不写 y=dsolve(Dy*x2+2*x*y-exp(x),x) y=dsolve(Dy-x/y/sqrt(1-x2),x),例38 求微分方程的通解。,y = x*(-2+log(x)+C1)/(log(x)+C1) y = (exp(x)+C1)/x2 y = (-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)

48、=1,x),例39 求微分方程的特解。,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),例40 求微分方程组的解。,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

49、)*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*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

50、) 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)的时间曲线图,例41 求下述方程的解,例42 求解两点边值问题:,y=dsolve(x*D2y-3*Dy=x2,y(1)=0,y(5)=0,x),ezplot(y,-1,6) hold on plot(1,5,0,0,.r,MarkerSize,20) text

51、(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.对于每一个驻点,求出二阶偏导数 步骤4. 对于每一个驻点,计算判别式 ,如果 ,则该驻点是极值点,当 为极小值, 为极大值;如果 ,需进一步判断此驻点是否为极值点; 如果 则该驻点

52、不是极值点.,例43 求函数 的极值点和极值.,首先用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) 结果有三个驻点,分别是P(-2,-4),Q(0,0),R(2,4).,下面再求判别式中的二阶偏导数: clear; syms x y; z=x4-8*x*y+

53、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; mesh(X,Y,Z) xlabel(x),ylabel(y),zlabel(z) 结果如图1,图

54、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)点周围没有等高线环绕,不是极值点,是鞍点.,syms x d1=diff(exp(1/2*x)*sin(2*

55、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),例44已知函数 (1)求出该函数的一阶导函数,二阶导函数,并画出它们相应的曲线; (2)观察函数的单调区间,凹

56、凸区间,极值点和拐点,第5章 MATLAB符号运算 与微积分实验,5.1. 符号对象的创建,5.2. 符号表达式运算,5.3. 符号微积分,5.4. 符号方程的求解,5.6、图形化符号函数计算器,5.5、符号数学简易绘图,5.5、符号数学的简易绘图,利用计算获得的符号表达式直接绘图;,据获得的符号表达式或符号数值结果,进而转换得到数值数据,再利用Matlab的数值绘图指令绘制所需的图形,符号计算结果的可视化有两种方法:,Matlab中有一组专门实现函数可视化的指令,它们的名称特点是:名称前两个字符都是“ez ”。,简捷作图指令汇总表,(一)二维绘图函数,ezplot(f):绘制表达式f(x)的

57、二维图形,轴坐标的近似范围为-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,xmax,ymin,ymax):在指定

58、x和y范围内,绘制f(x,y) = 0的图形。,(2) 对于隐函数f = f(x,y),ezplot函数的调用格式为:,ezplot(x,y):在默认区间0t2绘制x=x(t)和y=y(t)的图形,ezplot(x,y,txmin,txmax):在区间tmin t tmax绘制x=x(t)和y=y(t)的图形。,(3) 对于参数方程x = x(t)和y = y(t),ezplot函数的调用格式为:,(4) 极坐标系绘图,ezpolar函数的调用格式为:,ezpolar(f ,a,b) :绘制极坐标曲线 rho=f(theta),范围为a,b。 a,b缺省时范围为0,2。,例45 绘制 和它的积分 在 间的图形。,syms t tao y=2/3*exp(-t/2)*cos(sqrt(3)/2*t); s=subs(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论