matlab数值分析第四章.ppt
《matlab数值分析第四章.ppt》由会员分享,可在线阅读,更多相关《matlab数值分析第四章.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 方程求根4.7 fzerotx,feval4.8 fzerogui4.9 寻求函数为某个值的解和 反向插值4.10 最优化和fmintx4.7 fzerotx,feval 在MATLAB中函数fzero可实现zeroin算法 fzero函数除了基本算法外,还包括一下四项功能:1、在它开始的部分,使用一个输入的初始估计值,并寻找使函数正负号发生变化的一个区间;2、由函数f(x)返回的值将被检验,是否是无穷大、NaN(Not a Number的缩写,NaN是一个预定义的常量,表示“不明确的数值结果”)、或者复数;3、可以改变默认的收敛阈值;4、也可以要求得到更多的输出,例如调用函数求值的次
2、数。随本书一起的zeroin算法的版本是fzerotx,它由fzero简化而来,去掉了大多数附带的功能,而保留了zeroin主要的用途。第一类的零阶贝塞尔函数J0(x)第一类贝塞尔函数(Bessel function of the first kind),又称贝塞尔函数(Bessel function),简称为J函数,记作J。第一类阶贝塞尔函数J(x)是贝塞尔方程当为整数或非负时的解,须满足在x=0 时有限。另一种定义方法是通过它在x=0 点的泰勒级数展开(或者更一般地通过幂级数展开,这适用于为非整数):=0时,上式中(z)为函数(它可视为阶乘函数向非整型自变量的推广)。下图是0阶、1阶和2阶
3、的贝塞尔函数J(x)的图像=(0,1,2)第一类贝塞尔函数的形状大致与按速率 衰减的正弦或余弦函数类似,但它们的零点并不是周期性的,另外随着x的增加,零点的间隔会越来越接近周期性。用第一类的零阶贝塞尔函数J0(x)说明fzerotx是怎样工作的。J0(x)可通过MATLAB命令besselj(0,x)得到。运行如下程序,就能在MATLAB中得到第一类的零阶贝塞尔函数J0(x)的图像。x=0:pi/50:10*pi;y=besselj(0,x);plot(x,y,-)下面的程序能求出J0(x)的前10个零解,并画出图4-2(除了图中红色的x,后面将加上)。bessj0=inline(bessel
4、j(0,x);for n=1:10 z(n)=fzerotx(bessj0,(n-1)n*pi);end 图4-2 x=0:pi/50:10*pi;y=bessj0(x);plot(z,zeros(1,10),o,x,y,-)line(0 10*pi,0 0,color,black)axis(0 10*pi-0.5 1.0)从图中可以看出,J0(x)的图形很像是cos(x)的幅值和频率经过调制后的版本,相邻两个零解的距离近似等于。函数fzerotx有两个输入参数:第一个参数指定要计算零解的函数F(x),第二个参数指定初始的搜索区间a,b。以另一个函数为参数的函数,fzerotx也是MATLAB
5、函数的函数的例子,ezpot是另外一个例子。本书的其他章第6章,数值积分;第7章,常微分方程;甚至第9章,随机数中介绍的名字含“tx”和“gui”的M文件也是函数的函数。一个函数作为参数传递给另一个函数,可采用的方式有以下几种:函数句柄,内嵌对象,匿名函数。函数句柄 定义:在一个内部函数或定义于M文件的函数的名字前面加一个符号,下面是几个例子:cos humps bessj0 其中bessj0.m是一个含两行代码的M文件。function y=bessj0(x)y=besselj(0,x)这样,这些句柄就可以用作函数的函数输入参数 z=fzerotx(bessj0,0,pi)注意besselj
6、也是一个合法的函数句柄,只是它对应一个带两个输入参数的函数。内嵌对象 定义:内嵌对象是一种定义简单函数的方法,它不需要再生成新的文件。下面是几个例子:F=inline(cos(pi*t)F=inline(z3-2*z-5)F=inline(besselj(0,x)内嵌对象可以用作函数的函数的输入参数,就像 z=fzerotx(F,0,pi)这么使用。内嵌对象也可用来直接计算函数的值,下面是一个例子。residual=F(z)匿名函数 定义:类似(arguments)expression的结构定义了函数句柄,但没有给它一个名字,所以称为匿名函数。从MATLAB第7版开始,内嵌对象将被匿名函数这个
7、更强大的结构代替。在MATLAB第7版中,仍允许使用内嵌对象,但推荐使用匿名函数,因为它能生成更高效率的程序代码。上面的一些例子变为 F=(t)cos(pi*t)F=(z)z3-2*z-5 F=(x)besselj(0,x)M文件、内嵌对象和匿名函数,可以定义超过一个输入参数的函数。在本节讨论的问题中,这些附加参数的值可以通过fzerotx传递给目标函数。这些值在函数求根的迭代过程中保持不变,因此我们可以寻找函数值为特定的y时x的解,而不仅仅是求函数值为零的解。例如,考虑方程 J0(在MATLAB第6版中,定义一个带两个或三个参数的内嵌对象。F=inline(besselj(0,x)-y,x,
8、y)或 B=inline(besselj(n,x)-y,x,n,y)在MATLAB第7版中,定义一个带两个或三个参数的匿名函数。F=(x,y)besselj(0,x)-y 或 B=(x,n,y)besselj(n,x)-y 然后,执行 xi=fzerotx(F,0,2,.5)或xi=fzerotx(B,0,2,0,.5)得到结果为 xi=varargin可以看做“Variable length input argument list”的缩写。在matlab中,varargin提供了一种函数可变参数列表机制。就是说,使用了“可变参数列表机制”的函数允许调用者调用该函数时根据需要来改变输入参数的个
9、数。在图4-2中,用x标记了上述解对应的点(,J0()。在MATLAB第6版中,可以使用feval对函数参数求值。表达式 feval(F,x,.)等价于F(x,.)它们的区别在于,使用feval时,允许F作为一个被传递来的参数。在MATLAB第7版中,feval就不再需要了。fzerotx程序开始的一段注释内容如下:第一段代码对定义搜索区间的变量a、b和c初始化,在初始区间的端点处对函数F求值。下面是主循环的开始。在每次迭代步的开始,先对a、b和c重新排列,使它们满足zeroin算法中描述的条件。这部分是收敛条件判断,并可能从循环中退出。下部分代码是在二分法和两种基于插值的方法间进行选择。最后
10、一部分代码为下一次迭代步计算F。4.8 fzerogui M文件fzerogui用图形界面显示了zero算法和fzerotx程序的执行过程。在迭代的每一步,用户有机会用鼠标选择下一个点的位置,其中,一直包括屏幕上显示为红色的区间二分点。如果当前a、b和c三个点的位置互不相同时会显示一个蓝色的点,它是由IQI算法得到的下一个近似解。当a=c,也就是只有两个互不相同的点时,屏幕上会显示由割线法得到的一个绿色的点。同时,屏幕上也会用一条虚线画出 f(x),但是算法并不“知道”虚线上的其他函数值。你可以选择任何一点,作为下一个近似解,而不一定遵循zeroin算法选择二分点或插值点。你甚至可以直接去选择
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 数值 分析 第四
限制150内