1

プログラムのこの部分を while ループに入れることができません。polyx_0、およびの値を差し込んだ後epsilon、プログラムは正しくans機能する関数を使用して値を計算evaluate_poly()し、私の特定のインスタンスでは答えを出します-13.2119。使用される私のイプシロン値は です0.0001。は実際にはループをスキップするabs(ans)よりも大きいのはepsilonなぜですか?

while ループの前に正しく計算されていることを確認するステートメントと、値が正しく取り込まれていることを確認するステートメントを行print ansのすぐ下に配置しました(これは実行されます)。x_01 = 0print epsilonepsilon

def compute_root(poly, x_0, epsilon):
    """uses newton's method to find a root of a polynomial function"""

    ans = evaluate_poly(poly, x_0)
    x_01 = 0

    while abs(ans) > epsilon:

        Dpoly = compute_deriv(poly)
        Fprime = evaluate_poly(Dpoly, x_01)
        return ans

        x_01 = x_0 - (ans/Fprime)
        print x_01
        return x_01

    print ans
4

2 に答える 2

2

ループ内に 2 つの return ステートメントを配置します。最初の 1 つがヒットすると、関数は即座にのみ終了します。そのため、最初のループで while ループが終了するだけでなく、print ステートメントに到達することもありません。

于 2013-06-15T21:18:09.133 に答える
1

あなたはreturn ansあなたのループの中にいます。したがって、その時点で関数は終了し、print到達することはありません。

ansが本当に -13.2119 の場合、ループに入りますreturn

return ansループ内の行を削除しても、ループのreturn x_01最後にもあります。その場合、ループは最大 1 回実行されるため、ifステートメントと同じになります。

于 2013-06-15T21:12:35.890 に答える