解決済みの質問
x>1のとき、exp(x)または10^xの近似値を電卓だけで求めたい。
x≒0のとき、sinx゜≒180x/π
みたいな近似式が指数関数でもできないかと思っています。
有効数字2桁くらいのもので結構ですので
メモ用紙(ハガキ大程度)と電卓(もちろん関数電卓は×)くらいで求められないでしょうか?
テイラー展開式exp(x)=1+x+(x^2)/2!+(x^3)/3!+…
は一応知っております。
(x>1なので困っているんですが…)
投稿日時 - 2010-08-09 21:26:15
A#3の補足質問に関連した近似式の導出の考え方について
exp(x)をマクローリン展開すると
exp(x)=1+x+x^2/2+x^3/6+x^4/24+...
これはxの収束範囲は全ての実数範囲であるが、x>1で収束が非常に悪く近似計算に向かない。
そこで exp(x)=(exp(x/n))^nとしてexp(x/n)のマクローリン展開を考えると
exp(x/n)=1+x/n+(x/n)^2/2+(x/n)^3/6+(x/n)^4/24+...
となって、|x/n|<1つまり1<|x|<n の範囲で収束が改善される。nは大きいほど収束の良い範囲が拡大する。従ってexp(x)の近似式として 整数nを n>>1とすれば
exp(x)=(exp(x/n))^n≒{1+x/n+(x/n)^2/2}^n≒(1+x/n)^n
電卓での計算のしやすさを考慮してn=2^8=256,2^10=1024などが良いだろう。
exp(x)≒(1+x/256)^256=((((((((1+x/256)^2)^2)^2)^2)^2)^2)^2)^2,
≒(1+x/1024)^1024=((((((((((1+x/1024)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2,
など
もう少し近似精度を上げるために、このexp(x)のマクローリン展開に近い展開の関数で収束のよい関数を利用することを考える
(2+x)/(2-x)=1+x+x^2/2+x^3/4+x^4/8+...
x^2の項までは一致する。収束範囲は|x|<2、
収束範囲を拡大する為に x/nで展開することを考える。
exp(x)≒(2+x)/(2-x)≒((2+x/n)/(2-x/n))^n=((2n+x)/(2n-x))^n
|x|<<2nで収束がよく|x|>1でも収束する。
n=2^8=256とすれば
exp(x)≒((512+x)/(512-x))^256 (収束範囲|x|<512)
もっと収束範囲を拡大(精度も上がる)したければ
exp(x)≒((1024+x)/(1024-x))^512 (収束範囲|x|<1024)
次に
10^x=exp(xlog(10))=exp((xlog(10)/n)*n)
≒((2+xlog(10)/n)/(2-xlog(10)/n))^n=((2n/log(10)+x)/(2n/log(10)-x))^n
収束範囲:|x|<2n/log(10)
n=256とすれば
10^x≒((222.3587747344649+x)/(222.3587747344649-x))^256
≒((222.359+x)/(222.359-x))^256 (収束範囲 |x|<222.359)
計算は ({{{{{{{{(222.359+x)/(222.359-x))^2)^2)^2)^2)^2)^2)^2)^2
(8回2乗を繰り返す)で行えば良いでしょう。
投稿日時 - 2010-08-10 06:29:12
お礼
丁寧な説明をしていただき、よく理解できました。
このような近似法があるのですね。
基本がマクローリン展開であるのも驚きです。
ありがとうございました。
質問文に書いたような
(精度が低くとも)もう少し手軽にできそうな
やり方があったら、それも知りたいので
締め切りはもう少し先にしたいと思います。
投稿日時 - 2010-08-11 18:56:38
1人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(3件中 1~3件目)
気賀康夫著「電卓に強くなる (副題)すぐに役立つ公式と実例」ブルーバックス B-327
を見ると、
e^x(eのx乗)の近似計算式にこんなのがあります。
e^x ≒ ( (x+512) / (x-512) )^256
また10^xの近似式は、
10^x ≒ ( (x+222.36) / (x-222.36) )^256
共に(○)^256 はカッコ内の○を求めてそれ同士を掛けて二乗し、その答えを元に、という作業を8回繰り返します。
注:256 = 2^8なので。
e^x ,10^x の近似式共xの値が10位までなら3桁以上の有効数字が得られるようです。
投稿日時 - 2010-08-10 01:35:54
補足
回答ありがとうございます。
「こんなやり方があるなんて」と驚いています。
この式の求め方は本に書いてありますか?
投稿日時 - 2010-08-10 02:08:51
xが1よりどれくらい大きいか、にも依るんですが、xを超えない最大の整数をnとして、
例えば、x=n(1+h)のようにしましょう。hがゼロに近いことと、nが整数というのがポイントです。
○ 電卓でx÷n-1を計算して h をメモしておきます。(メモリ機能があれば、メモリに入れます)
それから、反則かも知れませんが、eの近似値2.71828程度を知っていることとして、使います。
○ 次に、exp(n)を電卓で計算します。大抵の電卓なら、
2.71828×= で2乗が計算できます。この後、必要に応じて=を(n-1)回押せば
exp(n)が求められるので、これをメモ用紙に転記します。
○ そして、メインの計算は、メモリ機能がないと少し苦しいですが、以下のようにします。これは、テーラー展開の一部を利用します。精度の必要性に応じて計算回数を加減して下さい。
RMはメモリ読みだしのボタンを押す、という意味で読んで下さい。
メモリ機能が無い場合は、最初に計算した h を入力します。
また、括弧は数式の表現上記したもので、電卓入力では必要ないですね。
((((RM÷5+1)×RM÷4+1)×RM÷3+1)×RM÷2+1)×RM+1=
精度が低くても良ければ、最初をRM÷4とか、RM÷3から始めればよいですし、
高い精度が必要なら、最初をRM÷6とか、RM÷7のように増やして始めればよいです。
でも、電卓は計算精度が余り高くないので、増やしても大して改善されません。
○ 最後に、2番目の計算で求めた exp(n)を掛けて完成です。
x=1.1 なら、h=0.1 で、exp(1.1)=3.004166 に対して 3.0041639 が得られます。
RM÷3 から始めると、3.0041522
RM÷4 から始めると、3.0041636
RM÷6 から始めると、3.0041639 電卓の計算精度の限界でしょうか。
投稿日時 - 2010-08-09 22:26:47
補足
回答ありがとうございます。
x=n(1+h)だと、exp(x)={exp(n)}^(1+h)になってしまうと思うのですが…
仰る方法ですと、h=x-nではないでしょうか?
さっそくEXCELで精度を試してみました。
1次(つまり(1+h)×exp(n)で)でも有効数字1桁強は出るようです。
(これならRMを使わずに済みますし)
nの値は切り捨てではなく五捨六入くらいにした方が更に良さそうです。
こうなるとh=0.5~0.6付近で1割程度の誤差が出てしまいます。
電卓の「√(ルート)」を使えば解決できそうです。
大変に良いアイデア大変ありがとうございました。
まだ良い案があったら知りたいので
他の回答もお待ちしたいと思います。
投稿日時 - 2010-08-10 02:00:33