《新编MATLAB自学一本通》课件第9章 符号计算_第1页
《新编MATLAB自学一本通》课件第9章 符号计算_第2页
《新编MATLAB自学一本通》课件第9章 符号计算_第3页
《新编MATLAB自学一本通》课件第9章 符号计算_第4页
《新编MATLAB自学一本通》课件第9章 符号计算_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2025/4/30主要内容符号对象和符号表达式

符号微积分符号方程求解

2025/4/30符号计算特点1.计算精确2.可应用范围有限

符号计算基于数学公式、定理并通过一系列推理、演绎得到方程的解或者数学表达式的值。对操作对象不进行离散化和近似化处理。

实际科研和生产中遇到的问题绝大多数都无法获得精确的符号解,这时我们不得不求助数值计算。3.对待符号计算态度

用其来完成公式推导和解决简单的对计算时效性要求不高的问题,综合符号计算和数值计算各自的优点,视问题特点混合使用符号计算和数值计算。2025/4/30第一节符号对象和符号表达式

2025/4/30一、符号对象的创建

运行下列代码,体会符号对象的创建方法和特点。>>a=sym('5');>>b=sym('b');>>symscde;>>whos

从以上代码运行结果可以看出,要生成一个符号对象,可以利用

sym以及syms函数,sym可以生成单个符号对象,而syms可以生成多个符号对象,符号对象的运算是完全精确的,没有舍入误差。2025/4/30二、符号表达式确定一个符号表达式中的符号变量可以用findsym函数:

创建了符号对象,我们就可以创建各种各样的符号表达式。譬如,创建符号变量a,b,c后如下都是符号表达式: z1=a+b+c; z2=sin(a+b+c); z3=a^b*gamma(c); findsym(expr) findsym(expr,n)

第一种用法是确认表达式expr中所有自由符号变量,第二种用法是从表达式expr中确认出距离x最近的n个符号变量。这个最近距离指的是变量第一个字符和x的ASCII码值之差的绝对值,差绝对值相同时,ASCII码值大的字符优先。

2025/4/30三、运算符 MATLAB采用了重载(Overload)技术,使得用来构成符号表达式的运算符,无论在拼写还是在使用方法上,都与数值计算中的算符完全相同。譬如“+”,“-”,“*”,“\”,“/”,“^”等 符号对象的比较中,没有“大于”、“大于等于”,“小于”,“小于等于”的概念,而只有是否“等于”的概念,即“==”与“~=”。如果要判断两个符号数值的大小一般来说有两种办法,一种是利用double将其转化成数值型的,另一种是利用sort+“==”或“~=”,譬如下面代码:2025/4/30三、运算符>>a=sym('2');>>b=sym('3');>>double(a)<double(b)ans=1>>sa=sort([b,a])sa=[2,3]>>a==sa(1)ans=1

从上述代码可以看出,上述两种方法都间接实现了判断大小。2025/4/30四、符号计算与数值计算结合利用符号计算得到结果时,有时需要将其转化成数值型的以便后续数值计算利用。通过符号计算得到一个表达式时,想把它转化成关于其中某个变量的数值函数。

>>formatlong>>a=vpa(pi,30)a=3.14159265358979323846264338328>>a1=double(a)a1=3.141592653589793>>a2=eval(a)a2=3.1415926535897932025/4/30四、符号计算与数值计算结合>>a3=single(a)a3=3.1415927>>a4=int8(a)a4=3>>whosNameSizeBytesClassAttributesa1x1118syma11x18doublea21x18doublea31x14singlea41x11int8

上述是对符号数值对象向数值对象转化的讨论,很多时候我们需要求符号表达式在不同的参数值下的具体值,说通俗点就是如何把具体的参数代入符号表达式。这时候可以利用eval和subs函数或者转化成匿名函数2025/4/30四、符号计算与数值计算结合【例9.1-2】已知 ,求其二阶导数在 处的值。>>symsxf=sin(x^x/x^2/exp(x));d2f=diff(f,x,2);%利用符号计算求f(x)的二阶导数>>%第一种方法:利用subs函数求d2f在x=1时的值。d2fx1=subs(d2f,x,1)d2fx1=2.20822025/4/30四、符号计算与数值计算结合>>%第二种方法:x赋值1后,利用eval函数求d2f在x=1时的值x=1;eval(d2f)ans=2.2082>>%第三种方法:将d2f转化成匿名函数,求其在x=1时的值F=eval(['@(x)',vectorize(char(d2f))]);F(1)ans=2.2082

2025/4/30第二节符号微积分

2025/4/30一、极限、导数和级数的符号计算

1.极限【例9.2-1】求下列极限:

>>symsn >>limit(n^(n+1/2)/(exp(n)*gamma(n+1)),n,inf) ans= 1/(2*pi)^(1/2)

MATLAB中gamma函数即数学上的gamma函数,有如下性质:gamma(n+1)=n!上述极限即著名的stirling公式,当n趋近无穷时:2025/4/30一、极限、导数和级数的符号计算

2.求导数【例9.2-2】 ,求 。本例目的:演示求导运算是对矩阵元素逐个进行的。>>symsatx;f=[a,t*log(x);sqrt(t),x^2+3*x];dfdt=diff(f,t)%矩阵f对t的一阶导数dfdx2=diff(f,2)%矩阵f对x的二阶导数,由于是x,而f中含有x变量,故x可以省略dfdtdx=diff(diff(f,t),x)%求二阶混合导数2025/4/30一、极限、导数和级数的符号计算

dfdt=[0,log(x)][1/(2*t^(1/2)),0]dfdx2=[0,-t/x^2][0,2]dfdtdx=[0,1/x][0,0]Jacobian矩阵求法,见例【例9.2-3】。2025/4/30一、极限、导数和级数的符号计算

3.求级数【例9.2-4】求下列无穷级数: ,>>symskf1=symsum((k-2)/2^k,k,3,inf)A=[1/(2*k+1)^2,(-1)^k/3^k];f2=symsum(A,k,1,inf)

f1=1/2f2=[pi^2/8-1,-1/4]

2025/4/30二、符号积分计算

与数值积分相比,符号积分具有指令简单,占用机时长等特点,因此一般复杂的积分运算都采用数值积分函数来计算。但某些情况下,特别是一些简单的上下限为函数的多重积分,用符号积分计算会比调用数值积分函数计算简单方便许多。求积分的指令如下:

intf=int(f,v) %求以v为自变量的函数f的不定积分

intf=int(f,v,a,b) %求以v为自变量的函数f从a到b的定积分 上述调用格式中v可以省略,v省略时,积分将针对findsym确定的变量来进行。a,b作为积分上下限,实际输入中可以为数值符号或者字母符号。

2025/4/30二、符号积分计算

【例9.2-5】求>>symsx>>s=int(1/(x*sqrt(x^2+1)),x)s=log(x)-log((x^2+1)^(1/2)+1)【例9.2-6】求 关于u的不定积分以及不指定积分变量情况下的不定积分。

2025/4/30二、符号积分计算

>>symsxuvf=[x*vv^2;sin(u)*vcos(u*x)];intfu=int(f,u)intf=int(f)

intfu=[u*v*x,u*v^2][-v*cos(u),sin(u*x)/x]

intf=[(v*x^2)/2,v^2*x][v*x*sin(u),sin(u*x)/u]从上面结果可以看出,在不指定积分变量情况下,int默认是对x进行积分。

2025/4/30二、符号积分计算

一些简单的一般区域上的多重积分也可以利用int函数来计算,如下:【例9.2-7】求积分:

>>symsxyz>>Result=int(int(int((x+y)/z,z,x*y,2*x*y),y,x,2*x),1,2)Result=(35*log(2))/6%符号积分结果>>double(Result)%转化成数值ans=4.043358553266348

2025/4/30第三节符号方程求解

2025/4/30一、符号代数方程求解【例9.3-1】求解如下方程:

,>>x=solve('2*sin(3*x-pi/4)=1')%解第一个方程x=(5*pi)/36(13*pi)/36>>x=solve('x+x*exp(x)-10')%解第二个方程x=matrix([[1.6335061701558463841931651789789]])>>double(x)%将符号解形式抓化成数值解ans=1.6335061701558462025/4/30一、符号代数方程求解【例9.3-2】求解如下方程组:>>[xy]=solve('1/x^3+1/y^3-28','1/x+1/y-4','x,y')x=11/3y=1/31

2025/4/30一、符号代数方程求解有的时候直接按照给出的方程组描述待求解的方程组时,solve会给不出解,这时候对原方程组进行变形往往会有截然不同的结果【例9.3-3】求下面方程组的解:直接编写代码如下无法求解:>>[xy]=solve('x+y-98','x^(1/3)+y^(1/3)-2','x,y')Warning:Explicitsolutioncouldnotbefound.>Insolveat98x=[emptysym]y=[]2025/4/30这时如果我们将原来的问题稍作变形,令 ,,则可以得到下面的求解代码:>>[uv]=solve('u^3+v^3-98','u+v-2','u,v')u=5-3v=-35>>x=u.^3x=125-27>>y=v.^3y=-27125

2025/4/30二、符号常微分方程求解

1.R2008b之前的dsolve函数 MATLABR2008a是MATLAB采用Maple符号计算内核的最后一个版本,以这个版本的dsolve为例,来介绍Maple内核下dsolve函数的用法。语法规则如下:

r=dsolve('eq1,eq2,...','cond1,con

温馨提示

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

评论

0/150

提交评论