3

関数の根を推定するための簡単なスクリプトを実行しています。すべてがうまく機能し、アルゴリズムの各反復は現在のxとf(x)を出力しますが、スクリプトが終了し、関数の出力としてxの最終推定値を設定すると、値が返され、小数点以下3桁に丸められます。 。

while k < maxit
    k = k + 1;
    dx = b - a;
    xm = a + 0.5*dx;       %  Minimize roundoff in computing the midpoint

    fm = feval(fun, xm, diameter, roughness, reynolds);

    fprintf('%4d  %12.20e  %12.4e\n',k,xm,fm); 

    if (abs(fm)/fref < feps) | (abs(dx)/xref < xeps) % True when root is found
        r = xm;  
    return;
end

出力のテールビットは次のとおりです。

k       xm            fm
45  6.77444446476613980000e-003   1.3891e-012
46  6.77444446478035060000e-003  -1.3380e-011
47  6.77444446477324520000e-003  -5.9952e-012
48  6.77444446476969250000e-003  -2.3022e-012
49  6.77444446476791610000e-003  -4.5830e-013

    ans =

        0.0068

なぜ出力が丸められるのかわかりません...どうすればそれを防ぐことができますか?

4

2 に答える 2

7

スクリプトを実行する前に、コマンドラインで「formatlongE」と入力してみてください

于 2011-10-22T20:53:20.913 に答える
1

私もその問題を抱えていました。このページをチェックしてください。これにより、出力のスタイルをより適切に制御できます。

http://www.mathworks.co.uk/help/techdoc/ref/format.html

于 2011-10-23T10:40:49.063 に答える