![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
No.3ベストアンサー
- 回答日時:
A No.1のKulesです。
>fsolveという関数があり、1変数の非線形方程式の解で、与えられた初期値に最も近い解を導出してくれます。
調べてみたらfsolveはoptimization toolboxを持ってないと使えないみたいですね。
私は持ってないので使えないです(笑)
1変数ならfzeroとかいう関数もあるみたいなんですけどね…
>ニュートン法は2次のテイラー展開を行って連立方程式を作り解く方法ですよね?
あれ…私の理解ではニュートン法は1次のテイラー展開
(って言うのかな?1次導関数までしか使わないやつです)
で片付けるやつだったと思うのですが…
↑あまりこの辺の難しい数学は知らないのです。
また、使うのも全微分ではなく偏微分なのでそんなに項が爆発的に増えることはないと
思うのですが。ああ、積の導関数だと積の数だけ増えますね
(f=suv(s,u,vはxの関数)となっていた場合、f'の項は3つになりますね)
ただ、ネットで検索していく中のどっかのページに微分出来ない関数
(微分がメンドクサイ関数でもいいと思います)を
df/dx=(f(x+h)-f(x))/h
で解くケースが見られましたので、偏微分に関しても先の例でいけば、
f1(a,b)をx1で微分したものにx1=a,x2=bを代入したものd/dx1(f1(a,b))を
d/dx1(f1(a,b))=(f1(a+h,b)-f1(a,b))/h
として解いても良さそうです。
ということは、f1,f2に当たる関数をMatlab内で作っておけば、ヤコビ行列
[df1/dx1,df1/dx2;df2/dx1,df2/dx2]
は
[(f1(a+h,b)-f1(a,b))/h,(f1(a,b+h)-f1(a,b))/h;(f2(a+h,b)-f2(a,b))/h,(f2(a,b+h)-f2(a,b))/h]
とできるので、そこまで複雑にはならなさそうですね。
hは1e-4でも何でも小さい数を適当に与えればよいと思います。
というかここまでニュートン法でつっぱらずに他の方法探れよって言われそうですが、
上にも書いたようにMatlabは触っているもののそこまで数学(特に大学以降の)には
詳しくないので…
参考になれば幸いです。
No.2
- 回答日時:
MATLAB は使ったことないので知りませんが, 検索したところによると
fsolve で多変数の方程式が解ける
ように読める.
万一 Optimization Toolbox がなくても, 検索すれば何とかなりそう.
参考URL:http://www.mathworks.com/help/ja_JP/toolbox/opti …
No.1
- 回答日時:
どんな数式なのかによってテクニックがあったりなかったりするかと思うんですが。
とりあえず泥臭い方法を書いてみます。
(Matlabにこの辺を扱える関数があったような気がしますが、私は使ったことないです)
ニュートン-ラフソン法を多変数に拡張してやれば解けるんじゃないかと思います。
1変数の時と変わるのは
・微分ではなく偏微分を使う
・割り算が行列の割り算(逆行列を掛ける)になる
ぐらいでしょうか。
4変数は書いてられないので、2変数で。
f1(x1,x2)=0、f2(x1,x2)=0を解くことを考えます。
適当な初期値a,bとして、それと解とのずれをΔx1、Δx2とします。
f1(a+Δx1,b+Δx2)=0、f2(a+Δx1,b+Δx2)=0
となればよいのですが、テイラー展開(だったかな?df1/dx1はf1をx1で微分することを表します)を
使って展開し、高次の微分の項を無視すれば
f1(a+Δx1,b+Δx2)=f1(a,b)+(df1/dx1)(Δx1)+(df1/dx2)(Δx2)
f2(a+Δx1,b+Δx2)=f2(a,b)+(df2/dx1)(Δx1)+(df2/dx2)(Δx2)
となります。
左辺=0として、右辺を行列の形で書くと上式は
[f1(a,b);f2(a,b)]+[df1/dx1,df1/dx2;df2/dx1,df2/dx2]*[Δx1;Δx2]=0
となるので、ここからΔ=[Δx1;Δx2]を求めることができます。
あとはa=a+Δx1、b=b+Δx2としてa,bの初期値を更新し、これを繰り返せば
初期値がいいところにあれば解は収束します。うまくいかなければ発散します。
変数が4つになってもやることは同じです。
Matlabでどう組むかは人によってそれぞれですね。ベタに書くならforループ1つで書けますが、
少しでも楽したいなら最低限f1,f2の関数は作った方がいいでしょう。
私なら関数f1(x1,x2),f2(x1,x2),df11(x1,x2),df12(x1,x2),df21(x1,x2),df22(x1,x2)
を作るかな。あるいはニュートン-ラフソン法以外の方法を探すかも知れません。
他になさそうならあきらめてこれでやるかと。
参考になれば幸いです。
この回答への補足
補足:
>-(Matlabにこの辺を扱える関数があったような気がしますが、私は使ったことないです)
fsolveという関数があり、1変数の非線形方程式の解で、与えられた初期値に最も近い解を導出してくれます。
丁寧な回答ありがとうございました。
ニュートン法自体はしっているのですが、4変数となると・・・「???」って感じです(汗)
ニュートン法は2次のテイラー展開を行って連立方程式を作り解く方法ですよね?
ニュートン法を4変数に拡張するためには、4変数のテイラー展開を求める必要があるかと思います。
頑張れば導出できるかもしれませんが(自信は全くないですが・・・;ω;)、複雑で長い計算式のためできれば微分をしない方法はないでしょうか?
この方法だと、100~200項くらいは出てきそうなので・・・・。
丁寧なご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カラーの16進表記の足し算
-
検索結果の指定列をリストボッ...
-
チェックボックスを操作できな...
-
VBA public変数はどのようなこ...
-
エクセルVBAでテキストボッ...
-
レコードセットにnullの場合
-
テキストボックスかラベル上の...
-
texで図と表を並べたい
-
Functionの戻り値を配列にした...
-
アクセスできない保護レベルエ...
-
VBAでcallで呼び出したsubを終...
-
VBAで入力数値について
-
VB.NETでのイベントの途中終了
-
配列に複数の値があるか簡潔に...
-
他のフォームから別のフォーム...
-
RichTextBoxで指定行の色を自動...
-
C言語のサフィックスについて
-
クラスモジュールの処理
-
ユーザーフォームへのデータ入...
-
VB
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
C#を勉強していて、指定したフ...
-
テキストファイルの読み込みと...
-
複数条件のオートフィルタ(VBA)
-
VC++ (byte)(col & 0xFF) の意味
-
VB.NET)コンボボックスの連動に...
-
ドラゴン曲線を再帰で書く
-
カラーの16進表記の足し算
-
検索結果の指定列をリストボッ...
-
エクセルのVBAでの7×7の魔方陣...
-
エクセル・VBAでテキストボック...
-
エクセル ユーザーフォーム ...
-
VBA for next
-
C言語について教えてください。
-
ExcelのVBAについて質問です。
-
for文の質問です。
-
2次元配列を返す関数について
-
texで図と表を並べたい
-
エクセルVBAでテキストボッ...
-
VBA public変数はどのようなこ...
おすすめ情報