• ベストアンサー

logを分数で近似

log_2 3を、0.00001以下の誤差で表される分数(aとbを整数として、a/bと表される)で書き表したいのですが、どなたか方法と過程を示していただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ramayana
  • ベストアンサー率75% (215/285)
回答No.10

ANo.8の添付図を拡大しました。

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 x6=4+αと置くことで、 α=0と置いたものと、α=1と置いたもので大小関係を比較すると、0.0001以下までの精度がありました。 おそらくx7まで出せば十分…と言っても相当計算が必要ですが(^^;) まあ、根性出してやるよりかははるかに計算量は少なかったです。 この場合、756/477 < log_2 3 < 12115/7644でした。 貴重な考え方を頂き、ありがとうございましたm(_ _)m

その他の回答 (10)

  • f272
  • ベストアンサー率46% (8016/17133)
回答No.11

エクセルVBAで求めてみた。 Sub log2_3() n = 10 ReDim a(0 To n), c(1 To n), p(-1 To n), q(-1 To n), e(1 To n) p(-1) = 0 q(-1) = 1 a(0) = Log(3) / Log(2) p(0) = 1 q(0) = 0 For i = 1 To n c(i) = Int(a(i - 1)) a(i) = 1 / (a(i - 1) - c(i)) p(i) = c(i) * p(i - 1) + p(i - 2) q(i) = c(i) * q(i - 1) + q(i - 2) e(i) = p(i) / q(i) - a(0) Next i Range("a1").Resize(n + 2) = WorksheetFunction.Transpose(p) Range("b1").Resize(n + 2) = WorksheetFunction.Transpose(q) Range("c3").Resize(n) = WorksheetFunction.Transpose(e) End Sub A列が分母,B列が分子,C列が誤差 _____0_________1 _____1_________0 _____1_________1______-0.584962501 _____2_________1______0.415037499 _____3_________2______-0.084962501 _____8_________5______0.015037499 ____19________12______-0.001629167 ____65________41______0.000403353 ___84________53______-5.68403E-05 __485_______306______4.81954E-06 _1054_______665______-9.47061E-08 24727_____15601______1.68254E-09

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 No.2の方と同じく数値計算で丁寧に示されていますが、違うんです。 私は偏微分方程式や非線形微分方程式のような数値計算もできますし、誤差論もわかります。 問題は、如何にきれいにスマートにこの問題を解くかなんです。 この辺は数学者のような感覚に近いです。 もちろん、数値計算によるものであってもいいのですが…スッキリしません。 数値計算の恩恵、文明の恩恵に預かるではなく、頭の体操といった傾向が強いのは否めません。 この質問をしたのもある種のヒラメキで、簡単に解けるのでは?と思って質問させていただきました。

回答No.9

alice_44さんの回答を見て、音律を決める時に使う (3/2)^12≒2^7 は使えないかなと試してみました。 3^12≒2^19より log[2](3)≒19/12≒1.5833 ちょっと誤差が大きいですね。 なら、53音平均律を導く関係 (3/2)^53≒2^31 ならどうか? 3^53≒2^84より log[2](3)≒84/53≒1.584905 惜しい!精度は一桁足りずです。 というわけで失敗ではありますが、音楽理論から結構いい近似が求まるのは自分には面白かったです。

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 これは興味深いですね。 音階とlog[2](3)が非常に近い関係あるのがなんとも言えない感じで、良いです。 貴重な種、ありがとうございました。

  • ramayana
  • ベストアンサー率75% (215/285)
回答No.8

ややこしいと言えばややこしいかもしれませんね。 ちなみに、最初の5項の計算の実例を示します。なお、ANo.6で3桁程度の数字の計算と言ったのは、言い過ぎでした。もう少し大きい桁の計算も出てきそうです。

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 少し勉強してみます。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.7

代入計算は、連分数展開のほうが簡潔だが、 展開式を得る過程は、冪級数よりややこしいのでは?

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 連分数に慣れていないので、なんとも言えません… 問題発起の時点でマクローリン展開などの級数展開法を用いれば簡単に出てくることは分かっていました。 しかし、級数以外の方法でも簡単にできるんだという、私のなんとも言えないヒラメキがこの質問をさせたのです。

  • ramayana
  • ベストアンサー率75% (215/285)
回答No.6

「連分数展開」というのを使う方法もあります。ひたすら逆数の計算と引き算をするだけなので、高校生でも十分理解できると思います。インターネットで検索すれば、どこかに載っているでしょう。利点は、次の2つ。 1 マクローリン展開より計算量が少ない。 2 誤差は、特段の計算をしなくても、結果からすぐ分かる。   (誤差は、分母の2乗の逆数より小さい⇒分母が318(10万の平方根)より大きくなるまで計算すれば、誤差は0.00001以下になる。 log_2 3を0.00001以下の誤差で表すなら、最初の8項ぐらい計算すればよいでしょう。せいぜい3桁程度の数字の割り算と引き算を繰り返すことになります。

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 計算を工夫したら連分数みたいになったのですが、 自分の計算が完全に展開までは出来ていませんでした。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.5

難しげな話は拔きで、高校生っぽい道具と根性だけで解決しよう というのなら、飛びっきりの根性が必要になります。 log_2 3 ≒ p/q ⇔ 2^p ≒ 3^q だから、 2^8 = 256 ≒ 243 = 3^5 あたりから出発して、試行錯誤しながら 2^p ≒ 3^q となる p,q の桁数を上げてゆく手はある。 2^8 > 3^5 だけれども、2^80 ≒ 3^50 を改善するにあたって 2^79 ≒ 3^50 と 2^80 ≒ 3^51 ではどちらがよいか?とか。 ともかく山程計算すれば、p/q < log_2 3 < r/s かつ r/s - p/q < 0.00001 となる p,q,r,s を見つけることが できるかもしれないし、途中でやんなって終るかもしれない。 どうせ根性を発揮するのなら、計算に燃えるよりも 勉強に熱意を使って、log の級数近似くらい理解するように なるほうが、前向きでよいような気はしますね。

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 この山ほどの計算が見えているとこをうまく回避する、というのが、この問題の本当に聞きたいところでした。 舌足らずですみません。

  • zeta0208
  • ベストアンサー率45% (17/37)
回答No.4

詳細は『テイラー展開』『マクローリン展開』にて調べてください。 概略のみ示します。 log[e](1+x)は xがZero に近い時 マクローリン展開すると log[e](1+x)≒ (x^1)/1 - (x^2)/2 + (x^3)/3 - (x^4)/4 + ・・・・・ となります。 これを利用すれば代数的な計算で求まります。 上記の式を log[e]{(1+x)/(1-x)} =log[e](1+x) - log[e](1+(-x)) =2{(x^1)/1 + (x^3)/3 + (x^5)/5 + ・・・・・} として、この式を利用する。 まず Zeroに近い数としてx=1/3とすると log[e]2 = log[e]{(1+1/3)/(1-1/3)} = 2{1/3 + ((1/3)^3)/3 + ((1/3)^5)/5 + ・・・・・} Zeroに近い数としてx=1/2とすると log[e]3 = log[e]{(1+1/2)/(1-1/2)} = 2{1/2 + ((1/2)^3)/3 + ((1/2)^5)/5 + ・・・・・} つまり log[2]3 = log[e]3/log[e]2 = {1/2 + ((1/2)^3)/3 + ((1/2)^5)/5 + ・・・・・}/{1/3 + ((1/3)^3)/3 + ((1/3)^5)/5 + ・・・・・} 求める桁との誤差がなくなるところで項を足すのを打ち切れば近似が求まります。 ※ log[2]3=1.58496として 1項で求めると ≒{1/2}/{1/3}=3/2=1.5 2項目で求めると ≒{1/2 + ((1/2)^3)/3}/{1/3 + ((1/3)^3)/3}=1.56696 3項目で求めると ≒{1/2 + ((1/2)^3)/3 + ((1/2)^5)/5}/{1/3 + ((1/3)^3)/3 + ((1/3)^5)/5}=1.58182 4項目で求めると ≒{1/2 + ((1/2)^3)/3 + ((1/2)^5)/ + ((1/2)^7)/7}/{1/3 + ((1/3)^3)/3 + ((1/3)^5)/5 + ((1/3)^7)/7}=1.58420 と誤差が少なくなっていくことが判るかと思います。

ngkdddjkk
質問者

お礼

丁寧にありがとうございます。 こちらはANo.1の段階でお礼の欄に書かせていただいた文に包含させていただきました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「高校生レベルで手計算でできそうだと感じている」という根拠は何? 「超越数を有理数で近似する」だけでもものによっては非常に難しい (というか「ただの作業」) し, さらに誤差評価まで入れると本気でめんどくさいことになるんだけどなぁ. いや, 「高校生レベルの計算」でできるのは間違いないんだよ. 手計算する気にならないだけで.

ngkdddjkk
質問者

お礼

そうですね~。 ものすごい累乗になってしまうのが目に見えているんですが、どっかに抜け道があるのでは?と思ってます。 因みに、log_a b=log_(a^n) (b^n)を使ってうまく切り抜けられないか考えてます。

  • FT56F001
  • ベストアンサー率59% (355/599)
回答No.2

数値的に探すと, 485/306 誤差は4.82×10^(-6) Private Sub Command1_Click() g = 9999 n = 0 X0 = Log(3) / Log(2) While g > 0.00001  n = n + 1  m = Int(X0 * n + 0.5)  g = Abs(X0 - m / n) Wend Print m, n End Sub

ngkdddjkk
質問者

お礼

なるほど。 数値的にはそうなるんですが… 何かもっとスッキリ出したいのです。高校数学レベルでもうちょっとうまくできないかと。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

1. log_2 3 を 0.00001以下の誤差で小数で表す 2. それを 100000倍する 3. 2 で得られた値を分子, 100000 を分母とする分数を作る でどうでしょか.

ngkdddjkk
質問者

お礼

ご回答ありがとうございます。 大学レベルの知識を持ち合わせていれば可能ですね。 ただ、私の中では高校生レベルで手計算でできそうだと感じているのですが、他に方法はないでしょうか?

関連するQ&A

  • 整数+仮分数の名称

    分母より分子が小さい分数=真分数 分母より分子が大きい分数=仮分数 整数+真分数=帯分数 ですが、 1と3/2のような整数+仮分数の場合は何というのでしょう? 小学校や中学校では習った覚えはありませんし、 ネットで調べた限り、これに言及したものは見つかりませんでした。 帯分数の引き算の過程とかで出てくると思いますが、名前はないのでしょうか?

  • 再び分数教えてください。

    ●5/24と3/16に同じ整数をかけ、それぞれを整数にする一番小さい整数は ? 。 ●異なる自然数を分母とする3つの分数1/?,1/3, 1/?の輪は1です。 ●88/15をかけても、25/144でわっても整数になる分数の中で、最も小さいものは ? で、4番目に小さいものは ? です。 ●5が分母の分数で、1より大きく50より小さい分数(約分して整数になるものは除く)の和は ?。 ●0と1の間で分母が81の約分できない分数は ?個あります。             よろしくお願いします。

  • 対数 log の問題です。

    log10(3)=a, log10(5)=b のとき、log3/2(48) をa, b で表すとどうなりますか? 分数が出てきて、うまく計算できません。 解説お願いします。

  • 対数(log)がわかりません

    ※一つ目の数字の「10」は小さい数字です。 対数の問題で、log10 2=a,log10 3=bとして、次の式をa,bで表しなさい、という問題があるのですが、 log10 5 という式を           10 =log10 ― =log10 10-log10 2      2 とするのまではわかるのですが、log10 10 の『10(二つ目)』をどうやって2や、3にすれば良いのかがわかりません。分数にしようとしても必ず5が出てしまうのでできません。そういうときはそのまま「log10 10-a」という答えで良いのでしょうか。教えて下さい。

  • 分数の足し算をさせるプログラムが分かりません。どなたか分かりませんか?

    分数の足し算をさせるプログラムが分かりません。 C言語の問題で分数の足し算までは一応できるんですが、答えがでたときに整数で出すやり方と約分して表す方法が分かりません。 どなたか知恵を貸してくれませんか? ユーザから4つの整数を入力し、はじめに入力された2個の整数と後に入力された2個の整数を分数と考え、その分数の和を表示するプログラムを作成せよ。 例えば、「3」「4」「5」「6」と入力されたときは、3/4 + 5/6を計算する。 そのプログラム内では分数の和を計算する関数を作成する。 さらに、 約分を行う関数を 再帰呼び出しを利用して作成する。 void yakubun(int *a1, int *a2) 例えば、以下の場合1/2と表示される。 int i=10,j=20; yakubun(&i,&j); printf(“%d / %d”, i, j); ちなみにここまでできました↓ #include<stdio.h> void bunsu_tasizan(int a1,int a2,int b1,int b2, int *c1,int *c2 ) { *c1=(a1*b2)+(b1*a2); *c2=(a2*b2); } int main() { int x1,x2,y1,y2,z1,z2; printf("整数を入力してください"); scanf("%d",&x1); scanf("%d",&x2); scanf("%d",&y1); scanf("%d",&y2); if(x2==0||y2==0||x2==0&&y2==0) printf("0以外を入力してください"); else{ bunsu_tasizan(x1,x2,y1,y2,&z1,&z2); printf("%d/%d",z1,z2);} return (0); }

  • エジプトの分数予想がとけたかも2

    エルディシュの分数予想と呼ばれる予想が解けたよ うな気がするのでUPします。分数予想というのは 分子4の分数は3つの単位分数で表されるというものです。 4/(A*n+B)=4/L Lが合成数の場合には、すべて解けてしまうという 前提なので、これに関しては後回しにします。 A*n+B=L とおく。 A=2*3*5*7* ・・・・ *pi  (piはある素数でAは小さい素数の積) B=pa (paはある素数) pi>pa のとき、A/Bは整数になる。 L=pi*((A/B)*n+1) となり、 Lは合成数となる。すなわちLは解けることになる。 L=A*n+1だけが解けなく残るが、 Aを大きくしていくとほとんどの数が解けるようになる。 以上です。

  • (1)log3 2・log8 9 次の式の値を求めよ。の2問の対数についてご教授ください。

    (1)log3 2・log8 9 次の式の値を求めよ (2)3^x=5^y=a x分の1+y分の1=2 上の方程式を満たすaを求めよ。 の二問になります。 logや分数の表示がわかりにくく、申し訳ございません。 手元に解答や解説がないので、簡単な過程式も付けて頂けると大変助かります。 ご教授頂ける方是非よろしくお願い致します。

  • eの近似値を、2桁の分母の分数化。

    【問題】e=2.718281828… の近似値を、分母分子とも整数の分数で表したい。分母が2桁の数のとき、最もeに近い分数を求めよ。 循環小数として求めようとしましたが、2桁の制限に、直ぐにも行き詰まってしまいました。 どなたか、この絞り込みの道筋あるいは解答をよろしくお願いいたします。

  • Mathematica 連分数について

    任意の長さのリストから、以下のようなリストの要素を分子に持つ連分数を生成 する関数を書きたい。(Foldを使い、チェックにFoldListを使う) a cf[{a,b,c,d}]= ----------- b 1 + ------ c 1 + --- 1+d 任意の長さのリストから、以下のような連分数を生成する関数を書きたい。 a1 cf[{{a1,b1},{a2,b2},{a3,b3{,{a4,b4},…}]= ---------------------- a2 b1+ --------- a3 b2+ ------ a4 b3+--- b4+ … すいません分母部分の位置が悪いですが、連分数です。

  • 並び、log、分数、指数などが含まれる問題について

    画像の問題についてですが、答案を見てもよくわかりません。 なぜa=5・(1/2)^14がa=10/2^15になるのか、b=2^21/3^20になるのか。 log10a=21log10 2-20log10 3になるのかなど、各所の途中なんでそうなるのかがイマイチわかりません。 どなたかわかりやすく教えて頂けないでしょうか?