Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 41

Как отобразить все результаты на графике

16.05.2014, 17:48. Показов 1060. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, имеется программа, которая считает систему уравнений и после расчета должна выводить решение в виде графиков. С этой задачей я частично справился, но проблема заключается в том, что на график выводится только последний результат решения. Рисую через зедграф, пытался метод рисования засунуть в алгоритм решения, ничего не получилось, с записью по точкам аналогично. Как сделать так, чтобы все полученные решения отобразились на графике?
Код программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
namespace Рунге_Кутты_1._4
{
    public partial class Form1 : Form
    {
        double x0 = 1, y0 = 2, z0 = 4, t0 = 0, T = 1, h = 0.001, Eps = 0.000001, fx, fy, fz, xx, yy, zz, Ex, Ey, Ez, Eps1;
        double[] x = new double[4]; double[] y = new double[4]; double[] z = new double[4];
        double[] Kx = new double[4]; double[] Ky = new double[4]; double[] Kz = new double[4];
        bool a;
        public void Calculates()
        {
            System.IO.File.Delete(@"C:\Results\results.dat");
            x[0] = x0; y[0] = y0; z[0] = z0;
            while (t0 <= T)
            {
                for (int i = 0; i <= 3; i++)
                {
                    fx = -y[i] - z[i];
                    fy = x[i] + 0.2 * y[i];
                    fz = 0.2 + (x[i] - 5.7) * z[i];
                    Kx[i] = h * fx;
                    Ky[i] = h * fy;
                    Kz[i] = h * fz;
                    x[1] = x[0] + 0.5 * Kx[0];
                    x[2] = x[0] + 0.5 * Kx[1];
                    x[3] = x[0] + Kx[2];
                    y[1] = y[0] + 0.5 * Ky[0];
                    y[2] = y[0] + 0.5 * Ky[1];
                    y[3] = y[0] + Ky[2];
                    z[1] = z[0] + 0.5 * Kz[0];
                    z[2] = z[0] + 0.5 * Kz[1];
                    z[3] = z[0] + Kz[2];
                }
                Ex = Math.Abs(2 * (Kx[0] - Kx[1] - Kx[2] + Kx[3]) / 3);
                Ey = Math.Abs(2 * (Ky[0] - Ky[1] - Ky[2] + Ky[3]) / 3);
                Ez = Math.Abs(2 * (Kz[0] - Kz[1] - Kz[2] + Kz[3]) / 3);
                Eps1 = Eps / 8;
                a = Check();
                if (a == false)
                {
                    xx = x[0] + (Kx[0] + 2 * Kx[1] + 2 * Kx[2] + Kx[3]) / 6;
                    yy = y[0] + (Ky[0] + 2 * Ky[1] + 2 * Ky[2] + Ky[3]) / 6;
                    zz = z[0] + (Kz[0] + 2 * Kz[1] + 2 * Kz[2] + Kz[3]) / 6;
                    x[0] = xx;
                    y[0] = yy;
                    z[0] = zz;
                    t0 += h;
                    string f1 = Convert.ToString(xx);
                    string f2 = Convert.ToString(yy);
                    string f3 = Convert.ToString(zz);
                    string[] f = new string[] { f1, f2, f3 };
                    string path = @"C:\Results\results.dat";
                    string appendtext = xx + " " + yy + " " + zz + Environment.NewLine;
                    System.IO.File.AppendAllText(path, appendtext);
                }
            }
        }
        public bool Check()
        {
            bool a;
            if (Ex > Eps | Ey > Eps | Ez > Eps)
            {
                a = true;
                h /= 2;
                Calculates();
            }
            else a = false;
            return a;
        }
        public Form1()
        {
            InitializeComponent();
            Calculates();
            DrawGraph();
        }
        public void DrawGraph()
        {
                GraphPane pane = zedGraph.GraphPane;
                pane.CurveList.Clear();
                PointPairList list = new PointPairList();
                for (t0 = 0; t0 <= T; t0 += h)
                {
                    list.Add(t0, x[0]);
                }
                LineItem MyCurve = pane.AddCurve("x(t)", list, Color.Blue, SymbolType.None);
                zedGraph.AxisChange();
                zedGraph.Invalidate();
        }
    }
}
Добавлено через 54 минуты
да, спасибо, что перенесли, забыл про этот раздел. если поможет это, то пытался метод рисования засунуть в цикл решения и почему-то после выполнения этого метода (рисования) цикл прекращался
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2014, 17:48
Ответы с готовыми решениями:

Как отобразить на графике все данные за определенную дату?
Здравствуйте, у меня есть код для линейного графика. Ось x-дата, но у меня для одной даты несколько записей, как сделать, чтобы...

Как отобразить значения на графике?
Добрый день, подскажите пожалуйста как отобразить эти значение на графике в матлаб как на рисунке (все синие цифры) спасибо...

Как на графике отобразить курс валюты/монеты?
У меня есть курс определенной монеты, которая постоянно меняется и обновляется. Я отправляю гет запрос на страницу где её и получаю. Вот...

4
29 / 29 / 8
Регистрация: 16.10.2012
Сообщений: 170
17.05.2014, 09:31
у меня тоже была такая проблема , решил вот так
Вложения
Тип файла: zip Курсовой проект.zip (105.3 Кб, 10 просмотров)
0
Заблокирован
17.05.2014, 15:12
mr07th, скиньте архивом проект, так быстрее помогут.
0
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 41
18.05.2014, 11:56  [ТС]
Dot_mmoru, к сожалению, не удалось скомпилировать ввиду старой версии студии ) так проглядел код и, увы ввиду малых знаний, не особо понял там :< циклы увидел в обработчике событий на кнопках и так полагаю, там как раз идет добавка значений хД
Вложения
Тип файла: rar Runge-Kutta 1.4.rar (327.4 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 41
18.05.2014, 12:14  [ТС]
Так, проблема решена путем объявления классов в глобальной форме хД в общем кому может пригодится
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
namespace Рунге_Кутты_1._4
{
    public partial class Form1 : Form
    {
        double x0 = 1, y0 = 2, z0 = 4, t0 = 0, T = 1, h = 0.001, Eps = 0.000001, fx, fy, fz, xx, yy, zz, Ex, Ey, Ez, Eps1;
        double[] x = new double[4]; double[] y = new double[4]; double[] z = new double[4];
        double[] Kx = new double[4]; double[] Ky = new double[4]; double[] Kz = new double[4];
        GraphPane pane;
        PointPairList points;
        LineItem myCurve;
        double divBy3 = 1 / 3.0;
        double divBy6 = 1 / 6.0;
        double divBy8 = 1 / 8.0;
        public void Calculates()
        {
            if (System.IO.File.Exists(@"C:\Results\results.dat"))
            {
                System.IO.File.Delete(@"C:\Results\results.dat");
            }
            x[0] = x0; y[0] = y0; z[0] = z0;
            while (t0 <= T)
            {
                for (int i = 0; i <= 3; i++)
                {
                    fx = -y[i] - z[i];
                    fy = x[i] + 0.2 * y[i];
                    fz = 0.2 + (x[i] - 5.7) * z[i];
                    Kx[i] = h * fx;
                    Ky[i] = h * fy;
                    Kz[i] = h * fz;
                    x[1] = x[0] + 0.5 * Kx[0];
                    x[2] = x[0] + 0.5 * Kx[1];
                    x[3] = x[0] + Kx[2];
                    y[1] = y[0] + 0.5 * Ky[0];
                    y[2] = y[0] + 0.5 * Ky[1];
                    y[3] = y[0] + Ky[2];
                    z[1] = z[0] + 0.5 * Kz[0];
                    z[2] = z[0] + 0.5 * Kz[1];
                    z[3] = z[0] + Kz[2];
                }
                Ex = Math.Abs(2 * (Kx[0] - Kx[1] - Kx[2] + Kx[3]) * divBy3);
                Ey = Math.Abs(2 * (Ky[0] - Ky[1] - Ky[2] + Ky[3]) * divBy3);
                Ez = Math.Abs(2 * (Kz[0] - Kz[1] - Kz[2] + Kz[3]) * divBy3);
                Eps1 = Eps * divBy8;
                if (Check() == false)
                {
                    xx = x[0] + (Kx[0] + 2 * Kx[1] + 2 * Kx[2] + Kx[3]) * divBy6;
                    yy = y[0] + (Ky[0] + 2 * Ky[1] + 2 * Ky[2] + Ky[3]) * divBy6;
                    zz = z[0] + (Kz[0] + 2 * Kz[1] + 2 * Kz[2] + Kz[3]) * divBy6;
                    x[0] = xx;
                    y[0] = yy;
                    z[0] = zz;
                    t0 += h;
                    string f1 = Convert.ToString(xx);
                    string f2 = Convert.ToString(yy);
                    string f3 = Convert.ToString(zz);
                    string[] f = new string[] { f1, f2, f3 };
                    string path = @"C:\Results\results.dat";
                    string appendtext = xx + " " + yy + " " + zz + Environment.NewLine;
                    System.IO.File.AppendAllText(path, appendtext);
 
                    points.Add(t0, x[0]);
                }
            }
        }
        public bool Check()
        {
            bool a;
            if (Ex > Eps | Ey > Eps | Ez > Eps)
            {
                a = true;
                h *= 0.5;
                Calculates();
            }
            else a = false;
            return a;
        }
        public Form1()
        {
            InitializeComponent();
 
            pane = zedGraph.GraphPane;
            points = new PointPairList();
            myCurve = pane.AddCurve("x(t)", points, Color.Blue, SymbolType.None);
 
            Calculates();
 
            zedGraph.AxisChange();
            zedGraph.Invalidate();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2014, 12:14
Помогаю со студенческими работами здесь

Сравнить результаты от программы и готовой функции на одном графике!как сделать?
Решение дифференцального уравнения 1-ого порядка по методу Эйлера. function sad=eiler % %diff(y)=x.^3-2.*y./x -заданная функция ...

Как отобразить работу микрофона в графике или шкале?
Возможно не правильно задал вопрос в теме, постараюсь очень понятно объяснить. У меня есть диктофон написанный в делфи, и теперь я хочу...

Как в окне msgbox отобразить результаты запроса
Задание: Отобразить информацию о введенном пользователем студенте в окне MSGBOX. Поиск осуществляется по номеру зачетной книжки(используя...

Как в графике отобразить точки пересечения, а также сумму точки x+y
Как в графике отобразить точки пересечения? А также также рядом указать сумму точки x+y как в примере. То есть пример точки 31=30+1 или...

Отобразить невязки на графике
Есть координаты точек Xim = ; Yim = ; и есть, назовем их невязки для каждой точки. Res_x = ; Res_y = ; Задача, нужно чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru