主要内容

标量函数的根

求解单变量非线性方程

fzero函数试图找到一个变量的一个方程的根。您可以使用一个单元素起始点或一个指定起始间隔的两个元素向量来调用此函数。如果你给予fzero起点x0fzero首先搜索函数改变符号的点附近的区间。如果找到了区间,fzero返回函数更改符号附近的值。如果没有找到这样的间隔,fzero返回.或者,如果你知道函数值在符号上不同的两个点,你可以使用一个两元向量指定这个起始区间;fzero保证缩小间隔并在符号变化附近返回一个值。

以下部分包含两个示例,说明如何使用起始间隔和起始点找到函数的零点。示例使用了该函数humps.m,由MATLAB®提供。的图形如下图所示的线条

X = -1:.01:2;Y =驼峰(x);情节(x, y)包含(“x”);ylabel (“驼峰”(x)网格)

图中包含一个轴对象。axis对象包含一个line类型的对象。

设置选项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作为起始点fzerofzero首先搜索函数在这一点上改变符号的区间。如果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

相关的话题