如何递归二分算法代码
25日视图(30天)
显示旧的评论
接受的答案
印度央行
约5小时前
嗨Dimitra,
我认为我们可以这样做:
函数根= bisection_recursive (f, a, b, tol max_it)
fa =函数宏指令(f);
fb =函数宏指令(f, b);
%检查是否已经找到根
如果abs (fa) <托尔
根=一个;
返回;
elseifabs(神奇动物)<托尔
根= b;
返回;
结束
%检查间隔是有效的
如果fa * fb > 0
错误(“无根存在于给定的区间。”);
结束
%递归二分算法
函数根= bisection_recursive_helper (a, b,我x_previous)
如果我> max_it
错误(“最大迭代次数达到了。”);
结束
x = (a + b) / 2;%中点
流(迭代% 3 d: % 10.8 f \ n '我x);
fx =函数宏指令(f (x);
如果abs (x - x_previous) < tol | | abs (fx) <托尔
根= x;
返回;
结束
如果fa *外汇< 0
根= bisection_recursive_helper (a, x, x, i + 1);
其他的
根= bisection_recursive_helper (x、b x,我+ 1);
结束
结束
%调用递归helper函数
根= bisection_recursive_helper (a, b, b, 1);
结束
要使用这个功能,您需要定义函数
f
并提供初始区间
[a, b]
,宽容
托尔
和迭代的最大数量
max_it
。函数将递归划分区间和收敛到根内指定的公差或最大迭代数。
这是一个如何使用的例子
bisection_recursive
函数找出根本的功能:
%定义函数
f = @ (x) x ^ 2 - 4;
%定义区间[a, b]
= 1;
b = 3;
%设置公差和最大迭代数
托尔= 1 e-6;
max_it = 100;
%调用bisection_recursive函数
根= bisection_recursive (f, a, b, tol max_it);
%显示结果
流(“根:% 10.8 f \ n”、根);
确保修改功能
f
和输入参数
一个
,
b
,
托尔
,
max_it
根据您的特定问题。