【问题标题】:How to write a code which can decrease the range of the answer until we get the right value?如何编写可以减小答案范围的代码,直到我们得到正确的值?
【发布时间】:2019-10-06 11:41:34
【问题描述】:

我想写一个代码,它可以帮助我减少答案的范围,直到我找到它。例如,S=0:0.001:1;我必须找到一个平方为 0.09 的值,即是,x^2=0.09,答案是0.3

现在,如果我每次都猜中位数,那就是,

第一次我猜是“0.5”,但 0.5^2=0.25,不是 0.09,所以范围变成 S=0:0.001:0.5

第二次我猜是“0.25”,但 0.25^2=0.0625,不是 0.09.so 范围变成 S=0.25:0.001:0.5

第三次我猜是 (0.25+0.5)/2=0.375,但 0.375^2=0.140625,不是 0.09,所以范围变成 S=0.25:0.001:0.375

所以范围会不断减小,直到我找到答案,范围的上限和下限之一将是我猜测的错误数字。但我不知道如何修改代码

我的原始代码

S=0:0.001:1;
x=0.5;
y=x^2;%not 0.09

S=0:0.001:x
q=0.25;
y=q^2;%not 0.09

S=q:0.001:x
w=0.375;
y=w^2%not 0.09

S=q:0.001:w %S=0.25:0.001:0.375
e=0.3125;
y=e^2 %not 0.09

S=e:0.001:w;
r=0.34;
y=r^2 %not 0.09
   .
   .
   .

直到我发现y=0.09,所以我可以知道答案,但是,这段代码太长了,我想写一个while或for循环来找到答案,有人知道如何修改我的代码吗?

【问题讨论】:

    标签: matlab numerical-methods


    【解决方案1】:

    【讨论】:

    • 所以我使用的方法不是二分搜索而是牛顿拉夫森法?
    • 你使用了二等分,意思是分成两部分。最幼稚的做法是减半。 Newton Raphson 方法以不同的方式平分,并且收敛速度更快。
    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多