よろしくお願いいたします。以下方程式(単調増加関数)のxについて求めたいです。
a x + (b x)^1/(n+1) +(c x)^1/(m+1) - d=0
a, b, c, d (定数)を各列に代入、各行の右側にxを求める式を代入し計算するシートを作りたいです。反復計算、循環参照を使用しa,b,c,dの列の横に数式をコピペして一括て求めたいです。
近似解でも良いです。
ためしに式を変形し
x={(b x)^1/(n+1) +(c x)^1/(m+1) - d}/a
として、たとえば
a,b,c,dがA1, B1, C1, D1に代入されており
E1:=((B1*F1)^1/(n+1)+(C1*F1)^1/(m+1) -D1)/A1
F1:=E1
として循環参照をさせ、反復回数100、精度0.0001に設定し計算したところ
どちらのセルも計算されず、#NUM となってしまいました。
(d=0のときのみx=0と計算できました。)
a~d及び指数のn,mの数値の範囲は以下です。
a:0.04-0.07
b:90-100
c:70-90
d:0-100
n::0.157
m:0.352
ニュートン法を用いると負のべき乗または負の指数を計算することになって#NUMとなってうまくいきません。この問題をどうにか回避して計算する方法をご存知の方、ご教示いただきたくお願いします。
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回くらいもやれば収束するでしょう。
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に近い正値を初期値にしたほうがいいでしょう。
ご回答頂きありがとうございます。
ご指摘の通り、初期値の取り方次第で変わってくることを理解できました。
ありがとうございます。
a,b,c,dの各条件が1000行程あり、各条件毎にxを算出するには、どうしたらよいかご存じありませんでしょうか。
(1000回同じことをすればよいのでしょうが、、、、。)
ご教示いただければ幸いです。
No.4
- 回答日時:
#3です。
プログラムにミスがあって結果がおかしくなっていました。微分係数に不安定があるようで収束が悪いですが、とりあえず1000回繰り返したところ収束値だけは出ました。
x=0.285632676376962
ありがとうございます。
できれば、各a,b,c,dのシートに対しxを一括計算させるようにしたいです。
計算数が多く(1000行くらいあり、また多くのシートを処理しなければなりません。)
a,b,c,dが各列に入力されているシートに各行ごとにxを計算するにはどうしたらよいか、
ご存じであればご教示ください。
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
何のための変形ですか。
ご回答をありがとうございます。
おっしゃる通り確かにグラフを描くと一目瞭然なのですが、
なぜか収束できません。
x={(b x)^1/(n+1) +(c x)^1/(m+1) - d}/a
の変形は、循環参照させてセル同士を参照させると同じ値に収束して求めることができた経験からです。
エクセルの循環参照と反復計算のヘルプを見て可能と思い実施してみたところうまく収束しました。
その時は、指数が整数のためか収束し解を得ることができました。
今回は、ニュートン法の途中でべき乗の中身が負となる場合がありエクセルが計算できず
#NUMを返したとようです。
(負のべきはエクセルでサポートされていないようです。)
No.2
- 回答日時:
>ニュートン法を用いると・・・
と書かれているので、ゴールシークだけでなく、マクロ(VBA)もやった事があると思って良いですか?。以下は、VBAを使えるが前提です。
単調増加になるa,b,c,d,n,mを与える訳ですから、解はあったとして1個です。2分法(bysection)はどうでしょう?。解が0以上にあるなら、計算過程で負数のべき乗や負数の指数を計算する事はありません。
2分法はニュートン方に比べて遅いと言われていますが、最近のPCは信じられないくらい速いので、この程度なら恐らく、体感速度は0ですよ。それにアルゴリズムは簡単だし(与式を単に計算するだけ(^^))、解精度の制御もしやすいし・・・(^^)。
この回答への補足
申し訳ありません。
2分法を良く知らず、勝手なコメントをしてしまいました。
(引数に関数と、xを入れてxの値を返すVBAなるものをお尋ねしてしまいました。)
2分法の計算方法とVBAをネットで探してみましたが、なかなか奥深く見つけるのが大変でした。
勝手なコメントをして申し訳ありません。
もし、お気を悪くされず、質問の対策方法を引き続きご教示いただければ幸いです。
ご回答頂きありがとうございます。
おっしゃるとおり、単調増加ですので試算すると解は1個なのですが、質問の結果となってしまいました。
2分法については、知見がないのです。ご教示いただければ幸いです。
当方PC環境はWIN7でOFFICE2010です。
VBA等で関数を定義できて、引数に方程式とxを入れて、解くマクロとかあると助かります。
ご存じであれば、自分はVBAの知識はほとんどないのですが、ご教示いただけると助かります。
No.1
- 回答日時:
a x + (b x)^(1/(n+1)) +(c x)^(1/(m+1)) - d = 0 でしょうか。
>ニュートン法を用いると負のべき乗または負の指数を計算することになって
xが負になるのならだめですが、指数は負でも計算できます。
ニュートン法で問題なく計算できますよ。
a,b,c,dがどんな値のとき#NUMになったんでしょうか。
早速のご回答ありがとうございます。
ニュートン法でためしに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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) Excelについて質問があります。 関数の数値入力についてなのですが、 b1にー c1に数値 がある 1 2023/05/28 12:13
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0から1になった時の増加率を教...
-
自然対数Ln(x)からxを求める方...
-
1/3乗などの計算方法
-
イコール
-
逆関数の求め方
-
時定数の計算を教えてください
-
不定積分の答えをどこまで出す...
-
中学数学 a※b=1/3(a+b)とする...
-
中学 数学 こういう問題の時答...
-
漸化式での次数下げ
-
Mathematicaで一般形を平方完成...
-
1/1+1/2+1/3+...+1/100
-
改良土のCBR
-
数学 ∑(1からnまで)1/k2乗...
-
数1 三角形ABCにおいて、a=2√3...
-
9X2乗-6X+1 はどうやった...
-
数の大きい二次方程式
-
x軸から切り取る線分の長さの問...
-
分数式の計算で答えがこうなっ...
-
Excel MONTH(A1+11)はなぜ翌月...
おすすめ情報