标量函数的根
求解单变量非线性方程
的fzero
函数试图找到一个变量的一个方程的根。您可以使用一个单元素起始点或一个指定起始间隔的两个元素向量来调用此函数。如果你给予fzero
起点x0
,fzero
首先搜索函数改变符号的点附近的区间。如果找到了区间,fzero
返回函数更改符号附近的值。如果没有找到这样的间隔,fzero
返回南
.或者,如果你知道函数值在符号上不同的两个点,你可以使用一个两元向量指定这个起始区间;fzero
保证缩小间隔并在符号变化附近返回一个值。
以下部分包含两个示例,说明如何使用起始间隔和起始点找到函数的零点。示例使用了该函数humps.m
,由MATLAB®提供。的图形如下图所示的线条
.
X = -1:.01:2;Y =驼峰(x);情节(x, y)包含(“x”);ylabel (“驼峰”(x)网格)在
设置选项fzero
您可以控制的几个方面fzero
通过设置选项来实现功能。使用以下命令设置选项optimset
.选项包括:
使用起始时间间隔
的图形的线条
表示函数在点处为负X = -1
正的X = 1
.你可以通过计算来证实这一点的线条
在这两点上。
的线条(1)
Ans = 16
的线条(1)
Ans = -5.1378
因此,您可以使用[1]
作为开始的间隔fzero
.
的迭代算法fzero
找到越来越小的子区间[1]
.对于每一个子区间,的符号的线条
在两个端点不同。当子区间的端点越来越近时,它们收敛于0的线条
.
显示…的进展fzero
在每次迭代中,设置显示
选项iter
使用optimset
函数。
选项= optimset(“显示”,“通路”);
然后调用fzero
如下:
A = f0 (@humps,[-1 1],options)
函数计数x f(x)程序2 -1 -5.13779初始值3 -0.513876 -4.02235插补4 -0.513876 -4.02235平分5 -0.473635 -3.83767插补6 -0.115287 0.414441平分7 -0.115287 0.414441插补8 -0.132562 -0.0226907插补9 -0.131666 -0.0011492插补10 -0.131618 1.88371e-07插补11 -0.131618 -2.7935e-11插补12 -0.131618 8.88178e-16插补13 -0.131618 8.88178e-16插补在间隔中发现零[- 1,1]
A = -0.1316
每个值x
表示目前为止最好的端点。的过程
列告诉您算法的每一步是使用平分还是插值。
你可以验证函数值在一个
是接近于零的吗
的线条(a)
Ans = 8.8818e-16
使用起点
假设你不知道函数值的两个点的线条
符号不同。在这种情况下,您可以选择一个标量x0
作为起始点fzero
.fzero
首先搜索函数在这一点上改变符号的区间。如果fzero
找到这样一个区间,它就继续执行前一节中描述的算法。如果没有找到这样的间隔,fzero
返回南
.
例如,设置起始点为-0.2
,显示
选项Iter
,并呼叫fzero
:
选项= optimset(“显示”,“通路”);A = f0 (@humps,-0.2,options)
搜索包含符号变化的-0.2左右的区间:f(a) b f(b)步骤1 -0.2 -1.35385 -0.2 -1.35385初始间隔3 -0.194343 -1.26077 -0.205657 -1.44411 search 5 -0.192 -1.22137 -0.208 -1.4807 search 7 -0.188686 -1.16477 -0.211314 -1.53167 search 9 -0.184 -1.08293 -0.222627 -1.69911 search 13 -0.168 - 0.783455 -0.222627 -1.69911 search 15 -0.154745 -0.51962 -0.245255 -2.23521 search 17 -0.136 -0.104165 -0.264 -2.23521 search搜索a0在间隔[-0.10949,-0.264]:函数计数x f(x)程序18 -0.10949 0.572246初始19 -0.140984 -0.219277插值20 -0.132259 -0.0154224插值21 -0.131617 3.40729e-05插值22 -0.131618 -6.79505e-08插值23 -0.131618 -2.98428e-13插值24 -0.131618 8.88178e-16插值25 -0.131618 8.88178e-16插值在间隔[-0.10949,-0.264]中发现零
A = -0.1316
每个迭代的当前子区间的端点都列在标题下面一个
而且b
的对应值的线条
端点列在下面f (a)
而且f (b)
,分别。
注意:端点一个
而且b
没有按任何特定顺序列出:一个
可以大于b
或者小于b
.
前九步,符号的线条
在当前子区间的两个端点处都为负,这在输出中显示。在第十步,符号的线条
正于一个
,-0.10949
,但在b
,-0.264
.从这一点开始,算法继续缩小区间(-0.10949 - -0.264)
,直到它达到值为止-0.1316
.