Поместить результаты исследований Microsoft OSLO (C # ode solver) в ZedGraph? - PullRequest
0 голосов
/ 07 октября 2018

Я работаю над проектом в Visual Studio 2018, и для этого проекта я хотел бы вычислить набор дифференциальных уравнений (с помощью Microsoft Research OSLO), а затем отобразить результаты вZedGraph .

Чтобы это сработало, сначала я хочу нарисовать простую оду и продолжить свой путь, если я получу логику того, как это сделать.Решение ODE работает в консоли, оно показывает результаты, но графики не отображаются в Windows Forms.

Вот мой код:

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 возвращают последовательность точек решения, представленных экземплярами структур SolPoint, содержащих момент времени T и состояние системы X в этот момент.

Я думалчто кроме момента времени (T) состояние системы (X) может быть 2 значения, поэтому я думаю, что это должно быть добавлено в виде двух отдельных строк, но как мне это сделать?Я пробовал sp.X [0] и, возможно, sp.X 1 - это другой?('sp' и 'p' произвольны, я думаю)

Я даже не уверен, правильно ли преобразование из solPoint в массив.

Кто-нибудь может помочь, как мне поставить разныерезультаты (x [0], x 1 и т. д.) на отдельных линиях на графике, а затем вычерчиваем график снова?Я действительно новичок в c # и стараюсь учиться по ходу дела, но с solPoint и массивами я действительно в растерянности.(Использование Windows Forms)

Заранее спасибо!

Microsoft Research OSLO

ZedGraph

Вот UserGuide, 4-я страница, на которой вы найдете модель программирования с описанием переменных в кавычках, перед тем как найти пример. Руководство пользователя

ЗдесьЯ нашел ссылку на ZedGraph, требующую двойных или двойных массивов: Ссылка на ZedGraph

...