アプリ版:「スタンプのみでお礼する」機能のリリースについて

初歩的な質問ですみません.

複数の点(x, y)の近くを通る指数関数(y = a^x + c)を,
近似で出したいとき,指数aや定数cの求め方についてです.

■前提条件
・y = f(x) = a^x + c とする (a:指数,c:定数)
・座標1 (x1,y1)=(50,5)の近くを通って欲しい
・座標2 (x2,y2)=(1000,30)の近くを通って欲しい

■解法の糸口(自分でやってみたこと)
・y=a^x は,a=y^(1/x),またx=log_a(y) ともかけるので,

1.とりあえずcは無視して,座標1を代入すると,
  5=a^50 ⇔ a=5^(1/50)=1.032712419896443
2.座標2を代入すると,
  30=a^1000 ⇔ a=30^(1/1000)=1.0034069880166463
3.1.と2.の答えが違っているため,どちらをどう使っていいかわからない
  しかも,まだcは考慮できていない.

Webでも調べたりして,いろいろ試行錯誤したのですが,
頭が混乱してきて,お手上げ状態になってしましました….

よろしければ,導出方法を計算過程を記して教えていただけると嬉しいです.
必要に応じて,関数電卓をお使いください.
※a^bを計算するときは,pow(a,b)と入れないと正しい答えを返しませんのでご注意ください.
http://tomari.org/main/java/dentaku_kansuu.html

※ちなみに,指数関数y=a^x+cは,座標が最低何個わかればaとcが求まるのでしょうか? 
未知の変数の数は2個(aとc)なので,2個あれば確定するのでしょうか.
N個の近似となると別に確定する必要はないのですが,知っておかないといけない情報かもしれません.
ちなみに,これまで関数近似については,最小二乗法(直線の近似)以外,
高校以来,あまり勉強したことはありません.
(つまり,指数関数の本質,数学的な知識は乏しいです….)

以上です,よろしくお願いいたします.

A 回答 (2件)

補足(1)


a^50(a^950-1)-25 = 0
を解けばいいですが、
excelでやるなら、ソルバーの機能を使えばいいでしょう。
正直、私はexcelには詳しくないので
「excel ソルバー」とかで検索してみるといいと思います。

補足(2)
普通は最小二乗法を使います。excelでやるならこれもソルバーでできます。
http://homepage1.nifty.com/gfk/square_solver.htm
に、N次関数で近似する例が載っていますが、指数関数で近似する場合も同様にできます。
    • good
    • 0
この回答へのお礼

大変的確な補足,ありがとうございました.
excelを使いこなすと,最小二乗法の計算も容易にできるのですね.
参考URLも非常にわかりやすいサイトを選んでもらい,本当に助かりました.

rabbit_catさんの回答で満足したので,
ここで回答を締め切りたいと思います.
ありがとうございました.

お礼日時:2010/04/04 13:46

>※ちなみに,指数関数y=a^x+cは,座標が最低何個わかればaとcが求まるのでしょうか? 


>未知の変数の数は2個(aとc)なので,2個あれば確定するのでしょうか.
その通り。
というわけで、未知数がa,cの2個で、座標1 (x1,y1)=(50,5)、座標2 (x2,y2)=(1000,30)の2点が与えられているので、近似ではなくて、厳密にこの2点を通るように、aとcを決められます。

1.ちゃんとcも無視しないで、座標1を代入すると,
5 = a^50 + c … (1)

1.cを無視しないで、座標2を代入すると,
30 = a^1000 + c … (2)

というわけで、(1)と(2)を連立させてa,cについて解けばいいです。
実際に解くのは数値計算しかないですが、
a = 1.0030570062962585087533299236029851259021224685666…
c = 3.8351210713869479819882604408568938733579605262382…
といった感じになります。
    • good
    • 0
この回答へのお礼

>rabbit_catさん
夜分遅くに,迅速な回答,どうもありがとうございました.
とても助かりましたm(_ _)m.

>1.ちゃんとcも無視しないで、座標1を代入すると,
そうでした….なんでcを無視し続けちゃったんだろ><;..
単に連立一次方程式の理屈でした….気づかせていただき,ありがとうございます

続いての質問で誠に恐縮ですが,
関連する(1)~(2)の教えていただけると幸いです.

>実際に解くのは数値計算しかないですが、
(1)他の任意の値でも,aとcを(プログラム上で)計算したいので,
もしよろしければ,計算する手段(方程式/Excel/フリーソフトでも可)を教えていただけないでしょうか?

  人が見た時の計算過程は,おそらく
  (2)-(1) = 25 = a^1000-a^50 = a^50(a^950-1)とやりますが,
  これだとaが少数だと人間の手には負えませんし,
  教えていただいた精度のaを求める計算手段(「a=***」となる式)は,
  私の力では探せませんでした.

(2)また,N個になる場合の近似曲線を求める場合は,
スマートに計算するには,何らかの方程式に当てはめるのだと思いますが,
指数関数用の近似方程式などはあるのでしょうか?

  ちなみに,対数関数(y = log_a(x)+c)の近似方法も知りたいのですが…,
  (2個の座標がわかれば,連立方程式でa,cは確定することはわかりました.)
  これは欲張りなので,もう少し自分で調べてみます.


長文になってしまい申し訳ありません.
わかる範囲だけの回答,短くで結構です.

※なお,適切な方程式/ソフトが無い場合は,
今は特に処理速度に拘っているわけではないので,
いっそ自分で総当たりをするプログラムを作って出そうと思っています.

お礼日時:2010/04/04 08:43

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