第三讲-MATLAB的符号运算课件_第1页
第三讲-MATLAB的符号运算课件_第2页
第三讲-MATLAB的符号运算课件_第3页
第三讲-MATLAB的符号运算课件_第4页
第三讲-MATLAB的符号运算课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

6/8/20231第三讲MATLAB的符号运算——Matlab

不仅具有数值运算功能,还开发了在Matlab环境下实现符号计算的工具包SymbolicMathToolbox。符号工具箱在Matlab中引入新的数据类型——符号对象sym。6/8/20232符号运算的功能符号表达式、符号矩阵的创建因式分解、展开和化简符号代数方程求解符号微积分符号微分方程6/8/20233在数值计算中,包括输入、输出及中间过程,变量都是数值变量,而在符号运算中,变量都以字符形式保存和运算,即使是数字也被当作变量来处理。符号表达式包括符号函数和符号方程,他们创建的方式是一样的,最简单易用的创建方法和MATLAB字符串变量的生成方法相同。6/8/20234

与数值运算的区别

※数值运算中必须先对变量赋值,然后才能参与运算。

※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。6/8/202353.1符号表达式的生成创建符号函数

f=‘log(x)’创建符号方程equation=‘a*x^2+b*x+c=0’创建符号微分方程Diffeq=‘Dy-y=x’注:由这种方法创建的符号表达式对空格是很敏感的,因此不要在字符间乱加空格符.符号表达式在MATLAB被看作是1ⅹ1阶的符号矩阵,因此可用sym命令来创建.f——符号变量名log(x)——符号表达式''——符号标识符号表达式一定要用''

单引号括起来matlab才能识别。6/8/20236f=sym(‘sin(x)’)ff=sym(‘sin(x)^2=0’)另外一种符号函数的创建方法为syms命令SymxF=sin(x)+cos(x)symsabc%syms可同时定义多个变量6/8/202373.2符号和数值之间的转化有时符号运算的目的是为了得到精确的数值解,这样就需要对得到的解析解进行数值转换。在symbolic中有三种不同的算术运算:数值类型

matlab的浮点算术运算有理数类型

maple的精确符号运算vpa类型

maple的任意精度算术运算6/8/20238浮点算术运算1/2+1/3

--(定义输出格式formatlong)ans=0.83333333333333符号运算sym(1/2)+(1/3)ans=5/6--精确解6/8/20239解析解(精确解)进行数值转化的两个函数.

digits(n)——函数设置有效个数为n的近似解精度.vpa(x,n)——符号表达式在digits(n)精度下的数值解.digits(25)vpa(1/2+1/3)ans=.83333333333333333333333336/8/202310numeric(s):将不含自由变量的符号表达式转换为数值形式,其效果double(sym(s))相同.(旧版中的数值转化函数).6/8/202311vpa(5/6,40)

ans=.8333333333333333333333333333333333333333a=sym('[1/4,exp(1);log(3),3/7]')a=[1/4,exp(1)][log(3),3/7]vpa(a,10)ans=[.2500000000,2.718281828][1.098612289,.4285714286]6/8/2023123.2符号矩阵的创建数值矩阵A=[1,2;3,4]A=[a,b;c,d]——不识别用matlab函数sym创建矩阵(symbolic的缩写)命令格式:A=sym('[]')

※符号矩阵内容同数值矩阵

※需用sym指令定义

※需用''标识6/8/202313例如:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]

这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方括号,这是与matlab数值矩阵的一个重要区别。6/8/202314用字符串直接创建矩阵

模仿matlab数值矩阵的创建方法需保证同一列中各元素字符串有相同的长度。例:A=['[a,2*b]';'[3*a,0]']A=[a,2*b][3*a,0]6/8/202315例:创建符号矩阵symsabcdefghA=[ab;cd],B=[ef;gh],C=A*BD=sym('[1/(x+t),sin(x);1,exp(x)]')B=[e,f][g,h]A=[a,b][c,d]C=[a*e+b*g,a*f+b*h][c*e+d*g,c*f+d*h]D=[1/(x+t),sin(x)][1,exp(x)]6/8/202316符号矩阵的修改a.直接修改可用、键找到所要修改的矩阵,直接修改b.指令修改

①A(行标,列标)=符号表达式

②A1=subs(S,‘new',‘old')6/8/202317例如:A=[a,2*b][3*a,0]A1=subs(A,'c','b')A2=[a,2*c][3*a,4*c]

A(2,2)='4*b'A=[a,2*b][3*a,4*b]6/8/202318符号矩阵与数值矩阵的转换将数值矩阵转化为符号矩阵函数调用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]6/8/202319将符号矩阵转化为数值矩阵函数调用格式:double(A)、int8(A)、int16(A)A=[1/3,5/2][10/7,2/5]double(A)int8(A)ans

=ans=0.33332.5000031.42860.4000106/8/202320二、符号运算1、符号矩阵基本运算数值运算中,所有矩阵运算操作指令都比较直观、简单。例如:a=b+c;

a=a*b;A=2*a^2+3*a-5等。

符号运算也是采用与数值运算相同的运算符。6/8/202321符号矩阵的基本运算符号矩阵的基本运算与数值矩阵的基本运算相类似。1)基本运算符:+、-、*、\、/、^、.*、.\、./、.^、’

、.’2)三角函数与反三角函数:sin、cos、tan、……3)指数、对数函数:sqrt、exp、log、……4)复数函数:real、imag、conj、abs5)矩阵函数:det、inv、rank、转

……(没有norm)6)矩阵元素的抽取:diag、tril、triu6/8/202322例1:f=sym(‘2*x^2+3*x-5’);

g=sym(‘x^2+x-7’);

h=f+gh=3*x^2+4*x-12例2:f=sym('cos(x)');g=sym('sin(2*x)');

f/g+f*g

ans=cos(x)/sin(2*x)+cos(x)*sin(2*x)6/8/202323例1:f=2*x^2+3*x-5;g=x^2+x-7;>>symsx>>f=2*x^2+3*x-5;g=x^2+x-7;>>h=f+gh=3*x^2+4*x-12例2:f=cos(x);g=sin(2*x);>>symsx>>f=cos(x);g=sin(2*x);>>f/g+f*gans=cos(x)/sin(x)+cos(x)*sin(x)

6/8/202324例3.71符号矩阵的基本操作和运算x=reshape(sym(0:3),2,2);symst;y=x.^2,z=x*x,w=inv(z),w([24])=0,wt=expm(w*t)symsabc;t=[ab*2c+3;456;cba],sum(t)reshape:符号矩阵的变形;expm:符号矩阵的幂运算;sum:符号矩阵按列求和6/8/2023252符号矩阵其它运算:1.r=collect(S,v)合并同类项,S是符号表达式,v是变量或表达式,r是合并同类项后的结果,将符号表达式中的各元素的v的同幂项系数合并。r=collect(S)对由findsym函数返回的默认变量进行同类项合并。6/8/202326例1.按不同的方式合并同幂项EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');expr1=collect(EXPR)expr2=collect(EXPR,'exp(-t)')2.factor(S)符号计算的因式分解,S是待分解的符号多项式例2.factor指令的使用(1)除x外不含其他自由变量的情况(2)含其他自由变量的情况之一

symsax;f2=x^2-a^2;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f2)factor(f1)(3)对正整数的质数分解,若正整数数大于252,则用factor(sym(‘N’))factor(1025),factor(sym(‘12345678901234567890’),6/8/2023273.expand(S)对符号多项式或函数S进行展开例:symsxy;expand((x+1)^3)expand(sin(x+y))4.r=simple(S)或r=simplify(S)对符号表达式S进行化简例3.简化(1)运用simplify简化

symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);sfy1=simplify(f),sfy1=simplify(sfy1)(2)运用simple简化

g1=simple(f),g2=simple(g1)说明:simple给出的简化式比simplify给出的更短6/8/202328例4.简化ff=cos(x)+sqrt(-sin(x)^2);ssfy1=simplify(ff),ssfy2=simplify(ssfy1)

gg1=simple(ff),gg2=simple(gg1)5.subs(S,old,new)把符号变量中的变量old用new代替,new可以是一个符号,也可以是具体的数例5.用简单的算例演示subs的置换规则(1)产生符号函数(4)双精度数值置换

symsax;f3=subs(f,{a,x},{2,pi/3})f=a*sin(x)+5;(2)符号变量置换(5)数值数组置换之一f1=subs(f,‘sin(x)’,sym(‘y’))f4=subs(subs(f,a,2),x,0:pi/6:pi)(3)符号常数置换(6)数值数组置换之二f2=subs(f,{a,x},{2,sym(pi/3)})f5=subs(f,{a,x},{0:6,0:pi/6:pi})6/8/202329例:>>symsxy>>f=2*x+y;>>x=3,y=4;>>subs(f)>>subs(f,x,’a’)>>symsxyab>>f=2*x+y;>>subs(f,[x,y],[3,4])>>subs(f,{x,y},{3,4})>>subs(f,x,[1:3])>>subs(f,{x,y},{[1:3],[5:7]})

>>subs(f,{x,y},{a+b,a-b})>>subs(f,{x,y},{x+y,x-y})ans=10ans=2*a+yans=10ans=[2+y,4+y,6+y]ans=[71013]ans=3*a+b?6/8/2023305.符号表达式的”秦九昭型”重写horner(f):把多项式分解成嵌套形式;horner(x^3-6*x^2+11*x-6)Ans=x*(x*(x-6)+11)-66.分式通分[n,d]=numden(EXPR):提取表达式EXPR的最小分母公因式d和相应的分子多项式n;[n,d]=numden(x/y+y/x)n=x^2+y^2d=y*x6/8/202331(二)导数、极值和积分、Taylor公式及MATLAB中的实现1.极限运算命令功能limit(f,x,a)计算limit(f,x,inf)计算limit(f,x,a,'right')计算单侧极限limit(f,x,a,'left')计算单侧极限注意:在左右极限不相等或左右极限有一个不存在时,MATLAB的默认状态是求右极限。6/8/202332例8.求极限与极限

symsx;y1=(1+4*x)^(1/x);y2=(exp(x)-1)/x;limit(y1,x,0)limit(y2,x,0)例9.求极限

symsx;y=sqrt(x)-2^(-1/x);limit(y,x,0,'right')2.求导运算(1)一元函数的求导

diff(f)diff(f,n)例10.求函数的二阶导数

symsx;f=3*x^3+5*x+1;diff(f,2)例11.设,求

symsx;y=3*x^2-2*x+1;B=diff(y),x=1;

eval(B)

6/8/202333(2)多元函数的偏导数

diff(f,xi)diff(f,xi,n)例12.求关于x的偏导数。

symsxy;z=x^2*sin(2*y);B=diff(z,x)3.积分运算(1)一元函数的不定积分

int(f)求函数f对默认变量的不定积分,用于函数只有一个变量的情况

int(f,v)求符号函数f对变量v的不定积分例13.计算

symsx;y=1/(sin(x)^2*cos(x)^2);

int(y)pretty(int(y))例14.计算

symsxz;B=int(x/(1+z^2),z)

6/8/202334(2)一元函数的定积分

int(f,x,a,b)用微积分基本公式计算定积分例15.求

symsx;y=(x^2+sin(x))/(1+x^2);

int(y,x,-1,1)(3)多重积分运算

int(int(f,y),x)计算不定积分

int(int(f,y,c,d),x,a,b)计算不定积分例16.计算

symsxy;

int(int(x^2+y^2+1,y,x,x+1),x,0,1)6/8/2023354.函数的Taylor展开

taylor(f)将函数f展开成默认变量的6阶麦克劳林(Maclaurin)

公式

taylor(f,n)将函数f展开成默认变量的n阶麦克劳林(Maclaurin)

公式

taylor(f,n,v,a)将函数f(v)在v=a处展开成n阶Taylor公式例17.将函数展开为x的6阶麦克劳林(Maclaurin)公式

symsx;f=x*atan(x)-log(sqrt(1+x^2));

taylor(f)例18.将函数展开为关于(x-2)的最高次为4的幂级数

symsx;f=1/x^2;

taylor(f,4,x,2);pretty(taylor(f,4,x,2))6/8/202336(三)符号代数方程求解

matlab符号运算能够解一般的线性方程、非线性方程及一般的代数方程、代数方程组。当方程组不存在符号解时,又无其他自由参数,则给出数值解。命令格式:solve(f)——求一个方程的解solve(f1,f2,…fn)——求n个方程的解6/8/202337

例1.f=ax2+bx+c求解f='a*x^2+b*x+c';solve(f)——对缺省变量x求解ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]计算机格式一般格式6/8/202338

solve(f,'b')——对指定变量b求解

ans=

-(a*x^2+c)/x例2.符号方程cos(x)=sin(x)

tan(2*x)=sin(x)求解

f1=solve('cos(x)=sin(x)'), f1= 1/4*pi6/8/202339f2=solve('tan(2*x)=sin(x)')f2= [0][pi][atan(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]

6/8/202340例3.解方程组

x+y+z=1

x-y+z=22x-y-z=1g1='x+y+z=1',g2='x-y+z=2',g3='2*x-y-z=1'f=solve(g1,g2,g3)或者f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')6/8/202341f=x:[1x1sym] f.x

ans=2/3 y:[1x1sym] f.y

ans=-1/2z:[1x1sym] f.z

ans=5/6

[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')x=2/3y=-1/2z=5/66/8/202342(四).

符号微分方程求解

——用一个函数可以方便地得到微分方程的符号解符号微分方程求解指令:dsolve命令格式:dsolve(f,g)f——微分方程,可多至12个微分方程的求解;g为初始条件默认自变量为‘t',可任意指定自变量‘x','u

温馨提示

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

评论

0/150

提交评论