主要内容

标量函数的根

解决一个变量的非线性方程

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]。为每个子区间的迹象的线条不同的两个端点。子区间的端点越来越近,他们收敛于零的线条

显示的进步fzero在每个迭代中,设置显示选项iter使用optimset函数。

选择= optimset (“显示”,“通路”);

然后调用fzero如下:

= fzero (@humps[1],选项)
Func-count 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 10 -0.131618 - 1.88371 -0.131666 - -0.0011492插值e-07插值11 -0.131618 - -2.7935 e-11插值12 -0.131618 8.88178 e-16插值13 -0.131618 - 8.88178 e-16插值零区间[1]中发现
一个= -0.1316

每个值x是到目前为止最好的端点。的过程列告诉你是否使用二分或插值算法的每一步。

你可以验证函数值一个是接近于零输入

的线条(a)
ans = 8.8818 e-16

使用一个起点

假设你不知道两个点的函数值的线条不同的信号。在这种情况下,你可以选择一个标量x0的起点fzerofzero首先寻找一个间隔在这个点上函数变化的迹象。如果fzero发现这样一个区间,则在前一节中描述的算法。如果没有找到这样的间隔,fzero返回

例如,设置起始点-0.2,显示选项Iter,叫fzero:

选择= optimset (“显示”,“通路”);-0.2 = fzero (@humps,选项)
搜索间隔约-0.2包含一个信号变化:Func-count f b (a) f (b)过程1 -0.2 -1.35385 -0.2 -1.35385初始区间搜索5 3 -0.194343 -1.26077 -0.205657 -1.44411 -0.192 -1.22137 -0.208 -1.4807 9搜索7 -0.188686 -1.16477 -0.211314 -1.53167 -0.184 -1.08293 -0.216 -1.60224 13搜索11 -0.177373 -0.963455 -0.222627 -1.69911 -0.168 -0.786636 -0.232 -1.83055 17搜索15 -0.154745 -0.51962 -0.245255 -2.00602 -0.136 -0.104165 -0.264 -2.23521搜索18 -0.10949 0.572246 -0.264 -2.23521搜索寻找零区间[-0.10949,-0.264]:Func-count x 18 -0.10949 - 0.572246 f (x)过程初始19 20 -0.132259 - -0.0154224 -0.140984 - -0.219277插值插值21 22 -0.131618 - -6.79505 -0.131617 - 3.40729 e-05插值e-08插值23 24 -0.131618 - 8.88178 -0.131618 - -2.98428 e-13插值e-16插值25 -0.131618 - 8.88178 e-16插值零在区间[-0.10949,-0.264]
一个= -0.1316

当前的子区间的端点列出每个迭代的标题下一个b,而相应的值的线条在列出了端点f (a)f (b),分别。

注意:端点一个b不是在任何特定的顺序列出:一个可以大于b或小于b

前九步骤,的标志的线条在当前子区间的两个端点是负的,在输出所示。在第十一步,的标志的线条是积极的一个,-0.10949,但负b,-0.264。从这一点上,该算法继续缩小区间(-0.10949 - -0.264),如前一节所述,直到它达到的价值-0.1316

相关的话题