Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.04.2018
Сообщений: 6
1

Адаптировать код под систему из 4х уравнений

30.05.2021, 10:20. Показов 316. Ответов 0

Author24 — интернет-сервис помощи студентам
Есть готовый код. Препод посмотрел и дал задание: Решите систему на отрезке [0,2]:
y1'=y2+y1^2+y2^2-1, y2'=-y1, y3'=y2*y4, y4'=y1-y3, y1(0)=0, y2(0)=1, y3(0)=0, y4(0)=1

Я сам не могу понять, что нужно изменить, чтобы решить систему из 4 уравнений, до этого решалась только система из двух

Ниже вставил код и скрины того, как выглядит прога и что я кидал преподу

Помогите пожалуйста, а то сессию не закрою
Адаптировать код под систему из 4х уравнений


Адаптировать код под систему из 4х уравнений


Адаптировать код под систему из 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
 
namespace lab11
{
    public partial class Form1 : Form
    {
        static double h;
        static double e0;
        static double a, b;
        static double[] x, y, y1;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Button1_Click(object sender, EventArgs e)
        {
            label6.Text = "";
            chart1.Series[0].Points.Clear();
            chart1.Series[1].Points.Clear();
            chart1.Series[2].Points.Clear();
            chart1.Series[3].Points.Clear();
            a = Double.Parse(textBox1.Text);
            b = Double.Parse(textBox2.Text);
            string path = "1.txt";
            StreamWriter w = new StreamWriter(path);
            if (radioButton1.Checked)
            {
                h = Double.Parse(textBox3.Text);
                int L = (int)((b - a) / h) + 1;
                x = new double[L];
                y = new double[L];
                y[0] = Double.Parse(textBox5.Text);
                for (int i = 0; i < L; i++)
                    x[i] = a + i * h;
                if (textBox6.Text == "")
                {
                    double[] RealY = new double[L];
                    for (int i = 0; i < L; i++)
                    {
                        RealY[i] = Math.Pow(x[i], 3) + x[i];
                    }
                    for (int i = 1; i < L; i++)
                    {
                        double k1, k2, k3, k4;
                        k1 = h * function1(x[i - 1], y[i - 1]);
                        k2 = h * function1(x[i - 1] + h / 2, y[i - 1] + k1 / 2);
                        k3 = h * function1(x[i - 1] + h / 2, y[i - 1] + k2 / 2);
                        k4 = h * function1(x[i - 1] + h, y[i - 1] + k3);
                        y[i] = y[i - 1] + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
                    }
                    for (int i = 0; i < L; i++)
                    {
                        chart1.Series[0].Points.AddXY(x[i], y[i]);
                    }
                    double norm = 0;
                    for (int i = 0; i < L; i++)
                    {
                        if (norm < Math.Abs(y[i] - RealY[i]))
                            norm = Math.Abs(y[i] - RealY[i]);
                    }
                }
                else
                {
                    y1 = new double[L];
                    y1[0] = Double.Parse(textBox6.Text);
                    for (int i = 1; i < L; i++)
                    {
                        double k1, k2, k3, k4;
                        double q1, q2, q3, q4;
                        k1 = h * function2(x[i - 1], y[i - 1], y1[i - 1]);
                        q1 = h * function3(x[i - 1], y[i - 1], y1[i - 1]);
                        k2 = h * function2(x[i - 1], y[i - 1] + k1 / 2, y1[i - 1] + q1 / 2);
                        q2 = h * function3(x[i - 1], y[i - 1] + k1 / 2, y1[i - 1] + q1 / 2);
                        k3 = h * function2(x[i - 1], y[i - 1] + k1 / 2, y1[i - 1] + q2 / 2);
                        q3 = h * function3(x[i - 1], y[i - 1] + k1 / 2, y1[i - 1] + q2 / 2);
                        k4 = h * function2(x[i - 1], y[i - 1] + k3, y1[i - 1] + q3);
                        q4 = h * function3(x[i - 1], y[i - 1] + k3, y1[i - 1] + q3);
                        y[i] = y[i - 1] + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
                        y1[i] = y1[i - 1] + (q1 + 2 * q2 + 2 * q3 + q4) / 6;
                    }
                    double[] RealY = new double[L];
                    double[] RealY1 = new double[L];
                    for (int i = 0; i < L; i++)
                    {
                        RealY[i] = Math.Cos(x[i]);
                        RealY1[i] = Math.Sin(x[i]);
                    }
                    double norm = 0;
                    for (int i = 0; i < L; i++)
                    {
                        if (norm < Math.Abs(y[i] - RealY[i]))
                            norm = Math.Abs(y[i] - RealY[i]);
                        if (norm < Math.Abs(y1[i] - RealY1[i]))
                            norm = Math.Abs(y1[i] - RealY1[i]);
                    }
                    label6.Text = norm.ToString();
                    w.WriteLine("X           Y           Y1          RealY       RealY1");
                    for (int i = 0; i < L; i++)
                    {
                        chart1.Series[0].Points.AddXY(x[i], y[i]);
                        chart1.Series[1].Points.AddXY(x[i], y1[i]);
                        chart1.Series[2].Points.AddXY(x[i], RealY[i]);
                        chart1.Series[3].Points.AddXY(x[i], RealY1[i]);
                        w.WriteLine(x[i].ToString("0.000000") + "\t" + y[i].ToString("0.000000") + "\t" + y1[i].ToString("0.000000") + "\t" + RealY[i].ToString("0.000000") + "\t" + RealY1[i].ToString("0.000000"));
                    }
                }
            }
            else
            {
                double X = a;
                double Y = Double.Parse(textBox5.Text);
                double Y1 = Double.Parse(textBox6.Text);
                e0 = Double.Parse(textBox4.Text);
                List<double> Xlist = new List<double>();
                List<double> Ylist = new List<double>();
                List<double> Y1list = new List<double>();
                double k1, k2, k3, k4;
                double q1, q2, q3, q4;
                while (X<=b)
                {
                    Xlist.Add(X);
                    Ylist.Add(Y);
                    Y1list.Add(Y1);
                    if (X == b) break;
                    h = CalcH(X,Y,Y1);
                    k1 = h * function2(X, Y, Y1);
                    q1 = h * function3(X, Y, Y1);
                    k2 = h * function2(X + h / 2, Y + k1 / 2, Y1 + q1 / 2);
                    q2 = h * function3(X + h / 2, Y + k1 / 2, Y1 + q1 / 2);
                    k3 = h * function2(X + h / 2, Y + k2 / 2, Y1 + q2 / 2);
                    q3 = h * function3(X + h / 2, Y + k2 / 2, Y1 + q2 / 2);
                    k4 = h * function2(X + h, Y + k3, Y1 + q3);
                    q4 = h * function3(X + h, Y + k3, Y1 + q3);
                    Y += (k1 + 2 * k2 + 2 * k3 + k4) / 6;
                    Y1 += (q1 + 2 * q2 + 2 * q3 + q4) / 6;
                    if (X + h > b)
                        X = b;
                    else X += h;
                }
                double[] RealY = new double[Ylist.Count];
                double[] RealY1 = new double[Ylist.Count];
                for (int i = 0; i < Ylist.Count; i++)
                {
                    RealY[i] = Math.Cos(Xlist[i]);
                    RealY1[i] = Math.Sin(Xlist[i]);
                }
                double norm = 0;
                for (int i = 0; i < Ylist.Count; i++)
                {
                    if (norm < Math.Abs(Ylist[i] - RealY[i]))
                        norm = Math.Abs(Ylist[i] - RealY[i]);
                    if (norm < Math.Abs(Y1list[i] - RealY1[i]))
                        norm = Math.Abs(Y1list[i] - RealY1[i]);
                }
                label6.Text = norm.ToString();
                w.WriteLine("X           Y           Y1          RealY       RealY1");
                for (int i = 0; i < Ylist.Count; i++)
                {
                    chart1.Series[0].Points.AddXY(Xlist[i], Ylist[i]);
                    chart1.Series[1].Points.AddXY(Xlist[i], Y1list[i]);
                    chart1.Series[2].Points.AddXY(Xlist[i], RealY[i]);
                    chart1.Series[3].Points.AddXY(Xlist[i], RealY1[i]);
                    w.WriteLine(Xlist[i].ToString("0.000000") + "\t" + Ylist[i].ToString("0.000000") + "\t" + Y1list[i].ToString("0.000000") + "\t" + RealY[i].ToString("0.000000") + "\t" + RealY1[i].ToString("0.000000"));
                }
            }
            w.Close();
        }
 
        public double function2(double x, double y1, double y2)
        {
            return -y2;
        }
        public double function3(double x, double y1, double y2)
        {
            return y1;
        }
        public double function1(double x, double y)
        {
            return -30 * y;
        }
        public double CalcH(double x, double y, double y1)
        {
            int count = 0;
            double h = Math.Abs(x-b);
            double E,E1,E2;
            double k1, k2, k3, k4;
            double q1, q2, q3, q4;
            while (count < 10000)
            {
                k1 = h * function2(x, y, y1);
                q1 = h * function3(x, y, y1);
                k2 = h * function2(x + h / 2, y + k1 / 2, y1 + q1 / 2);
                q2 = h * function3(x + h / 2, y + k1 / 2, y1 + q1 / 2);
                k3 = h * function2(x + h / 2, y + k2 / 2, y1 + q2 / 2);
                q3 = h * function3(x + h / 2, y + k2 / 2, y1 + q2 / 2);
                k4 = h * function2(x + h, y + k3, y1 + q3);
                q4 = h * function3(x + h, y + k3, y1 + q3);
                E1 = Math.Abs(2 * (k1 - k2 - k3 + k4) / 3);
                E2 = Math.Abs(2 * (q1 - q2 - q3 + q4) / 3);
                if (E1 < E2)
                    E = E2;
                else E = E1;
                if (E > e0)
                    h /= 2;                
                else break;
                count++;
            }
            return h;
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2021, 10:20
Ответы с готовыми решениями:

Как адаптировать под 32-ух битную систему
Приветствую! Создал программу, но она запускается только на 64 битной ОС. Пи попытке запустить на...

Как адаптировать код WMI под код Visual Studio 2010?
Доброе время суток всем. Подскажите пожалуйста для новичка, что бы можно было разобраться, как...

Адаптировать код под Dev C++
using System; //программа перевода градусов Фаренгейта в градусы Цельсия namespace p1 { ...

Адаптировать код под цикл while
есть прога, её нужно адаптировать под цикл while #include&lt;stdio.h&gt; #include&lt;math.h&gt;...

0
30.05.2021, 10:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2021, 10:20
Помогаю со студенческими работами здесь

Адаптировать код под opendialog
Здравствуйте могли бы вы помочь адаптировать код под opendialog вот сам код Var SL: TStringList;...

Адаптировать код Visual под Borland
Пожалуйста помогите, есть несколько файлов с кодами, которые были написаны на Визуал, нужно...

Не получается адаптировать код на JavaScript под NN.
Если нажать на 'Choose a color' на следующей странице ...

Как адаптировать js код под php
Здравствуйте я новичок в php и у меня возник вопрос Как перенести функций из js в php У меня...

Адаптировать код функции под Делфи
int fibonacci(int n) { if (n == 0) return 0; else if (n == 1) return 1; int memo =...

Чтение файлов - адаптировать код под ABC
в общем, целый день разбирался в чем беда. имеем один кусок кода в программе type ES = record...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru