《[理学]MATLAB学习课件》由会员分享,可在线阅读,更多相关《[理学]MATLAB学习课件(80页珍藏版)》请在金锄头文库上搜索。
1、第五章 Matlab 符号运算 创建符号变量 符号表达式的建立、化简和替换 符号微积分 符号方程求解 符号数学的简易绘图函数 第一节 创建符号变量一、sym函数定义符号变量 sym函数用于定义单个符号变量,使用函数sym的调用格式为: sym(x) sym(x,real) sym(x,unreal) 其中,参数real定义的变量为实型符号变量,unreal定义的是非实型符号变量。 【例5-1】 使用函数sym定义符号变量。 a=sym(a) % 定义符号变量a a =a sym(b,real) % 定义符号变量b,实型符号变量 ans =b c=sym(byebye) c =Byebye 有了
2、符号运算后,也可将数值变量向符号变量转换,见下例:【例5-2】 使用函数sym将数值矩阵转换成符号矩阵。 A=3 1.1 2;2 4 1.5;3.1 2.2 5; B=sym(A) B = 3, 11/10, 2 2, 4, 3/2 31/10, 11/5, 5由例5-2可见,将数值矩阵转换为符号矩阵时,矩阵的表示方法发生了 变化,原数值矩阵中的每一行单独用括号括了起来,而且,尽管矩阵中元素 依然以数值的形式出现,但此时却是符号变量了。二、syms函数定义符号变量除了sym函数以外,Matlab还提供了syms函数用来定义符号变量。与sym函数 最大的不同点在于,syms可以很方便地一次定义多
3、个符号变量。syms函数的调用 格式为: syms arg1 arg2 arg3 【例5-3】 使用函数syms定义多个符号变量 syms x t n who Your variables are: n t x 以上3个符号变量也可以通过sym函数来定义 x=sym(x); t=sym(t); n=sym(n); who Your variables are: n t x 变量的定义也可以通过Workspace查看,见图5-1图图5-1 从Workspace窗口查查看变变量【例5-4】 使用syms函数定义符号矩阵 syms a b c d; n=a b c d;b c d a;c d a b
4、;d a b c n = a, b, c, d b, c, d, a c, d, a, b d, a, b, c m=size(n) % size函数用于查看符号矩阵的大小 m =4 4 在这里,需要注意的是符号矩阵和数值矩阵的区别: 在Workspace窗口中,变量的图标不同,数值矩阵的图标为,符号矩阵的图 标为; 在Command Window窗口显示时,数值矩阵只显示元素的数值,而符号矩阵 的每行元素都放在一对方括号内。第二节 符号表达式的建立、化简和替换 在Matlab中,符号表达式可以通过基本赋值语句进行建立, 方法可以采用单引号或sym/syms函数定义。 【例5-5】 使用单引号
5、建立符号表达式。 y=a*x2+b=0 % 定义符号代数方程 y =a*x2+b=0 y=D2y-c*Dy+d=0 % 定义符号微分方程 y =D2y-c*Dy+d=0【例5-6】 使用sym/syms函数建立符号表达式。 f1=sym(x3+4*x2+x+3) f1 =x3+4*x2+x+3 f2=sym(a*x2+b*x+c=0) f2 =a*x2+b*x+c=0 f3=sym(a b;c d) f3 = a, b c, d syms x y; f4=sin(x)+cos(y) f4 =sin(x)+cos(y)在书写符号表达式时,需要注意以下几点: 数学符号 的书写形式为pi;虚数单位用
6、i或j表 示; 无穷大用INF或inf表示; 符号相乘必须用*连接; 指数运算以e为底的书写形式为exp(),在Matlab中,只 有求以e为底的自然对数; 表达式需写在同一行; 与数学表达式不同,Matlab的表达式中只能用小括号。 在Matlab函数嵌套调用时, 多重小括号嵌套使用,要避免出错。一、符号表达式的化简Matlab符号数学工具箱提供了化简符号表达式的各种函 数,如多项式展开(expand)、因式分解(factor)、合并同类项 (collect)、化简(simplify和simple)、分式通分(numden)以 及嵌套形式重写(horner)等。 多项式展开(expand)在
7、Matlab中,expand函数的功能是将符号表达式进行展开, 其调用格式为: R=expand(s)该函数的功能是对表达式s进行因式展开,常用于多项式、 三角函数、指数函数和对数函数。【例5-7】 展开符号表达式和。 首先在命令窗口创建符号变量。 syms x y; f1=(x+1)7; expand(f1) ans = x7+7*x6+21*x5+35*x4+35*x3+21*x2+7*x+1 f2=cos(x+y); f=expand(f1) f = cos(x)*cos(y)-sin(x)*sin(y)【例5-8】 展开符号表达式、和符号矩阵。 syms x y t b; f1=exp
8、and(x+3)*(x+t)*(y-1) f1 =x2*y-x2+x*t*y-x*t+3*x*y-3*x+3*t*y-3*t f=(x-2)2*(x+1)-x2; f2=expand(f) f2 =x3-4*x2+4 A=(x-b)2 (x+b)2;sin(x+y) cos(2*x); expand(A) ans = x2-2*b*x+b2, x2+2*b*x+b2 sin(x)*cos(y)+cos(x)*sin(y), 2*cos(x)2-11. 因式分解(factor) 函数factor的功能是将符号表达式进行因式分解, 其调用格式为: factor(s) 其中,s可以是正整数、符号整数
9、、符号表达式或 符号矩阵。当s为正整数时,因式分解的结果返回 的是s的质数分解式。在这里,我们需要注意的是, 在整数数组中,有一位元素位数超过16位时,必须 用sym函数创建该元素;当s为符号表达式时,结果 返回乘积形式。【例5-9】 因式分解整数352、整数12345678901234567890、符号表达式 以及符号矩阵。 f1=factor(sym(352) f1 =(2)5*(11) f2=factor(sym(1234567890123456789) f2 =(2)8*(3)*(11)*(146137297599841) syms a b x y f3=factor(x5-y5) f
10、3 =(x-y)*(x4+x3*y+x2*y2+x*y3+y4) f4=factor(x-b)2 x2-b*x;a2-b2 a*x-a) f4 = (x-b)2, x*(x-b) (a-b)*(a+b), a*(x-1) 可见,factor函数不仅在多项式中有着强大的分解能力,而且在正整 数质数分解中也有着广泛的应用。2. 合并同类项(collect) 符号表达式同类项合并函数collect,其调用格式有两种: (1)R=collect(s) 将表达式s中相同次幂的项合并,其中s可以是符号表 达式,也可以是符号矩阵。 (2)R=collect(s,v) 将表达式s中关于v的相同次幂项合并,v的
11、默认值是x 。【例5-10】 对符号表达式进行同类项合并。 clear % 清除内存变量 syms x y f1=(x-exp(x)*(x+y); R1=collect(f1) R1 = x2+(-exp(x)+y)*x-exp(x)*y R2=collect(f1,y) R2 = (x-exp(x)*y+(x-exp(x)*x【例5-11】 试按照不同方式合并表达式。 syms a x y f=(x2-a*exp(y)*(a*x*y+exp(2*y)*x); R1=collect(f) R1 = (a*y+exp(2*y)*x3-a*exp(y)*(a*y+exp(2*y)*x R2=col
12、lect(f,y) R2 = (x2-a*exp(y)*a*x*y+(x2-a*exp(y)*exp(2*y)*x R3=collect(f,a) R3 = -exp(y)*x*y*a2+(x3*y-exp(y)*exp(2*y)*x)*a+x3*exp(2*y)从结果可以看出,采用不同的合并条件时,同一个 符号表达式可能会得到不同的结果。因此,在实 际应用中,应根据需要选择适当的合并条件。 3. 化简(simplify和simple) 符号表达式化简的函数simplify和simple,其中函 数simplify的调用格式为: R=simplify(s) 在Matlab中,simplify函
13、数的具体功能是根据一定 规则对符号表达式进行化简。S代表符号表达式 或符号矩阵,R是化简后的结果。【例5-12】 试对表达式和进行化简。 syms t x real R1=simplify(csc(t)2-cot(t)2) R1 =1 R2=simplify(x5-1)/(x-1) R2 =x4+x3+x2+x+1函数simplify是一个强大的化简工具,它可以完成对指数、 对数、三角函数等各种数学表达式的化简。而函数simple 将化简结果及所使用的方法均列出来,这些方法中就包括 simplify。Simple的调用格式为: r=simple(s) simple函数使用不同的变换简化规则来对
14、符号表达式进行 化简,返回表达式s的最简形式。如果s是符号表达式矩阵时, 则返回表达式矩阵的最短形式,而不一定是使每一项都最 短;如果不给定输出参数r,该函数将显示所有使表达式s 最短的化简方式,并返回其中最短的一个表达式。 r,how=simple(s) 该格式不显示化简的中间结果,只是显示寻找到的最短形 式以及所有可以使用的化简方法。r表示符号表达式的结 果,how则表示具体使用的方法,表5-1给出了simple的化 简示例。表5-1 simple化简简示例符号表达式(s)化简结简结果(r)使用方法(how)cos(x)2+sin(x)21combine(trig)2*cos(x)2-sin(x)23*cos(x)2-1simplifycos(x)2-sin(x)2cos(2*x)combinecos(x)+(-sin(x)2)(1/2)cos(x)+i*sin(x)radsimpcos(x)+i*sin(x)exp(i*x)convert(exp)(x+1)*x*(x-1)x3-xcollect(x)cos(3*acos(x)4*x3-3*xexpandx3+3*x2+3*x+1(x+1)3factor由表5-1可以看出,simple的化简方法有很多, 其中, radsimp函