dポイントプレゼントキャンペーン実施中!

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

A 回答 (11件中1~10件)

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

「logを分数で近似」の回答画像10
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

x6=4+αと置くことで、
α=0と置いたものと、α=1と置いたもので大小関係を比較すると、0.0001以下までの精度がありました。
おそらくx7まで出せば十分…と言っても相当計算が必要ですが(^^;)

まあ、根性出してやるよりかははるかに計算量は少なかったです。

この場合、756/477 < log_2 3 < 12115/7644でした。

貴重な考え方を頂き、ありがとうございましたm(_ _)m

お礼日時:2012/06/30 03:56

エクセル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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

No.2の方と同じく数値計算で丁寧に示されていますが、違うんです。
私は偏微分方程式や非線形微分方程式のような数値計算もできますし、誤差論もわかります。

問題は、如何にきれいにスマートにこの問題を解くかなんです。
この辺は数学者のような感覚に近いです。
もちろん、数値計算によるものであってもいいのですが…スッキリしません。

数値計算の恩恵、文明の恩恵に預かるではなく、頭の体操といった傾向が強いのは否めません。
この質問をしたのもある種のヒラメキで、簡単に解けるのでは?と思って質問させていただきました。

お礼日時:2012/06/30 02:25

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
惜しい!精度は一桁足りずです。
というわけで失敗ではありますが、音楽理論から結構いい近似が求まるのは自分には面白かったです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

これは興味深いですね。
音階とlog[2](3)が非常に近い関係あるのがなんとも言えない感じで、良いです。

貴重な種、ありがとうございました。

お礼日時:2012/06/30 02:54

ややこしいと言えばややこしいかもしれませんね。



ちなみに、最初の5項の計算の実例を示します。なお、ANo.6で3桁程度の数字の計算と言ったのは、言い過ぎでした。もう少し大きい桁の計算も出てきそうです。
「logを分数で近似」の回答画像8
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

少し勉強してみます。

お礼日時:2012/06/30 02:35

代入計算は、連分数展開のほうが簡潔だが、


展開式を得る過程は、冪級数よりややこしいのでは?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

連分数に慣れていないので、なんとも言えません…
問題発起の時点でマクローリン展開などの級数展開法を用いれば簡単に出てくることは分かっていました。

しかし、級数以外の方法でも簡単にできるんだという、私のなんとも言えないヒラメキがこの質問をさせたのです。

お礼日時:2012/06/30 02:42

「連分数展開」というのを使う方法もあります。

ひたすら逆数の計算と引き算をするだけなので、高校生でも十分理解できると思います。インターネットで検索すれば、どこかに載っているでしょう。利点は、次の2つ。

1 マクローリン展開より計算量が少ない。

2 誤差は、特段の計算をしなくても、結果からすぐ分かる。

  (誤差は、分母の2乗の逆数より小さい⇒分母が318(10万の平方根)より大きくなるまで計算すれば、誤差は0.00001以下になる。

log_2 3を0.00001以下の誤差で表すなら、最初の8項ぐらい計算すればよいでしょう。せいぜい3桁程度の数字の割り算と引き算を繰り返すことになります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

お礼日時:2012/06/30 02:32

難しげな話は拔きで、高校生っぽい道具と根性だけで解決しよう


というのなら、飛びっきりの根性が必要になります。
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 の級数近似くらい理解するように
なるほうが、前向きでよいような気はしますね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

お礼日時:2012/06/30 02:30

詳細は『テイラー展開』『マクローリン展開』にて調べてください。



概略のみ示します。
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

と誤差が少なくなっていくことが判るかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/29 18:36

「高校生レベルで手計算でできそうだと感じている」という根拠は何?



「超越数を有理数で近似する」だけでもものによっては非常に難しい (というか「ただの作業」) し, さらに誤差評価まで入れると本気でめんどくさいことになるんだけどなぁ.

いや, 「高校生レベルの計算」でできるのは間違いないんだよ. 手計算する気にならないだけで.
    • good
    • 0
この回答へのお礼

そうですね~。

ものすごい累乗になってしまうのが目に見えているんですが、どっかに抜け道があるのでは?と思ってます。

因みに、log_a b=log_(a^n) (b^n)を使ってうまく切り抜けられないか考えてます。

お礼日時:2012/06/29 18:40

数値的に探すと,


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
    • good
    • 0
この回答へのお礼

なるほど。

数値的にはそうなるんですが…

何かもっとスッキリ出したいのです。高校数学レベルでもうちょっとうまくできないかと。

お礼日時:2012/06/29 17:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!