電子書籍の厳選無料作品が豊富!

y=F(x)
の式でx=・・・の形にできれば問題ないのですが、できないときに、yの値でxの値を求めたいのですが、どうすればよいですか?

具体的には

y=F(x)=A1exp(-x/t1)+A2exp(-x/t2)+A3(-x/t3)
で、A1,t1などは、適当に入れる。
これでyの値を決めて、そのときのxの値を求めたいです。

A 回答 (6件)

先の回答に訂正です。


while((f(x1-y)*(f(x1-y))>eps
ではなく
while (f(x1)-y)*(f(x1)-y)>eps
です。
久しぶりにVBAで書いたので文法ミスがほかにもあるかもしれません。あとCやFORTRANなら実装例が結構あるかと。
    • good
    • 0
この回答へのお礼

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

難しそうなので、じっくり勉強させてもらいます。

お礼日時:2006/01/29 09:27

ニュートン法については参考URLを参照してください。


VBAで組むとしたら
function f(x as double)as double
f=A1*exp(-x/t1)+A2*exp(-x/t2)+A3*(-x/t3)
end function
function df(x as double)as double
df=-A1/t1*exp(-x/t1)-A2/t2*exp(-x/t2)+A3*(-1/t3)
end function
Function newton (y as double,eps as double)as double
dim x0 as double
dim x1 as double

rem 初期値として適当な値を指定します。
x0=10.0

while((f(x1-y)*(f(x1-y))>eps
x1=x0-f(x0)/df(x0)
x0=x1
wend

newton=x1
end function
ここでepsは許容誤差です。小さくすればするほど精度は上がりますがそれだけループを繰り返すということを念頭に入れてください。ニュートン法では一階微分が必要ですが微分形が求まらない場合微分の代わりにその点を含むある区間での傾きが使えます。
実装例としては
functio df(x as double)as double
dim h as double
dim k1 as double
dim k2 as double
dim k3 as double
dim k4 as double

rem 適当な範囲
h=1.0

k1=f(x)
k2=f(x+h/2*k1)
k3=f(x+h/2*k2)
k4=f(x+h*k3)

df=(k1+2*k2+2*k3+k4)/6
end function
こんな感じでどうでしょう。

参考URL:http://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5% …
    • good
    • 0

>求めたいyの値をすぐに知りたいです。


>データ量が膨大にあります。

それならばマクロを書くとよいでしょう。
yの値を挟み込むxを2つ(x1およびx2)決めます。
まず、x=(x1+x2)/2を代入して、求めたいyが左右どちらにあるかを判断します。
求めたいyが左にあるときは、x=(x1+(x1+x2)/2)/2を代入します。
求めたいyが右にあるときは、x=((x1+x2)/2+x2)/2を代入します。
これを繰り返し、誤差が一定の範囲になったときに終了します。

所望の分解能がエクセルの分解能を超えると解が振動します。その部分に気を付ければ単純なループ計算になると思われます。
    • good
    • 0
この回答へのお礼

マクロですか・・・

やったこと無いんですよね。
簡単に説明できそうでしたら教えてください。

お礼日時:2006/01/28 20:54

こんにちは。



さて、エクセルの「ゴールシーク」がつかえるのでは?
エクセルが認識できる関数であれば、
目標値(Y)に収束する近似値を導いてくれます。

以下の、サイトをご参照ください。

もし見当違いだったらごめんなさい。

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/mous_ …
    • good
    • 0
この回答へのお礼

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

やってみたのですが、多分できないです。工夫すればできするかもしれませんが・・・
変数が1つじゃないとできないですよね?

お礼日時:2006/01/28 20:55

直接逆関数を求められないなら、方程式としてニュートン法とかで数値解析的に解いちゃだめなの?

    • good
    • 0
この回答へのお礼

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

ニュートン法ってどうやってやるんですか?

お礼日時:2006/01/28 09:52

逆関数は難しそうですね。

やはり数値解析を使用しなければならないような気がします。
一例(とっさの思いつき):
A1:値、A2:値、A3:値
A4:t1の値、A5:t2の値、A6:t3の値
B列:xの値
C列:A列の絶対参照+B列の相対参照によるyの式
定数が決定したら、グラフ(Grapher等を利用)を使用して概ねのxを求めます(振動しないようです)。
分解能に応じて増分を決定し、xの値をB列にフィルします。
yの値と調和するxの値を求めます。
(マクロ化することもできそうです)

以上、疲れた脳みそに思い浮かんだことを書きましたが実際には作っていません(起きて時間があったらやってみますが、それまでにどなたかがもっと賢い方法を見つけてくれるでしょう)。
    • good
    • 0
この回答へのお礼

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

グラフをみる方法は最終手段として考えていました。でも面倒くさいなぁって・・・

A1からA6の値を決め、xの値を指定したら、求めたいyの値をすぐに知りたいです。
データ量が膨大にあります。

お礼日時:2006/01/28 06:53

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