0

両側が互いに等しくなるまで、関数を別の関数内でループするにはどうすればよいですか?

例えば

この「f」を見つけた後

f = (1/(-1.8*log(((epsilon/D)/3.7)^2 + 6.9/Re)))^2;

そのfの値を使ってここに入力したい

f = (1/ -2.0*log((epsilon/D) + (2.51/Re*sqrt(***f***))))^2

プログラムは、両側が互いに等しくなるか、比較的近くなるまでループすることになっています。許容精度または誤差は0.00001です。

mme wha を与える f の値を表示するにはどうすればよいですか

4

2 に答える 2

1

あなたは表現を解こうとしているように私には思えます

f = somefun(f);

ここで、fの初期値は次の式で与えられます。

f = (1/(-1.8*log(((epsilon/D)/3.7)^2 + 6.9/Re)))^2

最善の策は(利用可能な場合)、Matlabの最適化ツールボックスを使用することです。このツールボックスでは、関数を最小化するように設定します。

f - somefun(f)

を使用して公差を設定できる場所optimset('TolFun', 1e-5);

ツールボックスがない場合は、ニュートン法を使用することについてのコメントでのdrNの提案は、おそらく他の方法と同じくらい良いでしょう。そして、自分でそれを行うことからさらに学ぶことができます。

于 2013-03-09T00:04:33.957 に答える
1

最初のコード行が開始見積もりであり、2 番目のコード行が実際の固定小数点反復であり、そこで使用しようとしている固定小数点反復であると想定しています。

この場合、連続する反復間の違いをテストしながら、単純にその 2 番目のステートメントを繰り返す必要があります。たとえば、このようなもの。

f = 1;
df = 1;

while abs(df) > 0.0001
  fnew = log(20/f);
  df = fnew - f;
  f = fnew;
end;

ところで。上記は、f*exp(f)=20 [または同等の f = ln(20/f)] を解く固定小数点反復の簡単な例です。「f」の特定の方程式に同じロジックを適用しますが、すべての方程式が固定小数点反復に適しているわけではないことに注意してください。

于 2013-03-09T00:09:08.563 に答える