Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用matlab实现简易假定位_Matlab - Fatal编程技术网

用matlab实现简易假定位

用matlab实现简易假定位,matlab,Matlab,我正试图按照我的老师的模式编写一个简单的代码,但无法让它实际工作。我不确定我的if else是否正确,或者它只是说方法失败了,但我知道应该有P=3.0571和I=16的答案。对编程和matlab完全陌生,因此任何帮助都将非常宝贵。谢谢 %False Position %(x^2-4x+4-lnx=0 for 2<=x<=4) p0=2; p1=4; TOL=10^-6; N=100; q0=p0^2-4*p0+4-log(p0); q1=p1^2-4*p1+4-log(p1);

我正试图按照我的老师的模式编写一个简单的代码,但无法让它实际工作。我不确定我的if else是否正确,或者它只是说
方法失败了
,但我知道应该有
P=3.0571
I=16
的答案。对编程和matlab完全陌生,因此任何帮助都将非常宝贵。谢谢

%False Position
%(x^2-4x+4-lnx=0 for 2<=x<=4)

p0=2; p1=4; TOL=10^-6; N=100;

q0=p0^2-4*p0+4-log(p0);
q1=p1^2-4*p1+4-log(p1);

i=2;
while i<=N
    p=p1-q1*(p1-p0)/(q1-q0);

    if abs(p-p1)<TOL
        disp('False Position')
        p
        i
        break
    end



    i=i+1;
    q=p^2-4*p+4-log(p);

    if q*q1<0
        p0=p1;
        q0=q1;
    else
        p1=p;
        q1=q;
    end
end

   if i>=N disp('Method Failed')
   end
%错误位置

%(x^2-4x+4-lnx=0表示2我不太熟悉假位置法,但似乎你在试图通过在每一步缩小一些间隔来找到某个函数的零点,根据某些条件将左边缘或右边缘设置为某个中间值。我认为你的
if
:in case
q*q1I aI’’我不太熟悉假定位法,但你似乎在试图通过在每一步缩小一些间隔来找到某个函数的零点,根据某些条件将左边缘或右边缘设置为某个中间值得到P,但i不是我应该得到的16,我的是39)。我还将在下一个作业中尝试你的函数句柄。感谢你听到答案是正确的,但我不知道为什么迭代次数不同。请仔细检查你的公式,然后问你的老师,也许他使用了稍微不同的算法或公差。如果你高兴,请接受答案。对不起,这是第一次是时候使用这个网站了。我接受答案了吗?谢谢,这确实帮助我得到了P,但我的I不是我应该得到的16,我的是39)。我还将在下一个作业中尝试使用你的函数句柄。感谢您听到答案是正确的,但我不知道为什么迭代次数不同。仔细检查你的公式,然后问你的老师,也许他使用了稍微不同的算法或公差。如果您满意,请接受答案。对不起,这是第一次使用此网站。我接受答案了吗?(对于未来的读者)除了巴斯·斯温克尔斯回答中的更正和提示外,休息的条件应该包括间隔的两边。区间长度收缩到零的情况绝大多数不会发生在普通的调节器或假位置。因此,除了Bas Swinckels答案中的更正和提示外,如果abs(p-p0)(供未来读者使用),则中断条件应包括间隔的两侧。区间长度收缩到零的情况绝大多数不会发生在普通的调节器或假位置。因此,如果abs(p-p0),则使用

if q*q1<0
    p0=p;q0=q;
else
    p1=p;q1=q;
end