- ベストアンサー
対数の値を数学的に求める方法
底a、真数bの対数をlog(a,b)とあらわすことにします。 log(a,b)の値を数学的に求めることに関する質問です。 b=a^n (n:整数)のときはbをaで割る(または掛ける)ことで求められるわけですが、 b=a^(p/q) (p,qは互いに素な整数、q≠0)のときに値を求める方法がわかりません。 質問の意味がわからない場合は補足しますのでよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
やって見ないとわかりませんが、 b^q=a^p となりますので、 b^i=a^j で、i=1,j=1とし、 if(b^i==a^j) end else if(b^i<a^j) i=i+1 else if(b^i>a^j) j=j+1 で回せばどうですか? ただし、pとqの素は別途判定が必要です。
その他の回答 (4)
No.3です。 (p/q)がマイナスのケースもあるのですね。 b>1.0 and a<1.0 または、 b<1.0 and a>1.0 ならばマイナスなので、この場合はどちらかを逆数にして、 あとは同じ処理だと思います。
お礼
回答ありがとうございます。 結果がマイナスになる場合も考慮に入れて試してみます。
- kabaokaba
- ベストアンサー率51% (724/1416)
No.1です >人間が「1/2」と思う対数なら「1/2」を、 >「-2/3」と思う対数なら「-2/3」を出力したいのです。 やっと意味が分かりました・・・ 「数値解析」ではなく「数式処理」をしたいということですね これは掲示板程度で書けるようなものではないです 数学的な興味があれば, 「グレブナー基底」をキーワードに 調べてください. 実際に計算させたいなら,フリーなら Risa/Asir(リサ/アジール)とか maximaというようなソフトウェアで 多分計算できます. #maximaの方が多分情報が多い. 売り物なら,MathematicaとかMapleが有名ですが かなり高価です. ちなみに人間がやるならば 簡単に値が分かるときにはその値で計算しますが, そうではないときには,具体的な値は考えずに その性質だけを使って処理します. そして具体的な値が必要になって初めて計算しますが そういう場合は近似値で十分なことがほとんどです.
お礼
質問の意図がわかってもらえてよかったです。 グレブナー基底というのは聞いたことがないので気が向いたら調べてみることにします。 回答ありがとうございました。
- totoro7683
- ベストアンサー率60% (37/61)
質問の意味がわかりにくいですが log(a,b)は一般には無理数になるので有理数の形には求まりません。 近似なら1/xを1からaまで積分するとln(a)(自然対数)となることを用いて近似値が求まります。
補足
回答ありがとうございます。 質問の意味がわかりにくかったようなので補足します。 普通人間が対数の値を求めるときには a^x=b を考えながら頭で当てはまる数を見つけますよね。(違ったらごめんなさい) 一般の対数についてではなく、人間が見て適当な整数または分数が見つけられる程度の範囲で 対数をコンピュータでも計算できるようにしたいんです。 コンピュータの近似計算でいいといえばそれまでですが、できることなら、人間が「1/2」と 思う対数なら「1/2」を、「-2/3」と思う対数なら「-2/3」を出力したいのです。 補足を加えるたびにわかりにくくなっているかもしれませんが何とか汲み取っていただければ幸いです。
- kabaokaba
- ベストアンサー率51% (724/1416)
対数の値は展開によって計算することができます. |x|<1 のとき log(1+x)= x - 2/x^2 + 3/x^3 - 4/x^4 +・・・・ です.これを使って,例えば log(5) なんかだと log(5)=-log(1/5)= - log (1+(-0.8)) で展開できます. もちろん,ここでは自然対数ですが, 任意の底aに対しては底の変換公式で, log(a)が分かれば計算可能です. あとは誤差に注意して計算すればよいでしょう.
補足
回答ありがとうございます。 Taylor展開ですね。 質問が不十分だったようなので補足します。 今回計算したいのは、近似値ではなく、実際の値です。 つまり、 log(27,3)=1/3 のように求める方法を知りたいのです。
お礼
回答ありがとうございます。 解が存在しない場合にどう止めるか、とかいう問題がありますがとりあえず試してみたいと思います。