• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:反復計算で指数方程式の解を求めたい)

指数方程式の解を求める方法と注意点

このQ&Aのポイント
  • 反復計算を使用して、指数方程式の解を求める方法について詳しく説明します。
  • 指数方程式を変形して反復計算を行う方法を紹介します。
  • ニュートン法では負のべき乗や負の指数を計算できないため、別の方法を使う必要があります。

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.6

>a,b,c,dの各条件が1000行程あり、各条件毎にxを算出するには、 No.5で書いたH1,I1,G2を縦ではなく横に並べればいい。 3つ並べるのが面倒なら、1つの式にまとめてください。 A~Fにa,b,c,d,n,m Gにxの初期値 H1に、=G1-($A1*G1+($B1*G1)^(1/($E1+1))+($C1*G1)^(1/($F1+1))-$D1)/($A1+$B1/($E1+1)*($B1*G1)^(1/($E1+1)-1)+$C1/($F1+1)*($C1*G1)^(1/($F1+1)-1)) I,J,K,L,M,N,・・・・にHをコピー 10回くらいもやれば収束するでしょう。

mathstudy
質問者

お礼

早速のご回答ありがとうございます。 ばっちり計算できました。 大変助かりました。 ありがとうございました。

その他の回答 (5)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.5

ニュートン法です。 (a) A1:0.06294 (b) B1:92.674 (c) C1:80.531 (d) D1:0.45 (n) E1:0.157 (m) F1:0.352 (x0) G1:0.0001 (初期値) (f) H1:=A1*G1+(B1*G1)^(1/(E1+1))+(C1*G1)^(1/(F1+1))-D1 (f') I1:=A1+B1/(E1+1)*(B1*G1)^(1/(E1+1)-1)+C1/(F1+1)*(C1*G1)^(1/(F1+1)-1) (x1) G2:=G1-H1/I1 他のセルは、上のセルをコピー。 これで6回目ぐらいで、x=0.001787631 に収束します。 この関数は上に凸の増加関数なので、初期値の取り方に注意する必要があります。 大きい値を初期値にするとxがマイナスになってしまいます。 できるだけ0に近い正値を初期値にしたほうがいいでしょう。

mathstudy
質問者

お礼

ご回答頂きありがとうございます。 ご指摘の通り、初期値の取り方次第で変わってくることを理解できました。 ありがとうございます。 a,b,c,dの各条件が1000行程あり、各条件毎にxを算出するには、どうしたらよいかご存じありませんでしょうか。 (1000回同じことをすればよいのでしょうが、、、、。) ご教示いただければ幸いです。

  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.4

#3です。 プログラムにミスがあって結果がおかしくなっていました。微分係数に不安定があるようで収束が悪いですが、とりあえず1000回繰り返したところ収束値だけは出ました。 x=0.285632676376962

mathstudy
質問者

お礼

ありがとうございます。 できれば、各a,b,c,dのシートに対しxを一括計算させるようにしたいです。 計算数が多く(1000行くらいあり、また多くのシートを処理しなければなりません。) a,b,c,dが各列に入力されているシートに各行ごとにxを計算するにはどうしたらよいか、 ご存じであればご教示ください。

  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.3

まずはy=a x + (b x)^1/(n+1) +(c x)^1/(m+1) - dのグラフを書いてみてください。 そしたら一目瞭然です。 yを微分してy'を求め ニュートン-ラフソンで x(n)=x(n-1)-y/y' で簡単に求めることができます。 y=a x + (b x)^1/(n+1) +(c x)^1/(m+1) - dがほとんど直線状なので一発で収束します。 多分(b x)^1/(n+1) +(c x)^1/(m+1)は効いてこないのでしょう。 a:0.05 b:95 c:80 d:50 n::0.157 m:0.352 のとき x=-0.315623356 >ためしに式を変形し x={(b x)^1/(n+1) +(c x)^1/(m+1) - d}/a 何のための変形ですか。

mathstudy
質問者

お礼

ご回答をありがとうございます。 おっしゃる通り確かにグラフを描くと一目瞭然なのですが、 なぜか収束できません。 x={(b x)^1/(n+1) +(c x)^1/(m+1) - d}/a の変形は、循環参照させてセル同士を参照させると同じ値に収束して求めることができた経験からです。 エクセルの循環参照と反復計算のヘルプを見て可能と思い実施してみたところうまく収束しました。 その時は、指数が整数のためか収束し解を得ることができました。 今回は、ニュートン法の途中でべき乗の中身が負となる場合がありエクセルが計算できず #NUMを返したとようです。 (負のべきはエクセルでサポートされていないようです。)

noname#221368
noname#221368
回答No.2

>ニュートン法を用いると・・・ と書かれているので、ゴールシークだけでなく、マクロ(VBA)もやった事があると思って良いですか?。以下は、VBAを使えるが前提です。  単調増加になるa,b,c,d,n,mを与える訳ですから、解はあったとして1個です。2分法(bysection)はどうでしょう?。解が0以上にあるなら、計算過程で負数のべき乗や負数の指数を計算する事はありません。  2分法はニュートン方に比べて遅いと言われていますが、最近のPCは信じられないくらい速いので、この程度なら恐らく、体感速度は0ですよ。それにアルゴリズムは簡単だし(与式を単に計算するだけ(^^))、解精度の制御もしやすいし・・・(^^)。

mathstudy
質問者

お礼

ご回答頂きありがとうございます。 おっしゃるとおり、単調増加ですので試算すると解は1個なのですが、質問の結果となってしまいました。 2分法については、知見がないのです。ご教示いただければ幸いです。 当方PC環境はWIN7でOFFICE2010です。 VBA等で関数を定義できて、引数に方程式とxを入れて、解くマクロとかあると助かります。 ご存じであれば、自分はVBAの知識はほとんどないのですが、ご教示いただけると助かります。

mathstudy
質問者

補足

申し訳ありません。 2分法を良く知らず、勝手なコメントをしてしまいました。 (引数に関数と、xを入れてxの値を返すVBAなるものをお尋ねしてしまいました。) 2分法の計算方法とVBAをネットで探してみましたが、なかなか奥深く見つけるのが大変でした。 勝手なコメントをして申し訳ありません。 もし、お気を悪くされず、質問の対策方法を引き続きご教示いただければ幸いです。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

a x + (b x)^(1/(n+1)) +(c x)^(1/(m+1)) - d = 0 でしょうか。 >ニュートン法を用いると負のべき乗または負の指数を計算することになって xが負になるのならだめですが、指数は負でも計算できます。 ニュートン法で問題なく計算できますよ。 a,b,c,dがどんな値のとき#NUMになったんでしょうか。

mathstudy
質問者

お礼

早速のご回答ありがとうございます。 ニュートン法でためしにx_k=x_k-1-f(x)/f'(x)で計算しましたが、初期値を1にしたらいきなり、 xが負で帰ってきてしまいました。以降f'(x)が#NUMとなって以降の計算ができませんでした。 値は質問の範囲で求めたいですが、ためしに以下条件で行いました。 a:0.06294 b:92.674 c:80.531 d:0.45 n::0.157 m:0.352

関連するQ&A