Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(5) 常微分方程式の数値解法、4段4次のルンゲクッタ法がRungeKutta.FourthOrderの一文でできる。ローレンツ方程式を例としてやってみる。
C#のMath.NET Numericsを使った数値解析シリーズも5回目。さて今回は常微分方程式の数値解法。2次と4次のルンゲクッタ法とアダムスバッシュフォース法が使える。
まずは最初にusing MathNet.Numerics.OdeSolvers;はつけておく。で基本、RungeKutta.FourthOrderの1文で計算できる。Vector
例題はまあLorenz方程式がいいでしょう。
\begin{align} &\frac{dx}{dt} = \sigma (y - x) \\\ &\frac{dy}{dt} = -xz + rx -y \\\ &\frac{dz}{dt} = xy - bz \\\ \end{align}
プログラムはこんな感じで、
結果はこちら:
ソースコードの詳細はこちら:
using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using MathNet.Numerics;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.OdeSolvers;
using Series = System.Windows.Forms.DataVisualization.Charting.Series;
namespace RungeKuttaTest01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
chart1.Series.Clear();
chart1.Titles.Clear();
chart1.Legends.Clear();
chart1.ChartAreas.Clear();
}
private void button1_Click(object sender, EventArgs e)
{
Title title = new Title("Lorenz Equation", Docking.Top);
chart1.Titles.Add(title);
Legend legend = new Legend();
chart1.Legends.Add(legend);
Series series1 = new Series();
series1.ChartType = SeriesChartType.Line;
series1.BorderWidth = 1;
series1.LegendText = "Y";
chart1.Series.Add(series1);
Series series2 = new Series();
series2.ChartType = SeriesChartType.Line;
series2.BorderWidth = 1;
series2.LegendText = "Z";
chart1.Series.Add(series2);
chart1.ChartAreas.Add("");
Axis axisX = new Axis();
axisX.Title = "X";
axisX.Minimum = -20;
axisX.Maximum = 25;
axisX.Interval = 5;
chart1.ChartAreas[0].AxisX = axisX;
Axis axisY = new Axis();
axisY.Title = "Y,Z";
axisY.Minimum = -30;
axisY.Maximum = 60;
axisY.Interval = 10;
chart1.ChartAreas[0].AxisY = axisY;
double dt = 0.01;
double tmax = 200.0;
int n = Convert.ToInt32(tmax / dt);
var t = Generate.LinearSpaced(n, 0.0, tmax);
var x0 = Vector.Build.DenseOfArray(new double[] { 1.0, 1.0, 1.0 });
var x = RungeKutta.FourthOrder(x0, 0, tmax, n, Func);
for (int i = 0; i < n; i++)
{
series1.Points.AddXY(x[i][0], x[i][1]);
series2.Points.AddXY(x[i][0], x[i][2]);
}
}
public static Vector Func(double t, Vector x)
{
double s = 10.0, r = 28.0, b = 8.0/3.0;
double x_dot = s * (x[1] - x[0]);
double y_dot = r * x[0] - x[1] - x[0] * x[2];
double z_dot = x[0] * x[1] - b * x[2];
return Vector.Build.DenseOfArray(new double[] { x_dot, y_dot, z_dot });
}
}
}
過去のもの:
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。
Visual C#でMath.NET Numericsを使うシリーズ全編はこちらから
« ハケンアニメ!(文庫版)を読んだ。だいぶ前から存在は知っていたけれどタイトルの意味がよくわからず読んでなかったが、めちゃくちゃよかった!映画見逃した、、、と思ったらまだやってる映画館あった! 文庫版には特別篇も入っててこれも面白かった。 | トップページ | 今日は大雨の地方も多かったですが、京都では狐の嫁入りで綺麗な虹が出た。しかも虹のふもと(根元)まではっきり。追いかけたら逃げるが… »
「パソコン・インターネット」カテゴリの記事
- ユニクロとAkamaiのコラボTシャツに書かれているコードを解読してみる。base64でデコードするとbashのシェルスクリプトが出てきて実行すると♥PEACE♥FOR♥ALL♥FOR♥ALL♥PEACE♥FOR♥ALL♥という文字が色付きで正弦波で流れた。(2025.05.01)
- Google Gemini 2.5 Pro experimentalに高周波で使われるSパラメータのTouchstoneファイルを読み込んでプロットするC#コードを書いてもらうと570行のコードができて動いた。ファイルの拡張子snpのnでポート数を判別するが人間を信じないのでデータ数えて確認するのに笑った。(2025.04.21)
- Google ColabのJulia言語で搭載されているGeminiを使って一行もコードを書かずに2次元拡散方程式を差分法で計算してGIFアニメにする。次に同じように2次元波動方程式もやってもらう。(2025.04.09)
- Google ColabのJulia言語で主成分分析(PCA)をやってみる。データはおなじみアヤメ(iris)で、標準で特異値分解(SVD)が入っているのですぐできた。(2025.04.08)
- Google ColabのJulia言語でマンデルブロ集合、仏様のようなブッダブロ、燃える船・バーニングシップフラクタルを描いてみる。どれも計算が速い。(2025.04.04)
「学問・資格」カテゴリの記事
- 「数学がゲームを動かす! ゲームデザインから人工知能まで」を読んだ。面白い!パックマンのアルゴリズムやドラクエの計算式、ドンキーコングはベルレ法でジャンプ、カルマンフィルタ、遺伝的アルゴリズム、セガの線形代数本を書かれた方は理論物理出身など話題が豊富。(2025.05.13)
- 高周波・RFニュース 2025年5月12日 IEEE Microwave Magazineでミリ波ガラス基板・超伝導・液晶などの記事、Pythonの高周波ライブラリscikit-rfがv1.7.0に、Megamagneticsの希土類を使わないミリ波サーキュレータ、CoilcraftのRFインダクタホワイトペーパー(2025.05.12)
- 高周波・RFニュース 2025年5月9日 QorvoがスマートファクトリーにUWB利用の解説、KYOCERA AVXがUHF,VHF向け高方向性カプラ発表、Wireless Broadband Allianceが企業向けWi-Fi 7トライアル結果報告、NXPが第三世代イメージングレーダプロセッサ発表(2025.05.09)
- 高周波・RFニュース 2025年5月8日 6Gにはテラヘルツどころか7-14GHzも向いてないという意見、フィンランド企業が6G推進コンソーシアムRF ECO3発表、Infineonが7P7T内蔵7ch-LNA発表、SpirentがOctoboxにWi-Fi 6/7自動テスト追加(2025.05.08)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年5月12日 IEEE Microwave Magazineでミリ波ガラス基板・超伝導・液晶などの記事、Pythonの高周波ライブラリscikit-rfがv1.7.0に、Megamagneticsの希土類を使わないミリ波サーキュレータ、CoilcraftのRFインダクタホワイトペーパー(2025.05.12)
- 高周波・RFニュース 2025年5月9日 QorvoがスマートファクトリーにUWB利用の解説、KYOCERA AVXがUHF,VHF向け高方向性カプラ発表、Wireless Broadband Allianceが企業向けWi-Fi 7トライアル結果報告、NXPが第三世代イメージングレーダプロセッサ発表(2025.05.09)
- 高周波・RFニュース 2025年5月8日 6Gにはテラヘルツどころか7-14GHzも向いてないという意見、フィンランド企業が6G推進コンソーシアムRF ECO3発表、Infineonが7P7T内蔵7ch-LNA発表、SpirentがOctoboxにWi-Fi 6/7自動テスト追加(2025.05.08)
- 高周波・RFニュース 2025年5月2日 everythingRFが6GのeBook発行、FCCが37GHz帯の共用規則策定、Spirentが5Gクラウドネイティブについてレポート、ローデ・シュワルツが高速差動伝送の測定について解説、Qualcommが2025Q2の決算発表(2025.05.02)
« ハケンアニメ!(文庫版)を読んだ。だいぶ前から存在は知っていたけれどタイトルの意味がよくわからず読んでなかったが、めちゃくちゃよかった!映画見逃した、、、と思ったらまだやってる映画館あった! 文庫版には特別篇も入っててこれも面白かった。 | トップページ | 今日は大雨の地方も多かったですが、京都では狐の嫁入りで綺麗な虹が出た。しかも虹のふもと(根元)まではっきり。追いかけたら逃げるが… »
コメント