Visual C#(C_sharp)用のグラフプロットライブラリScottPlotを使う(1) 数値計算ライブラリMath.NET Numericsと組み合わせてルンゲクッタ法でローレンツ方程式を計算、図示して拡大縮小移動してみる。
Visual C#でグラフを描くには.NET framework 4.xならExcelのグラフのようなものが描けるMS Chartが使える。
https://atmarkit.itmedia.co.jp/ait/articles/1007/22/news111.html
しかしもうframeworkを使ってる場合じゃない。今は.NET 9が出ている時代。
サーバー アプリ用 .NET と .NET Framework
しかし残念ながら.NETではChartが使えない。そこで使えそうなライブラリを探すと
ScottPlot
OxyPlot
などがあった。とりあえずScottPlotの方が情報量多そうなのでこっちを使ってみる。今回はVisual C#の.NET 8でやってみる。
まず、インストールはNuGetで簡単にできる。ScottPlot.WinFormsを選択。
するとツールボックスにFormsPlotが現れるので、これをChartと同じようにフォームに貼り付けるだけ。
何のグラフを描こうか、と思ったがここはMath.NET Numericsを使ってルンゲクッタ法でローレンツ方程式を描いてみよう。
ソースコードはこんな感じで。
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.OdeSolvers;
namespace PlotRungeKutta01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var axis = formsPlot1.Plot.Axes;
axis.Bottom.Label.Text = "X";
axis.Bottom.TickLabelStyle.FontSize = 21;
axis.Left.Label.Text = "Y, Z";
axis.Left.TickLabelStyle.FontSize = 21;
axis.Title.Label.Text = "Lorenz Equation";
axis.Title.Label.FontSize = 32;
axis.SetLimits(-20, 20, -30, 50);
}
private void button1_Click(object sender, EventArgs e)
{
double dt = 0.01;
double tmax = 200.0;
int n = Convert.ToInt32(tmax / dt);
var xs = new double[n];
var ys = new double[n];
var zs = new double[n];
var t = MathNet.Numerics.Generate.LinearSpaced(n, 0.0, tmax);
var x0 = Vector<double>.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++)
{
xs[i] = x[i][0];
ys[i] = x[i][1];
zs[i] = x[i][2];
}
var xy = formsPlot1.Plot.Add.ScatterLine(xs, ys);
xy.LegendText = "Y";
var xz = formsPlot1.Plot.Add.ScatterLine(xs, zs);
xz.LegendText = "Z";
formsPlot1.Plot.Legend.FontSize = 21;
formsPlot1.Plot.ShowLegend();
formsPlot1.Plot.Axes.AutoScale();
formsPlot1.Refresh();
}
Vector<double> Func(double t, Vector<double> 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<double>.Build.DenseOfArray(new double[] { x_dot, y_dot, z_dot });
}
}
}
|
結果を動画にしたもの。拡大縮小移動が簡単にできる。
このScottPlotでいろいろやってみよう。
« 高周波・RFニュース 2025年2月19日 3GPPが6Gに向けAI/ML関連作業、Xiaomi 15 ProにQualcommのチップ搭載、CMTの44GHzまでの2ポートUSBネットアナ、MOKOのアセット・社員トラッカーにNordicのチップ採用 | トップページ | いつの間にかMicrosoft 365 Copilotが使えるようになった(6)ダミーデータを作ってもらう。名前、性別、年齢、住所はすぐできた。相関係数がある値になるようなデータを作って、というと高度な分析というのでPythonを使ってこれもできた。 »
「パソコン・インターネット」カテゴリの記事
- Julia言語でタッパーの自己言及式(不等式を計算して図示するとまた不等式になる)を描いてみる。543桁の数を含む計算が必要だが、デフォルトで任意精度演算が可能なので容易にできた。(2025.03.11)
- UnityでVisual C#用の常微分方程式ソルバーOpen Solving Library for ODEs(OSLO)を使う(3)三体問題の周期解としてまずは有名な8の字を描くものをやってみる。(2025.03.14)
- UnityでVisual C#用の常微分方程式ソルバーOpen Solving Library for ODEs(OSLO)を使う(2)ブルースカイ・カタストロフィを生じるGavrilov Shilnikov modelを計算してDormand&PrinceのRK547Mで計算して玉を動かして軌跡を付ける。ぐるぐる回っていたと思ったら突然広がって戻る。(2025.03.12)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年3月14日 Microwave Journalでテラヘルツデバイス製造解説、IgnionのRF、アンテナ向けAIツールOxionが2.0に、TIが1.38mm²の超小型MCU発表、IntelのCEOはLip-Bu Tanに。(2025.03.14)
- 高周波・RFニュース 2025年3月13日 NordicとQorvoがAliroとMatterのリファレンスアプリケーション提供、TSMCとMediaTekがパワーアンプと電源管理ユニット統合、3GPPのTSG RANの議長がSamsungの人に、Silicon Labsが超小型Bluetooth Soc, QuectelがWi-Fi/BTモジュール発表(2025.03.13)
- 高周波・RFニュース 2025年3月12日 iFixitが任天堂Alarmoを分解、なんとSocionextの24GHzミリ波センサ’積んでる!Next G Allianceが6Gに向けたデジタルツインとFWAのホワイトペーパー発行、Qorvoが統合型UWB SoC発表、SemtechがLora、u-bloxとTelitがGNSSモジュール発表(2025.03.12)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年3月14日 Microwave Journalでテラヘルツデバイス製造解説、IgnionのRF、アンテナ向けAIツールOxionが2.0に、TIが1.38mm²の超小型MCU発表、IntelのCEOはLip-Bu Tanに。(2025.03.14)
- 高周波・RFニュース 2025年3月13日 NordicとQorvoがAliroとMatterのリファレンスアプリケーション提供、TSMCとMediaTekがパワーアンプと電源管理ユニット統合、3GPPのTSG RANの議長がSamsungの人に、Silicon Labsが超小型Bluetooth Soc, QuectelがWi-Fi/BTモジュール発表(2025.03.13)
- 高周波・RFニュース 2025年3月12日 iFixitが任天堂Alarmoを分解、なんとSocionextの24GHzミリ波センサ’積んでる!Next G Allianceが6Gに向けたデジタルツインとFWAのホワイトペーパー発行、Qorvoが統合型UWB SoC発表、SemtechがLora、u-bloxとTelitがGNSSモジュール発表(2025.03.12)
« 高周波・RFニュース 2025年2月19日 3GPPが6Gに向けAI/ML関連作業、Xiaomi 15 ProにQualcommのチップ搭載、CMTの44GHzまでの2ポートUSBネットアナ、MOKOのアセット・社員トラッカーにNordicのチップ採用 | トップページ | いつの間にかMicrosoft 365 Copilotが使えるようになった(6)ダミーデータを作ってもらう。名前、性別、年齢、住所はすぐできた。相関係数がある値になるようなデータを作って、というと高度な分析というのでPythonを使ってこれもできた。 »
コメント