我怎么能使用二分法的收敛于任意值吗?

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;
再一次感谢所有的帮助很感激

接受的答案

沃斯
沃斯 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));
134.0413
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 = 4.00000000, vR = 134.04128655循环:xr = 2.00000000, vR = 41.88790205循环:xr = 3.00000000, vR = 84.82300165循环:xr = 3.50000000, vR = 109.03944502循环:xr = 3.25000000, vR = 96.78396118循环:xr = 3.37500000, vR = 102.88102348循环:xr = 3.31250000, vR = 99.82405544循环:xr = 3.34375000, vR = 101.35052611循环:xr = 3.32812500, vR = 100.58677545循环:xr = 3.32031250, vR = 100.20528511循环:xr = 3.31640625, vR = 100.01463751循环:xr = 3.31445312, vR = 99.91933825循环:xr = 3.31542969, vR = 99.96698583循环:xr = 3.31591797, vR = 99.99081115循环:xr = 3.31616211, vR = 100.00272420循环:xr = 3.31604004, vR = 99.99676765循环:xr = 3.31610107, vR = 99.99974592循环:xr = 3.31613159, vR = 100.00123506循环:xr = 3.31611633, vR = 100.00049049循环:xr = 3.31610870, vR = 100.00011820循环:xr = 3.31610489, vR = 99.99993206循环:xr = 3.31610680, vR = 100.00002513循环:xr = 3.31610584, vR = 99.99997859循环:xr = 3.31610632, vR = 100.00000186循环:xr = 3.31610608, vR = 99.99999023循环:xr = 3.31610620, vR = 99.99999604循环:xr = 3.31610626, vR = 99.99999895循环:xr = 3.31610629, vR = 100.00000041
格式;
根= xr
根=
3.316106289625168
v(根)
ans =
1.000000004077111 e + 02
1评论
洛根帕里什
洛根帕里什 2022年1月29日
谢谢很多!我一直在挣扎着试图用我的头如何得到我接近目标函数值和你的解释真正理解哪里算错了。

登录置评。

更多的答案(0)

类别

找到更多的在循环和条件语句帮助中心文件交换

s manbetx 845


释放

R2021b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!