昆明理工大学上机安排3-符号计算_第1页
昆明理工大学上机安排3-符号计算_第2页
昆明理工大学上机安排3-符号计算_第3页
昆明理工大学上机安排3-符号计算_第4页
昆明理工大学上机安排3-符号计算_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、符号计算学习要点MATLAB的符号数学工具箱(Symbolic Math Toolbox)将符号运算结合到MATLAB的数值运算环境中。符号数学工具箱是以Maple软件内核为符号运算的引擎,当MATLAB进行符号运算时,就转入Maple去计算并将结果返回到MATLAB的命令窗口。符号数学工具箱与其它工具箱不同,它不针对特殊专业或专业分支,而适用于广泛的用途;它使用字符串来进行符号分析,而不是数值分析。它涉及微积分、简化、复合、求解代数方程及微分方程等,有丰富的线性代数工具,支持Fourier,Laplace,z变换及逆变换。符号计算是数字运算的自然扩展,其特点包括: 不受计算误差的困扰; 计算

2、可以给出完全正确的封闭解或任意精度的数值解; 计算的指令比较简单,所需要的时间较长。自然科学理论分析中的公式、关系式及其推导是符号计算要解决的问题。数值计算与符号计算的区别:MATLAB数值计算的对象是数值,而符号计算的对象则是非数值的符号字符串。例:下面的代数方程的的根推导说明了符号计算的特点:(以下例子要在计算机上运行,分析其结果;有些程序可能标点符号是在中文状态下输入的,请复制时改为英文状态下的标点) 一 符号对象的创建函数sym()和命令syms创建符号常量、变量、函数以及表达式,函数class()检验符号对象类型。sym函数的用处之一是创建单个的符号变量。这种创建方式不需要在前面有任

3、何说明,使用非常快捷。正因如此,此创建过程中,包含在表达式内的符号变量并未得到说明,也就不存在于工作空间。syms函数与sym相反,它需要在具体创建一个符号表达式之前,将这个表达式所包含的全部符号变量创建完毕。1 符号对象的生成符号计算工具箱定义了一种新的MATLAB数据类型,叫做符号对象。在MATLAB内部,符号对象的数据存储格式是符号字符串。sym函数用于创建符号对象,包括符号常量、符号变量和符号表达式。【调用格式】 f = sym(arg) 把数值、字符串或者表达式arg转换为符号对象f f = sym(argn, flagn) 把数值或者数值表达式argn转换为flagn格式的符号对象

4、f = sym('argv', flagv) 把字符串'argv'按照flagv的格式转换为符号对象syms argv1 argv2 . 定义argv1、argv2等为符号对象syms arg1 arg2 . flagv 定义arg1、arg2等为flagv格式的符号对象【说明】 1. 对于数值或者数值表达式argn,flagn可以取以下值: 'd' 最接近的十进制浮点精度表示'e' 带估计误差的有理表示'f' 十六进制浮点数表示'r' 最接近的有理表示,MATLAB的缺省表示方法2. 对于字符串变

5、量名argv,flagv可以取以下“限定”项: 'positive' “正实数”符号变量'real' “实数”符号变量'unreal' “非实数”符号变量3. syms是sym函数的简化书写方式,各符号对象之间只能用空格分开。2 符号常量用sym函数可以定义符号常量对象,包括符号标量对象和符号常量数组对象,定义符号常量对象的同时也可以指定数值常量的表示方法。例 符号常量的定义 >>a=1/3, sqrt(5), pi+sqrt(2); %定义数值数组>>s1=sym(1/3, sqrt(5), pi+sqrt(2), &#

6、39;d'); %用十进制方式表示符号常量>>s2=sym(1/3, sqrt(5), pi+sqrt(2); %用最接近的有理方式表示符号常量 >>s3=sym('1/3, sqrt(5), pi+sqrt(2)'); %绝对准确的符号数值表示,输入为字符串3 符号变量与符号表达式1. 定义符号变量和符号表达式例 符号变量和符号表达式的定义 >> x = sym('x', 'real'); %定义实数符号变量x>> sym y real; %定义实数符号变量y >> z=x+i

7、*y; %定义符号表达式对象z >> conj(z) %符号变量求共轭复转置>>f = z*conj(z); %符号表达式对象>> f=simple(f) %符号表达式对象化简f = x2+y2 例 符号变量与符号矩阵>> syms a b c; %定义符号变量a,b,c >> A=a,b,c; b,c,a; c,a,b ; %定义符号矩阵A >> sum(A(:,1); %求矩阵A第一列的元素的和>> sum(A(1,:)=sum(A(:,2) %符号对象的关系运算>> det(A); %矩阵求行

8、列式>> syms alpha beta; %定义符号变量alpha和beta >> A(1,3)=beta; %矩阵元素赋值>> A=subs(A,a,alpha) %符号表达式的替换操作,矩阵A中的a用alpha代替以上例子可以看出:元素是符号对象的矩阵叫做符号矩阵;符号表达式是由以下部分组成的符号对象:a.符号常量;b.符号变量;c.符号运算符;d.专用函数。4 符号表达式中自变量的确定在数学表达式或者数学函数中,一般都含有自变量。为了便于进行数学运算,通常要显示指定表达式中的自变量,如果不指定自变量,MATLAB会根据上下文关系,识别表达式中默认的自

9、变量(独立自由的符号变量)。识别表达式中自变量的基本原则是:按照字母表中靠近小写字母x的顺序识别,最靠近字母x的变量被第一个识别为自变量。MATLAB还提供了自变量识别函数findsym。【调用格式】 findsym(exp) 识别表达式exp中所有的自由符号变量findsym(exp, n) 识别表达式exp中最靠近x的n个独立自由变量【说明】 1. 表达式可以是符号矩阵,此时变量识别是对整个矩阵进行的。 2. 函数识别的是“独立的”“自由的”符号变量,符号常量或者非独立的符号变量无法被识别。3. 识别次序是按照靠近x的远近进行的,区分大小写,总认为大写字母距离x的距离大于所有小写字母。例

10、符号表达式中自变量的识别 >> syms a b x X Y; %定义符号变量 >> k=sym(2.5); >> z=sym('c*sqrt(alpha)+y*sin(beta)'); %定义符号表达式对象(变量)z >> exp=a*z*X+k*Y+bx %定义符号表达式变量exp exp = a*(c*alpha(1/2)+y*sin(beta)*X+5/2*Y+bx >> findsym(exp) %自动识别所有自由独立变量,k为常量,z为非独立 >>findsym(exp,3) %识别exp中前3

11、个靠近x的独立自由变量5 符号数学函数在MATLAB中,可以定义表示数学函数的符号对象,既能建立具有详细运算关系的函数,又能建立抽象数学函数。定义符号数学函数有2种方法: 1. 用符号表达式 2. 用函数M文件(在函数M文件中用符号变量作为输入变量) 例 用符号表达式定义符号数学函数 >> syms x y z %定义函数自变量>> r = sqrt(x2 + y2 + z2); %定义函数r >> t = atan(y/x); %定义函数t >> f = sin(x*y)/(x*y); %定义函数f 例 用函数M文件来定义符号数学函数,下列代码

12、定义了函数sin(x) =sinc(x)/x。创建M函数文件如下:function z = sinc(x) %SINC 符号函数% sin(x)/x 数学计算公式% 接受符号变量作为输入变量if isequal(x,sym(0) %如果自变量值为符号0,则函数值为1 z = 1; else z = sin(x)/x; end 例 建立抽象的符号数学函数 (可用help命令查看subs、limit函数的用法)>> f = sym('f(x)') %建立抽象函数f(x) >> syms x h; >> df = (subs(f, x, x+h)

13、-f)/h %建立抽象函数df,表示f(x)的导数表达式df = (f(x+h)-f(x)/h >> g=subs(df, 'f', 'sin') %建立sin(x)的导数函数的定义 g = (sin)(x+h)-(sin)(x)/h >> limit(g,h,0) %根据导数定义,求sin(x)的导数 ans = cos(x)二 符号计算符号计算有:代数运算、函数运算、微积分运算、极限运算、级数求和、方程(组)求解等。A 代数运算符号对象的基本代数运算符号对象的基本代数运算和普通数值变量一样,可以使用算术运算符、关系运算符(仅能用=和!

14、=),其运算符的定义和数值运算相同。例 符号矩阵的基本代数运算,查看结果>>syms t; >>G = cos(t), sin(t); -sin(t), cos(t); >>A = G*G; %符号矩阵的乘法>>A = simple(A); %化简为最简表达式>>I = G'. *G; %符号数组乘法>>I = simple(I); %化简为最简表达式>>F= cos(t), -sin(t); sin(t), cos(t); >>(F+G)/2; %符号矩阵加法和符号矩阵与标量的除法B 函数

15、运算数值计算使用的函数基本上也可以用于符号计算,包括三角函数(atan2除外)、指数函数、对数函数(log2、log10除外)、复数函数(angle除外)、线性代数函数和矩阵函数。例 符号矩阵的函数运算,运行下面语句 查看结果(去掉分号)>>H = hilb(3) ; %生成3×3的希尔伯特数值矩阵>>H = sym(H); %将数值矩阵转为符号常数矩阵>>inv(H); %符号矩阵求逆>>det(H) %符号矩阵求行列式的值>>syms s >>H(1,1) = s; %将符号元素赋值为符号变量s,使矩阵变为非

16、奇异矩阵>>Z = det(H) %带有符号变量的符号矩阵求行列式的值>>sol = solve(Z) %求行列式的根>>H = subs(H,s,sol); %将矩阵行列式的根代入符号矩阵,使矩阵变为奇异矩阵>>det(H); %奇异矩阵的行列式值>>inv(H); %奇异矩阵求逆>> eig(H); %符号矩阵的特征值C 符号表达式分解、展开与化简 MATLAB提供了符号表达式的因式分解、展开和化简函数。【调用格式】 collect(expr, v) 合并符号表达式expr中符号对象v的同类项系数expand(expr

17、) 对表达式expr进行多项式、三角函数、指数对数等函数展开factor(expr) 对符号表达式expr做因式分解horner(expr) 把多项式expr分解为嵌套形式n,d=numden(expr) 提取表达式最小分母公因子d和相应的分子多项式n simplify(expr) 用多种恒定变换对表达式expr进行综合化简simple(expr) 把expr化简为最简表达式【说明】上述表达式expr可以是符号矩阵,此时函数对符号矩阵的每个元素进行相应操作。例 符号表达式的展开和分解>>f=sym ('(x3-6*x2+10*x-5)+(x-1)'); %定义原始的

18、符号表达式 >> fc=collect(f); %符号表达式合并同类项>> ff=factor(f); %符号表达式因式分解>> fh=horner(f); %符号表达式的嵌套分解 >> fe=expand(fh); %符号表达式的展开 >> factor(1025); %正整数的质数分解,10255×5×41例 写出矩阵 各元素的分子多项式和分母多项式 >> syms x; >> A=1/4, 1/(2*x-1)+1/(x+1); 2/(x2-1), 3*x+2; >> n,d

19、=numden(A); %提取表达式最小分母公因子d和相应的分子多项式n >> pretty(simplify(n./d); 例 化简 解:用simplify进行多次化简也得不到最简结果,用simple化简可以得到最简结果>> syms x; >> f= (1+3/x+3/x2+1/x3)(1/3); >> sfy1=simplify(f); >> sfy2=simplify(sfy1); >> sp1=simple(f); >> sp2=simple(sp1) D 符号表达式的置换操作MATLAB提供了子表达

20、式的置换函数。通常在这几种情况下使用子表达式的置换函数:第一,符号计算结果中多次出现同一个表达式,为了阅读方便,可以把这个表达式用符号变量来置换;第二,可以用符号常量对象置换表达式中的自变量,实现表达式求值;第三,通过置换某些表达式可以生成新的表达式。 1.自动置换函数【调用格式】 RS,vn=subexpr(S,vn) 用符号变量vn置换S中的子表达式,并重写S为RS。RS,vn=subexpr(S, 'vn') 例 对一元三次方程 的符号解进行子表达式的置换。 >> t = solve('a*x3+b*x2+c*x+d = 0'); >&g

21、t; r,s = subexpr(t,'s')2.通用置换函数【调用格式】 RS=subs(S, old, new) 用new置换S中old,生成RS 【说明】(1) old是被替换的子表达式,可以是符号变量,也可以是字符串表达式。(2) new是替换old的值,可以是符号常量、符号变量、符号表达式,也可以是数值。(3) 如果要替换多个子表达式,则old和new为细胞数组。例 通用置换函数。>> syms a x; >> f=a*cos(x)+1;>> f1=subs(f, 'cos(x)', sym('y')

22、; %用符号变量替换>> f2=subs(f, a, x, 3, sym('pi/4') %用符号常量替换, >> f3=subs(f, a, x, 3, pi/4); %用双精度数替换>> f4=subs(f, a, x, 0:3, 0:pi/3:pi); %用双精度数组替换>> f5=subs(f, x , sym('exp(-t)') %用符号表达式替换 E 符号函数的反函数【调用格式】 g = finverse(f, v) 求指定自变量为v的函数f(v)的反函数g(v) g = finverse(f) 求函

23、数f对缺省的自变量(由findsym确定)的反函数g 例 求 的反函数。>> syms x; f=(x2+1)(1/2); >> g=finverse(f);F 符号函数的复合函数【调用格式】 fg = compose(f, g, x, y, z) 对f (x)和g (y)求复合函数fg (z)= f (g (y)|y=z fg = compose(f,g) 对f ()和g ()求复合函数fg = (f g (),自变量由findsym确定例 求复合函数。>> syms x y z t u; >> f = 1/(1 + x2); g = sin(

24、y); h = xt; p = exp(-y/u); >> compose(f,g); >> compose(f, g, t); >> compose(h, g ,x, z) >> compose(h, g, t, z); >> compose(h, p, x, y, z); >> compose(h, p, t, u, z) G 符号微分和雅可比矩阵求导数、高阶导数、偏导数是常见的数学运算,MATLAB提供这方面的符号微分函数。【调用格式】df= diff(f, v, n) 求 ,即求函数f (v)对的n阶导数R = j

25、acobian(f,v) 求多元向量函数f (v)的雅可比矩阵,即 例 ,求 , 和>> syms a t x; >> f=a, t2; t*sin(x), log(x); >> dfx=diff(f,x) %矩阵f对x的一阶导数,也可写为diff(f) >> df2t=diff(f,t,2); %矩阵f对t的二阶导数>> dfxt=diff(diff(f,x),t) 例 ,求其雅可比矩阵>> syms x y z; >> f = x*y*z; y; x+z; >> v=x,y,z; >>

26、; R = jacobian(f,v) H 函数极限函数的极限是通过导数来定义的,limit函数用于求函数极限。【调用格式】 limit(f, x, a) 求 limit(f, x, a, 'right') 求 limit(f, x, a, 'left') 求 例 求极限运算。>> limit(sin(x)/x,x,0); >> limit(1/x,x,0,'right'); >> limit(1/x,x,0,'left'); >> limit(sin(x+h)-sin(x)/h,h

27、,0) %sin(x)导函数的定义>> v = (1 + a/x)x, exp(-x); >> limit(v,x,inf)I 符号积分 int函数用于求定积分、不定积分和多重积分的符号解。【调用格式】 S= int(f, v) 求不定积分f (v)dv,符号计算结果不带积分常数S= int(f, v, a, b) 求定积分 rsums(f, ra, rb) 用Riemann和求符号函数f (x)在ra,rb区间上的近似积分【说明】 1. 当f为矩阵时,将对矩阵的每个元素做积分运算。2. v缺省时,积分对findsym确认的变量进行。3. 积分上下限a和b可以是任何数值

28、和表达式4. rsums函数绘制求积分的曲线,根据用户的选择来确定最终的近似积分值例 计算 >> syms a t; >> f=exp(t), t4; 1, sin(a*t); >> int(f,t) 例 求多重积分 >> syms x y z; >> V=int(int(int(x2+y2+z2, z, sqrt(x*y), x*y), y, sqrt(x), x2), x, 1, 2) >> vpa(V) J 符号级数求和 symsum函数实现符号级数的求和运算。【调用格式】s= symsum(f, v, a, b)

29、求 ,a和b为整数,b可以取无穷大例 计算 和 >> syms t k x; >> f1=t,k2; >> f2=xk/sym('k!'); >> simple(symsum(f1, t, 0, t) >> simple(symsum(f2 ,k, 0, inf) K 符号代数方程组的解代数方程包括线性、非线性和超越方程等,solve函数用于符号代数方程求解。【调用格式】 g = solve('eq1', 'eq2' ,., 'eqn', 'var1',

30、'var2' ,., 'varn') g = solve(exp1, exp2 ,., expn, var1, var2 ,., varn) 【说明】1. 'eq1', 'eq2' ,., 'eqn'是字符串表达式的方程,或者是字符串表达式,如果它们是不含等号的字符串表达式,则相当于方程'eqi0' 2. 'var1', 'var2' ,., 'varn'是用字符串表示的方程中的变量名3. exp1, exp2 ,., expn只能是符号表达式,不能是

31、带有等号的表达式方程。4. var1, var2 ,., varn只能是符号变量。5. 返回值g是一个结构体数据,方程组的解用g.var1,g.var2,. ,g.varn表示。6. 在无法求得解析解的时候,给出数值解。 例 方程组 ,分别求其关于y,z和关于u,v,w的解>> s1=solve('u*y+v*z2+w=0','y+z+v=0','y','z'); %方程组关于的解,从结果来看方程有2组解:s1 = y: 2x1 sym z: 2x1 sym >> y=s1.y;z=s1.z; %方程组关于

32、u,v,w的解,2个方程3个变量,方程有无穷多组解,其中w为自由变量,>> s2=solve('u*y+v*z2+w=0','y+z+v=0','u','v','w'); >> u=s2.u; v=s2.v;w=s2.w;L 符号微分方程的解【调用格式】 g = dsolve('eq1', 'eq2' ,., 'eqn', 'cond1', 'cond2', . , 'condn', 'v

33、') 【说明】1. 'eq1', 'eq2' ,., 'eqn'是微分方程,只能用字符串形式。微分方程是函数必须的输入变量。2. 'cond1', 'cond2' ,., 'condn'是初始条件,也只能用字符串形式。3. 'v'定义了微分方程的独立变量名(微分方程解中的自变量名),只能用字符串形式。默认的独立变量名为t。4. 微分方程字符串中,Dny表示y的n阶导数,Dy表示y的一阶导数。5. 返回值g是一个结构体变量,要引用其成员才能得到方程的解。例 求微分方程组 的解。

34、>> s=dsolve('Dx=y,Dy=-x'); >> x=s.x x = -C1*cos(t)+C2*sin(t) >> y=s.y y = C1*sin(t)+C2*cos(t)例 求微分方程 的解y(x),初始条件为y (0) =0, y (1)= 1>> s=dsolve('x*D2y-3*Dy=x2', 'y(0)=0, y(1)=1', 'x') s = 4/3*x4-1/3*x3 例 求微分方程y”+y2=1 的解,初始条件为y (0) =0 >> y

35、= dsolve('(Dy)2 + y2 = 1','y(0) = 0') y = sin(t) -sin(t)M 积分变换MATLAB的符号计算支持积分变换,对傅氏变换、拉氏变换和Z变换都提供了相应的符号计算函数。1 傅立叶变换及其反变换【调用格式】 Fw = fourier(ft, t, w) 求时域函数ft的傅氏变换Fw ft = ifourier(Fw, w, t) 求频域函数Fw的傅立叶反变换ft 【说明】:ft是以时间t为自变量的时域函数;Fw是以角频率w为自变量的频域函数;输入参数t和w可以省略。例 求函数 的傅氏变换F (w) >>

36、syms t; >> ft= exp(-t2); >> Fw=fourier(ft) Fw = pi(1/2)*exp(-1/4*w2) 例 求函数 的傅氏变换F (w),其中x是参数。>> syms t w x; ft=exp(-(t-x)*sym('heaviside(t-x) '); >> Fw= simple(fourier(ft, t, w) %fourier(ft) 和fourier(ft, t)都会产生歧义Fw = 1/(1+i*w)/exp(i*x*w) 【说明】MATLAB的Maple提供了一些特殊函数,这些函数不是MATLAB的函数,因此不能在MATLAB中直接调用,必须用函数syms生成

温馨提示

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

评论

0/150

提交评论