1

教師モデルに従って単純なFalse Positionコードを実行しようとしていますが、実際に機能させることはできません。私のif-elseが正しいかどうか、またはそれが何を言っているのかはわかりませんが、とMethod Failedの答えがあるはずです。プログラミングとmatlabはまったく新しいので、どんな助けも大いに価値があります。ありがとうP=3.0571i=16

%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

とに変更p1しただけであることに注意してください。pq1q

残りのコードは問題ないように見えますが、読みやすくするためにいくつかの小さな変更をおp勧めqします。現在、3 つの異なる場所で関数を定義しています。将来関数を変更したい場合は、それらすべての場所でまったく同じ変更を行う必要があります。そうしないと、バグが発生します。自分自身を繰り返さず、関数を として一度だけ定義し、後でそれを and などとして使用することをお勧めします。xyhelp function_handlefun = @(x) x^2-4*x+4-log(x);y0 = fun(x0)y1 = fun(x1)

于 2013-09-16T06:21:46.547 に答える