将Microsoft Research OSLO(C#ode求解器)结果放入ZedGraph?

时间:2018-10-07 17:07:08

标签: c# visual-studio ode differential-equations zedgraph

我正在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窗体)

谢谢!

Microsoft Research OSLO

ZedGraph

这是UserGuide(用户指南)的第4页,您可以找到编程模型以及引用的变量说明,然后才能找到示例。User Guide

在这里,我找到了一些有关ZedGraph的参考,它们需要双精度或双精度数组: ZedGraph reference

0 个答案:

没有答案