
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で質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- 数学 情報処理詳しい人!! A4縦のレポート文書に4:3の大きさの横向きの写真画像を貼り付けることにした。 2 2022/12/18 02:30
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 電気工事士 6.6kVケーブル単芯325sq-1.5kmの遮蔽銅テープ抵抗値は何Ω? 1 2023/05/02 21:06
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- 化学 化学のエンタルピ変化を求め方について ある例題では各物質のモール数を換算して計算することもあり、ある 1 2022/06/20 23:22
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- 数学 数学の問題の解説お願いします! 4 2022/08/28 05:22
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NET)コンボボックスの連動に...
-
VC++ (byte)(col & 0xFF) の意味
-
C#を勉強していて、指定したフ...
-
複数条件のオートフィルタ(VBA)
-
こうもりの撃退法
-
2次元配列を返す関数について
-
エクセル・VBAでテキストボック...
-
VBA public変数はどのようなこ...
-
タイムアウトする仕組みを作りたい
-
C#のループでtextboxに値を入れ...
-
チェックボックスを操作できな...
-
VB.NETでのイベントの途中終了
-
C言語のサフィックスについて
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
VBAでcallで呼び出したsubを終...
-
String型の値にスラッシュをつ...
-
共有フォルダの「共有のアクセ...
-
【VB.NET】テキストボックスに...
-
GetNextWindowがDLLファイルUse...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
VB.NET)コンボボックスの連動に...
-
ドラゴン曲線を再帰で書く
-
検索結果の指定列をリストボッ...
-
カラーの16進表記の足し算
-
エクセルのVBAでの7×7の魔方陣...
-
VC++ (byte)(col & 0xFF) の意味
-
4変数の非線形方程式のときかた
-
テキストファイルの読み込みと...
-
ExcelのVBAについて質問です。
-
線の太さ
-
エクセル・VBAでテキストボック...
-
エクセル ユーザーフォーム ...
-
C#を勉強していて、指定したフ...
-
VBA public変数はどのようなこ...
-
エクセルVBAでテキストボッ...
-
C#のループでtextboxに値を入れ...
-
他のフォームから別のフォーム...
-
レコードセットにnullの場合
-
VB.NETでのイベントの途中終了
おすすめ情報