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を使ってこれもできた。 »
「パソコン・インターネット」カテゴリの記事
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など(2025.12.13)
- 高周波・RFニュース 2025年12月12日 iFixitが水冷スマホRedMagic 11 Proを分解、Qorvoがロボット向けの技術を紹介、SamsungとKTが6Gに向けAI-RANを実証、NordicがnRF9151向けソフトと開発キット発表、Taoglasが6G向けアンテナ設計解説など(2025.12.12)
- 高周波・RFニュース 2025年12月11日 Qualcommが6Gに向けたOBBB法解説、GSMAが欧州のスペクトラム価格についての報告、Menlo Microが防衛向けに高スタンドオフ保護ミリ波スイッチ発表、京セラとローデ&シュワルツがCES2026でミリ波PAAMデモ、iFIxitのスマホアプリ(2025.12.11)
- 高周波・RFニュース 2025年12月10日 Sivers semiconductorとDigiKeyがパートナーシップ締結、u-bloxが車載Bluetothモジュール発表、TDKが車載パワーインダクタ発表、世界の6GHz Wi-Fi普及状況解説(2025.12.10)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年12月13日 5G Americasが米国の5G普及率99%と発表、ZTEが800G Metro Transport Network (MTN) 標準化主導、NordicのnRF9151モジュールがSkylo認証取得、不完全なViaの電気特性解説、QualcommがRISC-VのVentana Micro Systems買収など(2025.12.13)
- 高周波・RFニュース 2025年12月12日 iFixitが水冷スマホRedMagic 11 Proを分解、Qorvoがロボット向けの技術を紹介、SamsungとKTが6Gに向けAI-RANを実証、NordicがnRF9151向けソフトと開発キット発表、Taoglasが6G向けアンテナ設計解説など(2025.12.12)
- 高周波・RFニュース 2025年12月11日 Qualcommが6Gに向けたOBBB法解説、GSMAが欧州のスペクトラム価格についての報告、Menlo Microが防衛向けに高スタンドオフ保護ミリ波スイッチ発表、京セラとローデ&シュワルツがCES2026でミリ波PAAMデモ、iFIxitのスマホアプリ(2025.12.11)
- Google ColabでAPIキーなしにAIモデル(Gemini 2.5 flashなど)が使えるようになっていた。早速電子レンジの動作原理について聞いてみる。正しく2.45GHzは水分子の共振周波数ではない、と答えられた。(2025.12.10)
- 高周波・RFニュース 2025年12月10日 Sivers semiconductorとDigiKeyがパートナーシップ締結、u-bloxが車載Bluetothモジュール発表、TDKが車載パワーインダクタ発表、世界の6GHz Wi-Fi普及状況解説(2025.12.10)
« 高周波・RFニュース 2025年2月19日 3GPPが6Gに向けAI/ML関連作業、Xiaomi 15 ProにQualcommのチップ搭載、CMTの44GHzまでの2ポートUSBネットアナ、MOKOのアセット・社員トラッカーにNordicのチップ採用 | トップページ | いつの間にかMicrosoft 365 Copilotが使えるようになった(6)ダミーデータを作ってもらう。名前、性別、年齢、住所はすぐできた。相関係数がある値になるようなデータを作って、というと高度な分析というのでPythonを使ってこれもできた。 »




コメント