标量函数的根
解决一个变量的非线性方程
的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
的起点fzero
。fzero
首先寻找一个间隔在这个点上函数变化的迹象。如果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
。