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を使ってこれもできた。 »
「パソコン・インターネット」カテゴリの記事
- Xのタイムラインが何かランダムウォークのガウス分布じゃなくて逆正弦法則のように見えてきている…仕方ないのでJulia言語でモンテカルロシミュレーションで試行回数を変えて逆正弦法則とガウス分布を見る。(2025.07.16)
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- Gemini CLIが使えるようになっていたので早速VSCodeのターミナルから使って、JavaScriptで連立一次方程式を計算するコードを書いてもらった。普通にガウスの消去法で計算するhtmlを作ってくれた。(2025.06.27)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年7月17日 IEEE Microwave Magazineで地上監視レーダ解説など、Microwave Journalでミリ波AiPのOTA測定解説など、5G Americasが5G Advancedホワイトペーパー発行、TDKのAI 微細欠陥検出edgeRX Vision、IEEE Trans. on THz の今月号発行(2025.07.17)
- Xのタイムラインが何かランダムウォークのガウス分布じゃなくて逆正弦法則のように見えてきている…仕方ないのでJulia言語でモンテカルロシミュレーションで試行回数を変えて逆正弦法則とガウス分布を見る。(2025.07.16)
- 高周波・RFニュース 2025年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年7月17日 IEEE Microwave Magazineで地上監視レーダ解説など、Microwave Journalでミリ波AiPのOTA測定解説など、5G Americasが5G Advancedホワイトペーパー発行、TDKのAI 微細欠陥検出edgeRX Vision、IEEE Trans. on THz の今月号発行(2025.07.17)
- Xのタイムラインが何かランダムウォークのガウス分布じゃなくて逆正弦法則のように見えてきている…仕方ないのでJulia言語でモンテカルロシミュレーションで試行回数を変えて逆正弦法則とガウス分布を見る。(2025.07.16)
- 高周波・RFニュース 2025年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
- 高周波・RFニュース 2025年7月2日 5G Americasが6Gに向けセンシングと通信ホワイトペーパー発行、KYOCERA AVXが3dBハイブリッドカプラ発表、TDKが車載薄膜インダクタ発表、Nordicが1次電池向けPMIC発表、ローデ・シュワルツの6GとAI/ML解説記事(2025.07.02)
« 高周波・RFニュース 2025年2月19日 3GPPが6Gに向けAI/ML関連作業、Xiaomi 15 ProにQualcommのチップ搭載、CMTの44GHzまでの2ポートUSBネットアナ、MOKOのアセット・社員トラッカーにNordicのチップ採用 | トップページ | いつの間にかMicrosoft 365 Copilotが使えるようになった(6)ダミーデータを作ってもらう。名前、性別、年齢、住所はすぐできた。相関係数がある値になるようなデータを作って、というと高度な分析というのでPythonを使ってこれもできた。 »
コメント