1

我正在尝试按照我的老师模型做一个简单的错误位置代码,但无法让它真正起作用。不确定我的 if-else 是否正确,或者它只说什么,Method Failed但我知道应该有P=3.0571and的答案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
4

1 回答 1

1

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

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

请注意,我只更改p1p和。q1q

对于其余部分,您的代码看起来不错,但我建议进行一些小的更改以使其更具可读性:将所有p和更改qxand y,并可能将您的函数定义为函数句柄(类型help function_handle)。现在,你在 3 个不同的地方定义你的函数。如果您想在将来更改您的功能,您必须在所有这些地方进行完全相同的更改,否则您会遇到错误。最好不要重复自己,只定义一次函数 as fun = @(x) x^2-4*x+4-log(x);,然后再使用 asy0 = fun(x0)y1 = fun(x1)

于 2013-09-16T06:21:46.547 回答