• ベストアンサー

R.K.G法による数値シミュレーションをMatlabで行いたい.

タイトルの通りです. ルンゲクッタギル法を用いた数値シミュレーションをMatlabで行いたいと思っています. 4次のルンゲクッタ法は検索すればコードがたくさん落ちてますし,読んで理解することもできます. しかしルンゲクッタギル法はMatlabのコードが見つからず,Cなどで書かれたプログラムを見ても理解することができません. どなたかルンゲクッタギル法をMatlabで行う際の手順を教えていただけないでしょうか?

みんなが選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8027/17156)
回答No.1

これがルンゲクッタ法 k1=f(t[n], y[n]) k2=f(t[n]+h/2,y[n]+(h/2)k1) k3=f(t[n]+h/2,y[n]+(h/2)k2) k4=f(t[n]+h ,y[n]+(h) k2) y[n+1]=y[n]+(h/6)(k1+2k2+2k3+k4) だとすれば,ルンゲクッタギル法は k1=f(t[n], y[n]) k2=f(t[n]+h/2,y[n]+(h/2) k1) k3=f(t[n]+h/2,y[n]+(h/2)(-1+√2)k1+(h/2)(2-√2)k2) k4=f(t[n]+h ,y[n]+(h/2)( -√2)k2+(h/2)(2+√2)k3) y[n+1]=y[n]+(h/6)(k1+(2-√2)k2+(2+√2)k3+k4) これです。ちょっと変えるだけでしょ。

関連するQ&A

  • 数値シミュレーションの勉強に役立つ文献

    数値シミュレーションの勉強に役立つ文献を教えてください。 数値シミュレーションを勉強したいと考えています。  ※ここでいう数値シミュレーションは    ・Flow3D    ・CAE   といった、既存のソフトを使用するものではなく、   C言語などを用いて実際に自分でプログラムをくむことを言っています。   伝わりますかね。 実際にシミュレーションを組む流れは  1:支配方程式を導き  2:数学的な計算方法を盛り込む(ex ルンゲクッタ) といったものという認識でいます。 上記らを体系的に学びたいと考えています。 それに必要な文献や資料を、ご教授願います。ⵁ

  • 井戸型ポテンシャルの数値解シミュレーション

    井戸型ポテンシャルの数値解を「オイラー・クロマー法」を用いてシミュレーションで表す場合、どのようなプログラムにすれば良いのでしょうか?井戸の深さや幅をこちらで任意な数値を代入して、基底状態などにおける固有値や波動関数をグラフに表したいのです。 プログラムに関しては全くの初心者なのでどなたか具体的に教えてもらえれば幸いです。言語はC、グラフィクスの処理はPGPLOTのようなものは使用しないで、単純に結果をエクセルへ出力して求めたいです。

  • オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法のC言語プログラムに

    オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法のC言語プログラムについて教えてください! 課題なのですが、まったくわからず困ってます>< 1 常微分方程式 dy/dx=f(x,y),y(0)=1 の数値解をオイラー法を用いて計算するプログラムを作為せよ。ただし、f(x,y)=3-6x^2-4x+2xyとする。 2 α=1,β=1,γ=1/2,σ=1/2 の場合の2次ルンゲクッタ法を考える。1と同じ常微分方程式(f(x,y)も同じ)を考え、その数値解を求めるプログラムを作成せよ。また、オイラー法と2次ルンゲクッタ法の実行結果を示して、2つの近似精度を比較せよ。 3 1と同じ常微分方程式(f(x,y)も同じ)を考え、その数値解を4次ルンゲクッタ法を使って求めるプログラムを作成せよ。また、オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法の実行結果を示して、3つの近似精度を比較せよ。 以上の3つです。 休んでいた自分が悪いのですが、ネットで調べてもよくわからなくて… わかる方、よろしくおねがいします…

  • 非線形微分方程式の数値シミュレーション

    ある非線形微分方程式の安定固定点を数値シミュレーションで調べています.その非線形微分方程式にはa,b,c,d,e,fの6つの無次元パラメータが存在します. これらのパラメータのうち,a>50であることが安定固定点の必要条件であることを証明するためには,a>50以外のすべてのパラメータ条件において数値シミュレーションを実行してその結果のすべてが不安定固定点であることを示した上で,a>50の場合のすべてのパラメータ条件においてシミュレーションを実行して安定固定点が存在することを確かめる,という方法しかないのでしょうか? 無次元パラメータがa~fの6つもあり,それぞれのパラメータa~fの取りうる範囲は0から1刻みで100まであるため,すべてのパラメータ条件を数値シミュレーションするには時間が掛かりすぎます.(例えば,もし,微分方程式の無次元パラメータがaとbの2つのみであれば,100x100=10000,つまり10000通りのシミュレーションをすればよいのですが,6つだと100^6のシミュレーションが必要になり,時間が掛かりすぎてしまいます.) もっと短時間で,「a>50であることが安定固定点の必要条件である」ことを証明する方法はないでしょうか? よろしくお願いします.

  • MATLABの使い方について

    プログラム超初心者です。 MATLABを使って3次元方程式をプロットしたいのですが基本的なやり方がいろいろわかってなくて困ってます。1から学ぶことのできるようないい解説サイトなどないでしょうか? ちなみに具体的にやりたいこととしてはいくつかあるのですが、ローレンツ方程式などをルンゲクッタ法で解いてプロットする、とかそんな感じです。このやり方についてだけでも示していただけたら幸いです。

  • 高階連立常微分方程式の数値計算

    4次のルンゲクッタ法を用いた数値計算を勉強しています. 1階連立常微分方程式と高階常微分方程式は理解でき,プログラムも作成することができました. 次に高階の連立常微分方程式を解こうと思ったら,頭が混乱してしまいました. 4次のルンゲクッタ法を用いて高解連立常微分方程式を解く考え方を教えて頂ければ嬉しいです. また何か良い参考書があれば教えて頂きたいと思います. よろしくお願いします.

  • 数値解析(シュミレーション)コードの開発期間と開発規模について

    研究で数値計算(物性関連)のシュミレーションコードを開発しているのですが、コードの開発の苦労話や、開発期間などは学会や論文ではほとんど話題に上らないことが多いと思いますが、 実際には実験屋さんが実験装置に向かいあっている時間、またはそれ以上の時間をコード開発にかけていらっしゃると思いますが、では実際どの程度のプログラム規模で、どの程度の開発期間、人員で開発しているのか知りたくて質問させていただきました。 もちろん様々な分野で開発期間も人員も違うと思いますが、教えていただけると幸いです。 ちなみに、私の場合は開発は1人でコードの長さは数万程度で、半年から1年ぐらい開発に要しています。

  • 物理数値シミュレーションの結合と通信

     数値シミュレーションの技法に関する質問です。(以下、長文ですみません)  2つの数値計算プログラムがあり、それぞれ単独で、まあ正常に動作しています。その2つのプログラムは別の例えで言うと、プログラムAは空、プログラムBは海というものに対応しており、海面という境界では通信する必要がある、というようなものです。プログラムA,Bを何とか結合して全体を含んだプログラムCを作りあげるのが一般的なのかもしれませんが、プログラムA、Bについてそれぞれにあまり手を加えず、通信ができる仕組み(ファイル入出力で対応など)を少しだけ付加してプロセスとしては別々に実行できないかなと考えています。A,Bともに時間的に変化していくので、境界面での通信もそのつど計算する必要があるのです。  まず、Aを実行して、あるところで一旦休止して、Bが動き始め、あるところで休止し、またAが動く...というようなことなのかなと思いますが。この場合、A,Bが交互に動くという意味で同時性がないように思われますが、Aが終わったあと、Bが後ろから追いかけてくるというイメージです。1つのアイディアですが、AからBを呼び出すことができれば、AがBを呼び出し、実行している間、Aは待っており、Bが終わったらまたAが動き出す(そのあとまたBが呼び出される)という方法です。  2つのプログラムは変数名が同じだったりするので変数管理が大変で間違いそうなのでできればソースを編集して結合するのはやりたくないと思っています。  Linuxのシェルスクリプトだったら何でもできるというのかもしれませんが、私は主にWindowsユーザで言語はFortran, シェルというよりバッチ(バッシュよりバッチ)という環境で使っています。(Fortran90以降はモジュールという考え方も出ているようですが、どんなものかなと思いますが。) 何かアイディアがあれば教えて頂きたいのですが。よろしくお願いします。 ※今回の質問はプログラム2つでしたが、うまくいったら3つ4つとなっていく可能性ありです。 ※適当なカテゴリが見つからず、Cのユーザだったらシステムのキモの部分から何でも知っているはずなので、このカテゴリにアップしました。

  • MATLABでのプログラミングについて

    はじめまして。 当方MATLAB初心者です。プログラムをどう組み込めばよいのかよく分かりません。 MATLABでPSO(粒子群最適化)のアルゴリズムを取り入れてシミュレーションを行ないたいと思っているのですが、 m-fileに直接書き込むにしても条件分岐などがあるので、どう書いたらいいのかよく分かりません。 C言語などで別に書いたプログラムを組み込んだりできるのでしょうか? 大学では制御の分野を学んでいるのですがMATLABにはほとんど触れた事がないです、質問もわかりにくいかも知れませんが、ご存知の方がいらっしゃるなら教えていただきたいです。

  • エクセルの複数セルに同時に同じ数値をプラスする法。

    エクセルで、例えばA1からA8までにそれぞれ異なる数値がはいっています。このとき、5ならば6に、7ならば8にというように全て同時に数値を1だけあげる方法はあるのでしょうか。また、A3,A5,A6のみ同時に数値を1プラスできるのでしょうか。さらに、A3,B2,C7など任意のセルの数値を同時に1プラスする方法があればご教授下さい。過去ログを検索したのですが、検索法が下手らしくヒットするものがありませんでした。初心者です、よろしくお願いします。