我正在尝试用C语言编写一个类似于MATLAB的函数fzero
,我发现fzero使用Brent方法来查找根。
T=fzero(MyFunction,CATHRESHOLD);
这是我需要的功能,假设给我CATHRESHOLD
附近的MyFunction零。
当我尝试实现Brent方法以找到所需的结果时,我发现除了MyFunction,我需要两个输入a
和b
。
b
被认为是MyFunction根目前的猜测。
a
是MyFunction(a)
和MyFunction(b)
具有相反符号的点,因此区间[a, b]
包含解决方案。
我可以在知道所有输入的情况下编写brent方法的C代码,但我不能只知道函数和我称之为CATHRESHOLD
的函数。
我该如何选择a
的价值?!
任何人都可以向我解释fzero
如何运作可能会有所帮助!
答案 0 :(得分:0)
从fzero(fun,x0)
的{{3}},您可以看到x0
[a,b]
f(a)
f(b)
和edit fzero
有不同的标志。
通过在命令窗口中键入% X = FZERO(FUN,X0) tries to find a zero of the function FUN near X0,
% if X0 is a scalar. It first finds an interval containing X0 where the
% function values of the interval endpoints differ in sign, then searches
% that interval for a zero.
,我们可以打开函数本身。通过查看非混淆代码,这可以帮助您编写自己的版本。在函数的顶部,我们看到了描述:
fzero
所以[a,b]
仍然使用区间X0
,它只是找到标量fzero
周围的区间。请注意,您也可以将间隔传递给% X = FZERO(FUN,X0), where X0 is a vector of length 2, assumes X0 is a
% finite interval where the sign of FUN(X0(1)) differs from the sign of
% FUN(X0(2)). An error occurs if this is not true.
,详见第二个输入选项:
% Interval input
具体来说,请参阅开始的函数部分
if (numel(x) == 2)
% ...
a = x(1); savea=a;
b = x(2); saveb=b;
% ...
elseif (numel(x) == 1)
% ...
% method for calculating a and b
% ...
end
我们看到上述两个输入选项的处理
{{1}}