我正在Visual Studio 2018中的一个项目上工作,对于这个项目,我想计算一组微分方程(使用Microsoft Research OSLO),然后绘制结果图在ZedGraph中。
要使其正常工作,首先,我想绘制一个简单的颂歌,如果我知道如何做到这一点,就继续努力。 ODE解决方案可以在控制台中运行,它可以显示结果,但图形不能在Windows窗体中使用。
到目前为止,这是我的代码:
GraphPane myPane = zedGraphControl1.GraphPane;
var sol = Ode.RK547M(
0,
new Vector(5.0, 1.0),
(t, x) => new Vector(
x[0] - x[0] * x[1],
-x[1] + x[0] * x[1]));
var points = sol.SolveFromToStep(0, 20, 1).ToArray();
foreach(var p in points)
{
double[] y1 = points.Select(sp => sp.X[0]).ToArray();
double[] t1 = points.Select(sp => sp.T).ToArray();
PointPairList pontpar = new PointPairList();
pontpar.Add(t1, y1);
LineItem vonal1 = myPane.AddCurve("teszt", pontpar, Color.Red, SymbolType.Diamond);
}
我正在尝试从用户指南中绘制第一个示例,我将在此处链接它,但也会弄清楚相关部分。
从“ var sol”行到“ var points”行,它都是预制程序。从foreach循环中,这是我的灾难。
他们使用以下代码块展示了结果:
foreach (var sp in points)
Console.WriteLine("{0}\t{1}", sp.T, sp.X);
因此OSLO使用solPoint作为变量(?),并且指南仅说明了这一点:
ODE解决方法返回此时由包含时间点T和系统状态X的SolPoint结构实例表示的解决方案点的顺序。
我当时在想,除了time(T)之外,系统state(X)可能是2个值,所以我猜应该将其作为两条单独的线相加,但是我该怎么做呢?我正在尝试sp.X [0],也许sp.X 1是另一个吗? (我猜“ sp”和“ p”是任意的)
我什至不确定从solPoint到array的转换是否正确。
任何人都可以帮助我如何将不同的结果(x [0],x 1等)放在图形的不同线上,然后重新绘制时间?我真的是C#的新手,尝试边走边学,但是对于solPoint和数组,我真的很茫然。 (使用Windows窗体)
谢谢!
这是UserGuide(用户指南)的第4页,您可以找到编程模型以及引用的变量说明,然后才能找到示例。User Guide
在这里,我找到了一些有关ZedGraph的参考,它们需要双精度或双精度数组: ZedGraph reference