1、第三讲 MATLAB的 符号运算, matlab 不仅具有数值运算功能,还开发了在matlab环境下实现符号计算的工具包Symbolic Math Toolbox,符号运算的功能,符号表达式、符号矩阵的创建符号线性代数因式分解、展开和简化符号代数方程求解符号微积分符号微分方程,一、符号运算的基本操作,1. 什么是符号运算 与数值运算的区别 数值运算中必须先对变量赋值, 然后才能参与运算。 符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。,2. 符号变量与符号表达式,MATLAB提供了两个建立符号对象的函数:sym和 syms,两个函数的用法不同。sym函数 sym函数用来建立单个
2、符号量,一般调用格式为:符号量名=sym(符号字符串) 该函数可以建立一个符号量,符号字符串可以是常 量、变量、函数或表达式。,建立符号变量,syms 函数 MATLAB提供了另一个函数syms,一次可以定义多个符号变量。 syms函数的一般调用格式为: syms 符号变量名1 符号变量名2 符号变量名n,Note:用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。,建立符号表达式,含有符号对象的表达式称为符号表达式。建立符号表达式有以下3种方法:利用单引号来生成符号表达式。用sym函数建立符号表达式。使用已经定义的符号变量组成符号表达式。, y=sym(
3、2*sin(x)*cos(x) y =2*sin(x)*cos(x) z=2*sin(x)*cos(x)z =2*sin(x)*cos(x),例、,例1: 把字符表达式转化为符号变量。, y=sym(2*sin(x)*cos(x) 把字符表达式转化为符号变量y =2*sin(x)*cos(x) y=simple(y) 把y符号表达式化成最简形式y =sin(2*x),例2: 求矩阵 的行列式值、逆和特征根。, syms a11 a12 a21 a22; A=a11,a12;a21,a22A = a11, a12 a21, a22 DA=det(A),IA=inv(A),EA=eig(A)DA
4、=a11*a22-a12*a21,IA = a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21) -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)EA = 1/2*a11+1/2*a22+1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2) 1/2*a11+1/2*a22-1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2),Note:采用syms a11 a12 a21 a21定义符号变量时,变量名之间只能用“空格符”隔离,不能采用逗号或分号。,例3: 验证
5、积分: 。, syms A t tao w; f=int(A*exp(-i*w*t),t,-tao/2,tao/2); f =i*A*(exp(-1/2*i*tao*w)-exp(1/2*i*tao*w)/w F=simple(f)F =2*A*sin(1/2*tao*w)/w,数值矩阵A=1,2;3,4A=a,b;c,d 不识别 1) 用matlab函数sym创建矩阵命令格式: A=sym( ) 符号矩阵内容同数值矩阵 需用sym指令定义 需用 标识,3. 符号矩阵的创建,例:A = sym(a , 2*b ; 3*a , 0)A = a, 2*b3*a, 0这就完成了一个符号矩阵的创建。,
6、Note:符号矩阵的每一行的两端都有方括号,这是与 matlab数值矩阵的一个重要区别。,2)用字符串直接创建矩阵, A = a,2*b; 3*a, 0 A = a,2*b 3*a, 0 B=a,2*b;3*a,0 ? Undefined function or variable a.,数值运算中,所有矩阵运算操作指令都比 较直观、简单。例如:a=b+c; a=a*b ; A=2*a2+3*a-5等。而符号运算就不同了,所有涉及符号运算 的操作都可以用专用函数来进行。这些函数作用于 符号矩阵时,是分别作用于矩阵的每一个元素。,二、符号运算,1. 符号矩阵运算,符号矩阵运算的函数: symadd
7、(a,b) 符号矩阵的加 symsub(a,b) 符号矩阵的减 symmul(a,b) 符号矩阵的乘 symdiv(a,b) 符号矩阵的除 sympow(a,b) 符号矩阵的幂运算 symop(a,b) 符号矩阵的综合运算,例1: f= 2*x2+3*x-5; g= x2+x-7; 法: h= symadd(f,g) % 符号矩阵的加法运算 h= 3*x2+4*x-12,法: syms x f=2*x2+3*x-5; g= x2+x-7; h=f+g h = 3*x2+4*x-12,例2: f=cos(x);g= sin(2*x); 法: symop(f,/,g,+,f,*,g) % 符号矩阵
8、的综合运算 ans = cos(x)/sin(2*x)+cos(x)*sin(2*x) 法: syms x f=cos(x);g=sin(2*x); f/g+f*g ans = cos(x)/sin(x)+cos(x)*sin(x),符号一些特殊运算函数: symsize 求符号矩阵维数 charploy 特征多项式 determ 符号矩阵行列式的值 eigensys 特征值和特征向量 inverse 逆矩阵 transpose 矩阵的转置 jordan 约当标准型 simple 符号矩阵简化,diff(f) 对f表达式的缺省变量求微分 diff(f,v) 对f表达式的指定变量v求微分 dif
9、f(f,v,n) 对f表达式的指定变量v求n阶微分 int(f) 对f表达式的缺省变量求积分 int(f,v) 对f表达式的v变量求积分 int(f,v,a,b) 对f表达式的v变量在(a,b)区间求定积分,2. 符号微积分与积分变换,微积分:,int(被积表达式,积分变量,积分上限, 积分下限) 定积分,缺省时为不定积分,积分变换: fourier(f) 付氏变换 ifourier(f) 反付氏变换 ztrans(f) Z变换 iztrans(f) 反Z变换 laplace(f) 拉氏变换 ilaplace(f) 反拉氏变换,例:, syms a t x;f=a,t3;t*cos(x),lo
10、g(x); df=diff(f)df = 0, 0 -t*sin(x), 1/x dfdt2=diff(f,t,2)dfdt2 = 0, 6*t 0, 0, dfdxdt=diff(diff(f,x),t)dfdxdt = 0, 0 -sin(x), 0,例2、计算二重不定积分, F=int(int(x*exp(-x*y),x),y)F =1/y*exp(-x*y),例3、,1) 求fourier变换 syms t w ;ut=sym(Heaviside(t); uw=fourier(ut)uw =pi*Dirac(w)-i/w,2) 求fourier反变换验证 Ut=ifourier(uw,
11、w,t)Ut =1/2+1/2*Heaviside(t)-1/2*Heaviside(-t),例4、, syms t s; syms a b positive; %对常数进行限定性设置 Dt=sym(Dirac(t-a); Ut=sym(Heaviside(t-b); Ft=Dt,Ut;exp(-a*t)*sin(b*t),t2*exp(-t); Fs=laplace(Ft,t,s)Fs = exp(-a*s), exp(-b*s)/s b/(s+a)2+b2), 2/(s+1)3,3. 符号代数方程求解,Matlab符号运算能够解一般的线性方程、非线性方程及一般的代数方程、代数方程组。 命令
12、格式: solve(f) 求一个方程的解 solve(f1,f2, fn) 求n个方程的解, f=a*x2+b*x+c; 利用单引号来生成符号表达式。 solve(f) 对缺省变量x求解ans = 1/2/a*(-b+(b2-4*a*c)(1/2) 1/2/a*(-b-(b2-4*a*c)(1/2) solve(f , b ) %对指定变量b求解 ans = -(a*x2+c)/x,计算机 格式,一般格式,例1、 f = ax2+bx+c 求解。, f1=solve(cos(x)=sin(x),f1 =1/4*pi f2=solve(tan(2*x)=sin(x)f2 = 0 pi atan(
13、1/2*(-2*3(1/2)(1/2),1/2+1/2*3(1/2) atan(-1/2*(-2*3(1/2)(1/2),1/2+1/2*3(1/2) atan(1/2*2(1/2)*3(1/4)/(1/2-1/2*3(1/2)+pi -atan(1/2*2(1/2)*3(1/4)/(1/2-1/2*3(1/2)-pi,例2、符号方程cos(x)=sin(x) , tan(2*x)=sin(x)求解,法1) f=solve(x+y+z=1,x-y+z=2,2*x-y-z=1) f = x: 1x1 symy: 1x1 symz: 1x1 sym % f是一个构架数组,若要显示结果,必须采用f.
14、x,f.y,f.z的援引 方式。 f.x ans =2/3, f.yans =-1/2, f.zans =5/6,法2) x,y,z=solve(x+y+z=1,x-y+z=2,2*x-y-z=1)x = 2/3y =-1/2z =5/6,符号微分方程求解函数:dsolve 命令格式:dsolve(f,g) f 微分方程,可多至12个微分方程的求解; g为初始条件 默认自变量为 x,可任意指定自变量t, u等 微分方程的各阶导数项以大写字母D表示,4、符号微分方程求解 用一个函数可以方便地得到微分方程的符号解,y1,y2=dsolve(x1,x2,xn) 返回微分方程的解,例1., S=dso
15、lve(Dx=y,Dy=-x) 输出S是结构对象 S = x: 1x1 symy: 1x1 sym S.xans =cos(t)*C1+sin(t)*C2 通解 S.yans =-sin(t)*C1+cos(t)*C2,例2., y=dsolve(D2y+2*Dy+2*y=0,y(0)=1,Dy(0)=0)y =exp(-t)*sin(t)+exp(-t)*cos(t) ezplot(y),grid 方程解y(t)的时间曲线图,y是符号对象,ezplot:一元函数绘图指令 ezplot(F) 在-2pi,2pi自变量范围中,绘制F曲线 ezplot(F,xmin,xmax) 在指定自变量范围绘制F曲线,注:ezplot指令,对线没有色彩、线型控制力,不允许同时绘制多条曲线。,例:绘制 和其积分,在0,4pi区间的图形。,