大小の実数を扱うときに、以下のMatlabコードを指数関数近似で近似させる方法を知っている人はいますか?指数関数を近似するMatlabコード
たとえば、x = 1の場合、コードはうまく動作し、x = -100の場合、3.7201e-44に近いときは8.7364e + 31の回答が返されます。
s=1
a=1;
y=1;
for k=1:40
a=a/k;
y=y*x;
s=s+a*y;
end
s
どのような援助が理解され、歓声次のよう
コードです。
EDIT:
[OK]を次のように質問があるので:
数学関数は、このコードは、おおよそのないものはどれか(私は指数関数と言っています) x = 1のときに機能しますか? (はい。)残念ながら、x = -100のときにこれを使用すると、答えはs = 8.7364e + 31になります。あなたの同僚は、プログラムにばかげたバグがあると考えて、あなたの援助を求めます。注意深く行動を説明し、よりよい結果を生み出す簡単な修正を与える。 [上記のコードを修正するか、それを使用することを提案する必要があります。また、あなたの簡単な修正作品をチェックする必要があります。]
をだから私は、多少の精度が失われ、用語間の大きさの16(またはそれ以上)の注文があった場合に問題が大きな数字を取り囲んでいることを理解しますが、解決策は私を見逃さ。
おかげ
EDIT:
だから最後に、私はこれと一緒に行きました:それは完全に正しいのですが、それはいくつかの良い近似値を返す場合s = 1;
x = -100;
a = 1;
y = 1;
x1 = 1;
for k=1:40
x1 = x/10;
a = a/k;
y = y*x1;
s = s + a*y;
end
s = s^10;
s
わかりません。
さらなる分析の後EXP(-100)= 3.720075976020836e-044
S = 3.722053303838800e-044
(残念ながら割り当てを提出)、Iは、反復回数を増加させるので、用語を増加実現効率をさらに向上させる。実際には以下がさらに効率的であった:
s = 1;
x = -100;
a = 1;
y = 1;
x1 = 1;
for k=1:200
x1 = x/200;
a = a/k;
y = y*x1;
s = s + a*y;
end
s = s^200;
s
与える:
EXP(-100)= 3.720075976020836e-044
S = 3.720075976020701e-044
y = x^kとすると思いますか?またはy = y * x?コードは、a * yという用語は常に(丸め誤差を無視して)1です。 – John
ありがとうございます。うん、それはy = y * xであるはずのタイプミスです。 –