0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
1

Решение систем дифференциальных уравнений методом Рунге-Кутты

06.06.2019, 22:33. Показов 5745. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется система диффуров
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases} &  \dot{x1} = -k1{x1}^{2}{x2}^{2}\\&\dot{x2} =-k1{x1}^{2}{x2}^{2}\\ & \dot{x3} = k1{x1}^{2}{x2}^{2}\\ & \dot{x4} = k1{x1}^{2}{x2}^{2}-k2{x4}^{3}\\ &\dot{x5} = k2{x4}^{3}\\\end{cases}
где k1=50.93,k2= 1569.12
Необходимо решить эту систему уравнений методом Рунге-Кутты 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
#include <iostream>
#include <cmath>
#include <fstream>
#include <iomanip>
 
#define k1 50.93
#define k2 1569.12
 
long double f1(long double x1, long double x2)
{
    return -k1*x1*x1*x2*x2;
}
 
long double f2(long double x1, long double x2)
{
    return -k1*x1*x1*x2*x2;
}
long double f3(long double x1, long double x2)
{
    return k1*x1*x1*x2*x2;
}
long double f4(long double x1,long double x2, long double x4)
{
    return k1*x1*x1*x2*x2-k2*x4*x4*x4;
}
long double f5(long double x4)
{
    return k2*x4*x4*x4;
}
using namespace std;
 
 
int main() {
    double h = 0.02;//шаг
    int n=200;
    ofstream fout1("x1.txt");
    ofstream fout2("x2.txt");
    ofstream fout3("x3.txt");
    ofstream fout4("x4.txt");
    ofstream fout5("x5.txt");
 
     long double *x1 = new  long double[n];
   long double *x2 = new  long double[n];
  long  double *x3 = new long  double[n];
  long  double *x4 = new  long double[n];
  long  double *x5 = new  long double[n];
    x1[0]=0.2;x2[0]=0.8,x3[0]=0,x4[0]=0;x5[0]=0;
   long double a1=0, a2=0, a3=0, a4=0, b1=0, b2=0, b3=0, b4=0, c1=0, c2=0, c3=0, c4=0, e1=0, e2=0, e3=0, e4=0, d1=0, d2=0, d3=0, d4=0;
int i=1;
do{
        a1 += h*f1(x1[i-1],x2[i-1]);
        b1 += h*f2(x1[i-1],x2[i-1]);
        c1 += h*f3(x1[i-1],x2[i-1]);
        d1 += h*f4(x1[i-1],x2[i-1],x4[i-1]);
        e1 += h*f5(x4[i-1]);
 
 
        a2 += h*f1(x1[i-1]+a1/2,x2[i-1]+b1/2);
        b2 += h*f2(x1[i-1]+a1/2,x2[i-1]+b1/2);
        c2 += h*f3(x1[i-1]+a1/2,x2[i-1]+b1/2);
        d2 += h*f4(x1[i-1]+a1/2,x2[i-1]+b1/2,x4[i-1]+d1/2);
        e2 += h*f5(x4[i-1]+d1/2);
 
 
        a3 += h*f1(x1[i-1]+a2/2,x2[i-1]+b2/2);
        b3 += h*f2(x1[i-1]+a2/2,x2[i-1]+b2/2);
        c3 += h*f3(x1[i-1]+a2/2,x2[i-1]+b2/2);
        d3 += h*f4(x1[i-1]+a2/2,x2[i-1]+b2/2,x4[i-1]+d2/2);
        e3 += h*f5(x4[i-1]+a2/2);
 
 
        a4 += h*f1(x1[i-1]+a3,x2[i-1]+b3);
        b4 += h*f2(x1[i-1]+a3,x2[i-1]+b3);
        c4 += h*f3(x1[i-1]+a3,x2[i-1]+b3);
        d4 += h*f4(x1[i-1]+a3,x2[i-1]+b3,x4[i-1]+d3);
        e4 += h*f5(x4[i-1]+d3);
 
        x1[i] = x1[i-1]+(a1+2*a2+2*a3+a4)/6;
        x2[i] = x2[i-1]+(b1+2*b2+2*b3+b4)/6;
        x3[i] = x3[i-1]+(c1+2*c2+2*c3+c4)/6;
        x4[i] = x4[i-1]+(d1+2*d2+2*d3+d4)/6;
        x5[i] = x5[i-1]+(e1+2*e2+2*e3+e4)/6;
    i++;
    }while(fabs(fabs(x1[i])-fabs(x1[i-1]))>0.01);
   fout1<<"t    x1"<<endl;
   fout2<<"t    x2"<<endl;
   fout3<<"t    x3"<<endl;
   fout4<<"t    x4"<<endl;
   fout5<<"t    x5"<<endl;
 
 
    double q=0;
    for(int j=0;j<i;j++){
 
        fout1 <<q<<"    "<<x1[j] <<endl;
        fout2 <<q<<"    "<<x2[j] <<endl;
        fout3 <<q<<"    "<<x3[j] <<endl;
        fout4 <<q<<"    "<<x4[j] <<endl;
        fout5 <<q<<"    "<<x5[j] <<endl;
   q+=h;
    }
  fout1.close();
  fout2.close();
  fout3.close();
  fout4.close();
  fout5.close();
 
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2019, 22:33
Ответы с готовыми решениями:

Решение систем диф.уров. методом Рунге-Кутты 4-го порядка
Имеется система из 17-ти дифуров, необходимо решить её методом Рунге-Кутты 4-го порядка. Я написал...

Решение дифференциального уравнения методом Рунге-Кутты
Не могу понять почему не правильно выдает значения. #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt;...

Решение задачи Коши методом Эйлера и Рунге-Кутты
Доброго времени суток всем:) Писал прогу для решения задачи Коши методом Эйлера и Рунге-Кутты на...

Численное интегрирование системы дифференциальных уравнений методом Рунге - Кутта
Доброго времени суток. Пытаюсь разработать функцию для численного интегрирования систем...

5
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
06.06.2019, 22:36  [ТС] 2
Вот решение до 5 секунд
Миниатюры
Решение систем дифференциальных уравнений методом Рунге-Кутты  
0
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
06.06.2019, 23:37  [ТС] 3
x1(0)=0.2;
x2(0)=0.8;
x3(0)=0;
x4(0)=0;
x5(0)=0;

Добавлено через 57 минут
Ошибка найдена, можно закрывать)
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
08.06.2019, 11:08 4
Цитата Сообщение от WhiteBoss Посмотреть сообщение
Ошибка найдена, можно закрывать
п. 4.10. правил "Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ".
0
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
10.06.2019, 20:10  [ТС] 5
Цитата Сообщение от Manowar Посмотреть сообщение
п. 4.10. правил "Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ".
В строках с нахождением кф-тов a1,b1,c1,d1,a2 и тд, не нужен плюс перед знаком равенства)
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
14.06.2019, 10:36 6
WhiteBoss, в строке 69 ошибка.
0
14.06.2019, 10:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2019, 10:36
Помогаю со студенческими работами здесь

Решение диф. уравнения для колебаний методом Рунге—Кутты 4го порядка.(С++)
Ребят помогите пожалуйста решить такое на C++ уравнение x''=(-w^2)*x где w-const там замену...

Решение систем дифференциальных уравнений методами Эйлера
Здравствуйте, дорогие программисты и просто любители языка С++! В принципе, моя будущая...

Функция для численного интегрирования системы дифференциальных уравнений методом Рунге - Кутта
Доброго времени суток. У меня есть вот такая задачка: Разработать функцию для численного...

Решение дифференциальных уравнений методом Эйлера
Не могу найти ошибку, программа не компилируется. #include &lt;iostream&gt; #include &lt;cmath&gt; #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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