我怎么能使用二分法的收敛于任意值吗?
2视图(30天)
显示旧的评论
我正在编写一个函数来解出水槽内的水位。箱的体积是所描述的:
V =π* x ^ 2 * ((3 * r×) / 3)
我有R = 4米,需要找到V = 100米的高度(x) ^ 3。我选择使用二分法查找这个高度和使用while循环,应该结束的高度时给出了体积等于100 m ^ 3。虽然我很难得到循环运行不止一次,我不知道是什么可能会出错。我新Matlab,所以我可能错过了一些非常明显但任何帮助,我们将不胜感激。
这里的代码我已经设法想出到目前为止:
%定义函数
R = 4;
v = @ (x)π* x ^ 2。* ((3 * r×)。/ 3);
%定义变量
xL = 0;
xH = 2。* R;
六世= v (xL);
vH = v (xH);
%定义xr
xr = 0。5 . * (xL + xH);%对分法
vR = v (xr);
%定义循环的目标价值
焦油= 100;
而v (xr) = =焦油
xr = 0。5 . * (xL + xH);
%更新xH和xL
如果vH >虚拟现实
xH = xr;
其他的
xL = xr;
结束
结束
根= xr;
再一次感谢所有的帮助很感激
0评论
接受的答案
沃斯
2022年1月28日
事实上你的循环运行0 *(因为v (xr)不等于100)。
%定义函数
R = 4;
v = @ (x)π* x ^ 2。* ((3 * r×)。/ 3);
%定义变量
xL = 0;
xH = 2。* R;
六世= v (xL);
vH = v (xH);
%定义xr
xr = 0。5 . * (xL + xH);%对分法
vR = v (xr);
%定义循环的目标价值
焦油= 100;
disp (v (xr));
而v (xr) = =焦油
disp (“循环”);
xr = 0。5 . * (xL + xH);
%更新xH和xL
如果vH >虚拟现实
xH = xr;
其他的
xL = xr;
结束
结束
根= xr;
它应该循环
直到
v (xr) = =焦油,所以:虽然v (xr) ~ =焦油,事实上它可能不应该与确切的平等但使用一些小错误,例如,在abs (v (xr)——焦油)> max_error。,你需要更新你的卷作为你去使用tar告诉哪个xH或xL每次都需要更新。
%定义函数
R = 4;
v = @ (x)π* x ^ 2。* ((3 * r×)。/ 3);
%定义变量
xL = 0;
xH = 2。* R;
六世= v (xL);
vH = v (xH);
%定义xr
xr = 0。5 . * (xL + xH);%对分法
vR = v (xr);
%定义循环的目标价值
焦油= 100;
max_error = 1 e-6;
而abs (v (xr)——焦油)> max_error
xr = 0。5 . * (xL + xH);
vR = v (xr);%更新虚拟现实太
流(1,“循环:xr = % 12.8 f, vR = % 12.8 f \ n 'xr, vR);
%更新xH和xL
如果焦油<虚拟现实%使用tar来确定目标的哪一边
xH = xr;
vH = v (xH);%更新vH太
其他的
xL = xr;
六世= v (xL);%更新六世也
结束
结束
格式长;
根= xr
v(根)