图片缩略图

二分法求根

version 1.16 (6.61 KB) by 天空缝匠肌
非常简单的使用和健壮的方法,接受数组输入,所以它甚至比fzero有优势。
4.9
21日评级

120下载

更新2019年10月23日

从GitHub

视图版本历史

在GitHub上查看许可证

BISECTION是一种快速、简单、健壮的根查找方法,用于处理n维数组。

额外的可选输入和输出,用于更多的控制和功能,这在其他平分方法或其他根查找函数(如fzero)的实现中不存在。
这个函数在需要在一个循环中实现fzero以解决多个情况的情况下非常出色,在这种情况下它会更快。

它可以找到零根或非零根。

这段代码可能有点晦涩难懂。这是为了提高速度和能力。请参阅许多公认的其他提交的更简单、更容易遵循的实现,以理解二分法的基础知识。

引用作为

天空缝匠肌(2021)。二分法求根GitHub (https://github.com/sky-s/bisection)。检索

意见及评分(29

艾敏Tasdelen

Xiangyuan郑

一个非常好的代码,但我想知道它是否能解耦合非线性方程,比如x(1)^2-x(2)^2+3*x(3)-5=0, x(1)^2+x(3)^2-4*x(1)*x(2)*x(3)+89=0, x(1)*x(2)-x(3)^3-23=0

任阿什拉夫

伊丽莎白的情况

天空缝匠肌

Alex提出的问题现在被解决了。谢谢你,亚历克斯!

伯克Gogce

Muhtesem bir dosya……Emegi gecen herkesin amk…

天空缝匠肌

嗨,亚历克斯,
谢谢你的建议。我将考虑在每次迭代中去除额外的函数求值。我也把二分法放在了GitHub上,如果你想在那里做贡献。

亚历克斯

最好改变第一行,澄清函数满足其中一个目标函数,而不是同时满足(或和)

也行167:outsideolx = (ub - lb) > tolX;
outsideolx = (x - lb) > tolX;

亚历克斯

这很好,不过还有一些优化的空间。目前,函数f在每次迭代中被调用两次,只需要调用一次。

你可以用下面的代码替换主循环来加快速度(你也可以移除可选翻转ub和lb的部分):

lb_sign =符号(f(磅));
而真正的
X = (lb + ub) / 2;
fx = f (x);
conX = abs(ub - x) < tolX;
conFun = abs(fx) < tolFun;
con = conX | conFun;
如果所有(con (:))
打破;
结束
Select = sign(fx) == lb_sign;
磅(选择)= x(选择);
乌兰巴托(~选择)= x(~选择);
结束

天空缝匠肌

tbaracu:这个函数至少需要三个输入,例如平分(@cos,-3,3)。

tbaracu

它不工作:

> >对分
输入参数不足。

平分误差(第115行)
ub_in =乌兰巴托;lb_in =磅;

罗伯特。

蒂姆DeWolf

盖尔·古铁雷斯

伟大的功能! !

大卫韦森特

托马斯。

praydz 96

赫伯特

奥立

如果在间隔中有几个根,它会发现第一个只对LB关闭吗?

Chi-Fu

很棒的程序,节省了我很多时间,谢谢!

SiddharthKrishnamoorthy

矢量化特性非常非常有用。我对必须在for循环中输入f0感到烦恼。

菲利普Ohnewein

对我来说很有效。将循环替换为大约100万次迭代,可将执行时间缩短几个数量级。
此外,它编写得很好,文档记录得很好,是一种数字健壮的方法。

费边

优秀的文件。比在长循环中使用fzero快得多!

Siegmar W

谢谢!我自己也有一个类似的档案,但你的更好!

Umberto Picchini

我很高兴我发现了这个提交,我非常感谢作者提供了一个优秀的,良好的文档化的代码。我在for循环中调用了我的定制Newton-Raphson算法(带有分析梯度)数千次。我用对bisection的一次调用代替了这个循环。M,并实现了15倍的加速度!太棒了。

天空缝匠肌

我刚刚上传了一个全新的功能,包含了几乎所有的新代码和文档,以及许多新功能。有这么多的新代码,请让我知道,如果你发现一个错误。

这是我对这个函数的极限。我希望看到MathWorks或社区中的其他人开发Brent方法的矢量化实现,即使FZERO矢量化,以便能够处理数组问题。一个矢量化的FZERO(带有TolFun特性)在各方面都比这个要好。

义明

在第80行似乎有一个打印错误:
物= f(乌兰巴托+磅)/ 2;测试f是否返回多个输出

它应该是
f((乌兰巴托+磅)/ 2)

马太福音

具有示例的优秀文档。简单的功能,工作如广告。

MATLAB版本兼容性
创建R2015a
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!