收藏 分享(赏)

Matlab符号计算.ppt

上传人:dzzj200808 文档编号:5750121 上传时间:2019-03-15 格式:PPT 页数:102 大小:505.50KB
下载 相关 举报
Matlab符号计算.ppt_第1页
第1页 / 共102页
Matlab符号计算.ppt_第2页
第2页 / 共102页
Matlab符号计算.ppt_第3页
第3页 / 共102页
Matlab符号计算.ppt_第4页
第4页 / 共102页
Matlab符号计算.ppt_第5页
第5页 / 共102页
点击查看更多>>
资源描述

1、第八章 MATLAB的符号计算,与数值运算的区别 数值运算中必须先对变量赋值,然后才能参与运算。 符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。,符号计算的特点,运算以推理解析的方式进行,因此不受计算误差积累问题困扰; 符号计算给出完全正确的解析解,当解析解不存在时,会给出数值解; 符号计算指令的调用比较简单,与教科书上的公式相近; 计算所需时间比数值计算要多很多; 常用的符号计算软件有Maple、Mathmatica、MathCAD等。,Matlab 的符号运算,Matlab 符号运算是通过符号数学工具箱(Symbolic Math Toolbox)来实现的。 Matlab

2、符号数学工具箱是建立在功能强大的 Maple 软件的基础上的,当 Matlab 进行符号运算时,它就请求 Maple 软件去计算并将结果返回给 Matlab。,Matlab 符号运算的功能,Matlab 的符号数学工具箱可以完成几乎所有的符号运算功能。主要包括:,符号表达式的运算、复合、化简等 可变精度运算,即支持以指定的精度返回结果 符号矩阵的运算 符号微积分 符号代数方程求解 符号微分方程求解 符号作图,一、符号计算基础,在进行符号运算时,必须先定义基本的符号量,可以是符号常量、符号变量。,符号对象,含有符号对象的表达式称为符号表达式。,符号矩阵/数组:元素为符号表达式的矩阵/数组。,(一

3、) 定义符号变量符号变量要先定义,后引用。 可以用sym函数、syms函数将运算量定义为符号型数据。 引用符号运算函数时,用户可以指定函数执行过程中的变量参数; 若用户没有指定变量参数,则使用findsym函数默认的变量作为函数的变量参数。,1、sym函数sym函数的主要功能是创建符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:x = sym(x),a=sym(a),b=sym(1/3),【例】作符号计算:a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量,a=sym(a); %定义a为符号运算量,输出变量名为

4、a b=sym(b); x=sym(x); y=sym(y); x,y=solve(a*x-b*y-1,a*x+b*y-5,x,y) %以a,b为符号常数,x,y为符号变量 即可得到方程组的解: x =3/a y =2/b,【例】已知一复数表达式 z=x+i*y, 试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。为了使乘积表达式x2+y2非负,这里,把变量x和y定义为实数。 x=sym(x,real); y=sym(y,real);,z=x+i*y; %定义复数表达式 conj(z); %求共轭复数 expand(z*conj(z) %求表达式与其共轭复数乘积的多项式 ans = x2+

5、y2 若要去掉x的属性,可以使用下面语句x = sym(x,unreal) 将x创建为纯格式的符号变量。,符号常量的精度,a = sym( 1/3 + sqrt(2) ),b = sym(1/3+sqrt(2),转化为最接近的“有理”表示,最精确的符号常数,符号数值精度控制,把符号常数转化为16位相对精度的浮点数值对象。,设置数值计算以n位相对精度进行,在digits指定的精度下,给出x的数值型符号结果xs,在n位相对精度下,给出x的数值型符号结果xs,double(x),digits(n),xs = vpa(x,n),xs = vpa(x),数值型 符号结果,数值,符号常数,vpa,sym,

6、double,vpa,double,2、syms函数 syms函数的功能与sym函数类似。syms函数可以在一个语句中同时定义多个符号变量,其一般格式为:syms arg1 arg2 argN 用于将arg1, arg2,argN等变量创建为符号型变量。 各变量间须用空格分开。,先使用 syms 定义符号变量,再按普通书写形式创建符号表达式:syms a x bf=a*x+b,3、创建符号表达式,用 sym 命令创建符号表达式:f = sym(a*x+b),4、创建符号矩阵(数组),将数值矩阵转化成符号矩阵:,B = 2/3,sqrt(2);5.2,log(3); C = sym(B),A=s

7、ym(1+x,sin(x); 5,exp(x),使用 sym 函数直接生成:,先使用 syms 定义符号变量,再按普通书写 形式创建符号矩阵(数组):,syms a b x y C = a,b;x,y,5. 生成符号函数 将表达式中的自变量定义为符号变量后,赋值给符号函数名,即可生成符号函数。例如有一数学表达式:,其用符号表达式生成符号函数fxy的过程为:syms a b c x y %定义符号运算量fxy=(a*x2+b*y2)/c2 %生成符号函数 生成符号函数fxy后,即可用于微积分等符号计算。,【例】定义一个符号函数 fxy=(a*x2+b*y2)/c2 ,分别求该函数对x、y的导数和

8、对x的积分。 syms a b c x y %定义符号变量 fxy=(a*x2+b*y2)/c2; %生成符号函数 diff(fxy,x) %符号函数fxy对x求导数 ans =2*a*x/c2 diff(fxy, y) %符号函数fxy对y求导数 ans =2*b*y/c2 %符号函数fxy对x求积分 int(fxy, x) ans =1/c2*(1/3*a*x3+b*y2*x),Matlab 符号运算采用的运算符,在名称和使用上,都与数值计算中的运算符完全相同。,6、符号计算的基本运算,矩阵运算:+ - * / ,数组运算:+ - .* . ./ .,矩阵转置: .,X=sym(x11,x

9、12;x21,x22;x31,x32); Y=sym(y11,y12,y13;y21,y22,y23); Z1=X*Y; Z2=X.*Y;,7、符号计算中的函数,Matlab 符号运算采用的函数,在名称和使用上,与数值计算中的函数基本相同。,三角函数,双曲函数及它们的反函数,无论在数值计算还是在符号计算中,使用方法相同。但是atan2函数只能用于数值计算。 指数、对数函数:符号计算中log2,log10都利用log计算 复数函数:符号计算中,没有angle函数(求相角) 矩阵代数指令:与数值计算一样,syms a b; s=a b;b a det(s) inv(s) sin(a+b) expa

10、nd(sin(a+b),二、符号计算中的常用函数,1、findsym 2、subs 3、subexpr 4、符号表达式操作,1、findsym 默认符号变量: 在数学表达式中,一般习惯于使用排在字母表中前面的字母作为变量的系数,而用排在后面的字母表示变量。例如:f=ax2+bx+c 表达式中的a,b,c通常被认为是常数,用作变量的系数;而将x看作自变量。,例如,数学表达式 f=xng=sin(at+b) 根据数学式中表示自变量的习惯,默认a,b,c为符号常数,x为符号变量。 若在MATLAB中表示上述表达式,首先用syms 函数定义a,b,n,t,x为符号对象。在进行导数运算时,由于没有指定符

11、号变量,则系统采用数学习惯来确定表达式中的自变量,默认a,b,c为符号常数,x,t为符号变量。 即 : 对函数f求导为:df/dx对函数g求导为:dg/dt,为了了解函数引用过程中使用的符号变量个数及变量名,可以用findsym函数查询默认的变量。该函数的引用格式为:findsym(f,n) 说明:f为用户定义的符号函数,n为正整数,表示查询变量的个数。n=i,表示查询i个系统默认变量。n值省略时表示查询符号函数中全部系统默认变量。,【例】查询符号函数f=xng=sin(at+b) 中的系统默认变量。 syms a b n t x %定义符号变量 f=xn; %给定符号函数 g=sin(a*t

12、+b); findsym(f,1) %在f函数中查询1个系统默认变量 ans= x 表示f函数中查询的1个系统默认变量为x。,f=sym(2*w-3*y+z2+5*a) findsym(f),findsym(f,3),findsym(f,1),findsym 举例,2、subs,用 a 替换字符函数 f 中的符号变量 x a 可以是 数值量(表达式)或 符号量(表达式),若 x 是一个由多个符号变量组成的数组或矩阵, 则 a 应该具有与 x 相同的形状的数组或矩阵。,用给定的数据替换符号表达式中的指定的符号变量,subs(f,x,a),f=sym(x+y)2+3*(x+y)+5) x=5;f1

13、=subs(f,x) f2=subs(f,y,7) f3=subs(f,x+y,z),一、符号计算基础, 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,f=2*u,例:指出下面各条语句的输出结果,3、subexpr,subexpr命令可以把复杂的表达式中所含的多个相同的子表达式用一个符号代替,使

14、其表达更简洁。,RS,ssub = subexpr(S,ssub),S是原表达式,RS是结果表达式 ssub是符号变量,注意:被代替的子表达式是matlab自动寻找的,并不肯定会得到简洁的结果,只有比较长的子表达式才会被替代。,t = solve(a*x3+b*x2+c*x+d = 0) r,s = subexpr(t,s),4、符号表达式操作,(1)factor (2)expand (3)collect (4)simplify (5)simple (6)numden (7)horner,(1)Factor,factor(f),syms x factor(x9-1) ans =(x-1)*(x

15、2+x+1)*(x6+x3+1),a = 2010 b1 = factor(a) b2 = factor(sym(a),对f进行因式分解,也可用于正整数的分解,(2)expand,expand(f),syms x; f = (x+1)6; f1 = expand(f),多项式展开,三角函数展开,syms x y; f = sin(x+y); f1 = expand(f),函数展开,(3)collect 合并同类项,collect(f,v): 按指定变量 v 进行合并 collect(f): 按默认变量进行合并,syms x y; f = x2*y + y*x - x2 + 2*x ; f1 =

16、 collect(f) F2 = collect(f,y),f=sym(x3+2*x2*y+4*x*y+6) collect(f,y) ans =(2*x2+4*x)*y+x3+6,(4)simplify,y=simplify(f):功能强大,利用各种形式的代数恒等式对符号表达式进行化简,syms x; f = sin(x)2 + cos(x)2 ; f1 = simplify(f),syms a b c; f = exp(c*log(sqrt(a+b); f1 = simplify(f),(5)simple,y=simple(f): 对 f 尝试多种不同的算法(包括simplify)进行简化

17、,返回其中最简短的形式,y, How=simple(f): y 为 f 的最简短形式,How 中记录的为简化过程中使用的方法。,syms fai1 fai2 y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2) 输出为:y =sin(fai1-fai2),验证三角等式:,函数简化举例,syms x; f=(1/x3+6/x2+12/x+8)(1/3); y1 = simplify(f) g1 = simple(f) g2 = simple(g1),多次使用 simple 可以达到最简表达。,例:简化,(6)numden 分式通分,N,D=numden

18、(f): N 为通分后的分子,D 为通分后的分母,syms x y; f = x/y+y/x; N,D=numden(f),(7)horner,将多项式该写为霍纳形式(一种多项式简化算法的形式),syms x; f = x4+2*x3+4*x2+x+1; g = horner(f),霍纳算法,一种多项式简化算法,以英国数学家威廉乔治霍纳命名 ,又称秦九韶算法,是中国南宋时期的数学家秦九韶提出的。,结论:对于一个n次多项式,至多做n次乘法和n次加法。,该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算

19、机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,用于减少CPU运算时间。,polyval()函数就是使用这种算法。,三、常用符号运算功能的实现,1、极限 2、微分 3、积分 4、级数求和 5、一元函数的泰勒级数展开 6、反函数 7、复合函数,1.求极限函数limit用于求符号函数f的极限。系统可以根据用户要求,计算变量从不同方向趋近于指定值的极限值。,limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(

20、x)的变量为函数findsym(f)确定的默认自变量,既变量x趋近于a。 limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。 limit(f,x,a,right):求符号函数f的极限值。right表示变量x从右边趋近于a。 limit(f,x,a,left):求符号函数f的极限值。left表示变量x从左边趋近于a。,二、微积分,【例】求极限syms x; %定义符号变量 f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/sin(x)3; %确定符号表

21、达式 w=limit(f) %求函数的极限 w = -1/2,二、微积分,2. 微分函数 diff函数用于对符号表达式s求微分。diff(s,v,n),二、微积分,diff(f,v,n) diff(f,n) diff(f,v) diff(f),求 f 对变量 v 的 n 阶导数 求 f 对默认变量的 n 阶导数 求 f 对变量 v 的一阶导数 求 f 对默认变量的一阶导数,【例】求导数:x = sym(x); %定义符号变量 diff(sin(x2) %求导运算 ans = 2*cos(x2)*x,二、微积分,3积分函数 积分函数int(s ,v,a,b)可以对被积函数或符号表达式s求积分in

22、t(s ,v,a,b)a:积分下限,b:积分上限。 当a或b取 inf(或 -inf)时,计算的就是广义积分。,int(f,v) inf(f) int(f,v,a,b) int(f,a,b),求 f 对变量 v 的不定积分 求 f 对默认变量的不定积分 求 f 对变量 v 的定积分 求 f 对默认变量的定积分,【例】求下述积分。 求积分:syms x int(1/(1+x2) ans = atan(x),二、微积分,syms A t tao w yf=int(A*exp(-i*w*t),t,-tao/2, tao/2); Yf=simple(yf) Yf = 2*A*sin(1/2*tao*w

23、)/w,例 验证积分,例.计算二重不定积分,F=int(int(x*exp(-x*y),x),y) F=1/y*exp(-x*y),求下列积分:,(1)求不定积分,(2)求定积分,(3)求二重定积分,int(x3*exp(-x2),x),int(sin(x)4*cos(x)2,0,pi/2),int(int(x*sin(x),y,sqrt(y),0,1),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表达

24、式的v变量在(a,b)区间求定积分,4. 级数(级数求和) 级数求和运算是数学中常见的一种运算。例如:f(x)=a0+a1x+a2x2+a3x3+anxn 函数symsum可以用于此类对符号函数f的求和运算。该函数的引用时,应确定级数的通项式s,变量的变化范围a和b。该函数的引用格式为:symsum(s, a,b),二、微积分,【例8】求级数的和:键入:1/12+1/22+1/32+1/42+ syms k symsum(1/k2,1,Inf) %k值为1到无穷大 ans = 1/6*pi2 其结果为:1/12+1/22+1/32+1/42+ =2/6,二、微积分,symsum(s,v,a,b

25、),若默认变量为k,求k从a开始到b为止时s的和,变量为v,求v从0开始到v-1为止s的前k项和,功能同上,不过变量为v,若默认变量为k,求k从0开始到k-1为止s的前k项和,symsum(s),symsum(s,v),symsum(s,a,b),5、一元函数的泰勒级数展开,taylor(f) taylor(f,n) taylor(f,n,v) taylor(f,n,v,a),求f关于默认变量的5阶麦克劳林展开 求f关于默认变量的n-1阶麦克劳林展开 求f关于变量v的n-1阶麦克劳林展开 求f在v=a处的n-1阶泰勒展开式,求函数y=cosx在x=0点处的5阶taylor展开式 及在x=pi/

26、3处的6阶taylor展开式 。,Matlab程序:ch413.m,6、复合函数,7、反函数,求反函数 g = finverse(f) g = finverse(f,v),四、求解符号方程,1、线性方程组的符号解 2、符号(代数)方程求解 3、常微分方程(组)的求解,1、线性方程组的符号解,clc; clear all; A = sym(1,1,1;3,-1,6;0,1,3) b = sym(1;7;4) x = Ab,2、符号(代数)方程求解,s = solve(f,v):求方程关于指定自变量的解 s = solve(f):求方程关于默认自变量的解,f 是用字符串表示的方程,或符号表达式。,

27、eq1 = a*x2+b*x+c=d sx = solve(eq1) sa = solve(eq1,a),eq2 = a*x2+b*x+c-d sx = solve(eq2) sa = solve(eq2,a),A、直接用 字符串 创建方程,若方程 f 中不含等号,则表示解方程 f = 0,syms a b c d xeq1 = a*x2+b*x+c-d;sx = solve(eq1)sa = solve(eq1,a),B、先定义符号变量,再创建符号表达式,符号表达式不能写成:eq1 = a*x2+b*x+c=d,解方程,syms x; f = x3-3*x+1; s = solve(f,x)

28、,s = solve(x3-3*x+1,x),s = solve(x3-3*x+1=0,x),s = solve( f1 , f2 , . , fN , v1 , v2 , . , vN),求解由 f1 , f2 , . , fN 确定的方程组关于 v1 , v2 , . , vN 的解,solve 也可以用来解方程组,s 是一个架构数组,如果要显示(引用)每个解,使用 s.v1,s.v2,若没有提供v1 , v2 , . , vN ,Matlab会自动确定默认变量。,例:解方程组,eq1 = x+2*y-z=27 eq2 = x+z=3 eq3 = x2+3*y2=28 s = solve(

29、eq1,eq2,eq3) s.x s.y s.z,解方程组,clc; clear all; syms u v w y z eq1 = u*y2 + v*z + w; eq2 = y + z + w; s = solve(eq1,eq2,y,z),范德瓦尔斯气体的三个临界参量,clc; clear all; f = (P+a/V2)*(V-b)=R*T D1 = diff(f,V); D2 = diff(D1,V); S = solve(f,D1,D2, P,T,V); Pc = S.P Vc = S.V Tc = S.T,clc; clear all; syms a b R T V P = R

30、*T/(V-b) - a/V2 D1 = diff(P,V) D2 = diff(D1,V) S = solve(D1,D2,V,T) Vc = S.V Tc = S.T Pc = subs(P,V,T,S.V,S.T),s = solve(x+2)x=2),solve 在得不到解析解时,会给出数值解,3、常微分方程(组)的求解,y = dsolve(eq1,eq2, . ,cond1,cond2, . ,v),y 为输出, eq1、eq2、.为微分方程, cond1、cond2、.为初值条件, v 为自变量。,只有很少一部分微分方程(组)能求出解析解。 大部分微分方程(组)只能利用数值方法求

31、数值解。,y1,y2=dsolve(x1,x2,xn) 返回 微分方程的解,dsolve 的使用,如果省略初值条件,则表示求通解;,如果省略自变量,则默认自变量为 t,dsolve(Dy=2*x,x); dy/dx = 2x dsolve(Dy=2*x); dy/dt = 2x,若找不到解析解,则返回其积分形式。,微分方程中用 D 表示对 自变量 的导数,如:,Dy y; D2y y; D3y y,一阶微分方程 dsolve(Dx=y,Dy=x,x(0)=0,y(0)=1) ans = x(t) = sin(t), y(t) = cos(t) 二阶微分方程 dsolve(D2y=-a2*y,y

32、(0)=1,Dy(pi/a)=0) ans = cos(a*x),例.,y=dsolve(D2y+2*Dy+2*y=0,y(0)=1,Dy(0)=0) y = exp(-x)*cos(x)+exp(-x)*sin(x) ezplot(y) 方程解y(t)的时间曲线图,求该方程的解,例 :求微分方程 的通解。,eq1 = Dy+2*x*y=x*exp(-x2)y = dsolve(eq1,x),例 :求微分方程 在初值条件 下的特解。,eq1 = x*Dy+y-exp(x)=0cond1 = y(1)=2*exp(1)y = dsolve(eq1,cond1,x),例:求微分方程组 在初值条件

33、下的特解。,Eq1 = Dx+5*x+y=exp(t) Eq2 = Dy-x-3*y=0 Cond1 = x(0)=1 Cond2 = y(0)=0 S = dsolve(Eq1,Eq2,Cond1,Cond2,t) S.x %查看解函数 x(t) S.Y %查看解函数 y(t),五、绘制符号函数的图形,1、fplot命令 2、ezplot命令 3、ezpolar命令 4、ezplot3命令 5、ezmesh命令 6、ezsurf命令,1、fplot,fplot(sin(x)/x,-20,20),fplot(fun,limits),绘制函数y=fun(x)的图形,limits可以是xmin,x

34、max形式 或xmin,xmax,ymin,ymax形式,ezplot(f),2、ezplot,ezplot(f,a,b),ezplot(f(x,y),ezplot(f(x,y),a,b,c,d),ezplot(f,g,a,b),ezplot(f,g),ezplot(x2 - y2 = 1),a=sym(sin(x);ezplot(a) ezplot(sin(x),cos(y),-4*pi 4*pi,figure(2),3、ezpolar 在极坐标系中绘制符号函数的图形,f = 100/(100+(t-1/2*pi)8)*(2-sin(7*t)-1/2*cos(30*t) ezpolar(f,

35、-pi/2,3*pi/2),ezpolar (f) 在0,2pi区间绘制f的图形 ezpolar (f,a,b) 在a,b区间绘制f的图形,4、ezplot3 绘制空间曲线,ezplot3(x,y,z) ezplot3(x,y,z,tmin,tmax),x=x(t),y=y(t),z=z(t),x = t*cos(t) y = t*sin(t) z = t ezplot3(x,y,z,0,10*pi),5、ezmesh 绘制符号函数的三维网格图,ezmesh(f): ezmesh(f,xmin,xmax,ymin,ymax) ezmesh(f,a,b),(1)曲面由显函数f=f(x,y)确定,

36、ezmesh(x*exp(-x2-y2),ezmesh(x,y,z) ezmesh(x,y,z,smin,smax,tmin,tmax) ezmesh(x,y,z,a,b),x = s-sin(s)*cos(t)y = (1-cos(s)*sin(t)z = sezmesh(x,y,z,pi*-2,2),(2)曲面由参数方程x=x(s,t),y=y(s,t),z=z(s,t)确定,6、ezsurf 绘制符号函数的彩色曲面图,ezsurf(f) ezsurf(f,xmin,xmax,ymin,ymax) ezsurf(f,a,b),ezsurf(x*(y2)/(x2+y4),(1)曲面由显函数f

37、=f(x,y)确定,ezsurf(x,y,z) ezsurfh(x,y,z,smin,smax,tmin,tmax) ezsurf(x,y,z,a,b),x = cos(s)*cos(t) y = cos(s)*sin(t) z = sin(s) ezsurf(x,y,z,0,pi/2,0,3*pi/2),(2)曲面由参数方程x=x(s,t),y=y(s,t),z=z(s,t)确定,1.计算下列极限,(1),(4),(3),(6),(5),(2),作业5.1,2.求下面的积分,给出50位精度的数值,3.求下列级数的和,4.,5. 解方程组:,6.计算:f(x)=sin(x)f(x)=1/cos(x),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报