用matlab简单的错误位置

时间:2013-09-16 06:03:41

标签: matlab

我正在尝试按照我的老师模型做一个简单的False Position代码,但无法让它真正起作用。我不知道我的if-else是否正确或只是说Method Failed,但我知道应该有P=3.0571i=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

1 个答案:

答案 0 :(得分:1)

我对伪位置方法并不是很熟悉,但似乎你试图通过在每一步缩小一些间隔来找到某个函数的零点,方法是根据某些条件将左边或右边设置为某个中间值。我认为您if中存在错误:如果q*q1<0,您将左边缘设置为与右边缘相同的值。您可能需要将其更改为:

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

请注意,我仅将p1更改为p,将q1更改为q

对于其余部分,您的代码看起来还不错,但我建议您进行一些小修改以使其更具可读性:将所有pq更改为xy,并且可能将您的函数定义为函数句柄(类型help function_handle)。现在,您正在3个不同的地方定义您的功能。如果你想在将来改变你的功能,你必须在所有这些地方做出完全相同的改变,否则你就会有一个错误。最好not repeat yourself并将您的函数定义为fun = @(x) x^2-4*x+4-log(x);一次,然后将其用作y0 = fun(x0)y1 = fun(x1)等。