Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.94
Limmer
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 5
23.01.2014, 13:23     Решение системы дифференциальных уравнений методом Эйлера #1
В интернете нашел похожий код, но для 1 уравнения, может кто помочь сделать для 2? Тоесть для системы
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
#include "stdafx.h"
 
 
#include<iostream>
using namespace std;
void func(double& Xi, double& Yi,double kx, double ky, double h);
int main()
{
double h,Xi,Yi,Xkon,kx,ky;
int n;
cout<<"\t"<<"\t"<<"******************************* *****************n";
cout<<"\t"<<"\t"<<"* * "<<"\n";
cout<<"\t"<<"\t"<<"* Reshenie difurov 1 poryadka methodom Eulera *"<<"\n"; 
cout<<"\t"<<"\t"<<"******************************* ******************" ;
cout<<endl;
cout<<"Vvedite nachaloe znachenie intervala [a,b]=";
cin>>Xi;
cout<<"Vvedite konechoe znachenie intervala [a,b]=";
cin>>Xkon;
cout<<"Vvedite chislo shagov=";
cin>>n;
h=(Xkon- Xi)/n;
cout<<endl;
cout<<"Vvedite nachalnoe uslovie y=";
cin>>Yi;
cout<<"Vvedite koefitsient pri x=";
cin>>kx;
cout<<"Vvedite koefitsient pri y=";
cin>>ky;
cout<<"|Interval|Chislo shagov|Shag prirasheniya|Nacalnoe Y|Uravnenie vida:| "<<"\n";
cout<<"|--------|-------------|-----------------|----------|---------------|"<<"\n";
cout<<"|"<<"["<<Xi<<","<<Xkon<<"]" <<" |"<<n<<" |"<<h<<" |"<<Yi<<" |"<<"y'="<<kx<<"x"<<"+"<<ky<<"y"<<" |"<<"\n";
cout<<endl;
cout<<endl;
for (int i=1;i<=n;i++)
{ 
func(Xi,Yi,kx,ky,h);
cout<<"\n";
}
return 0;
}
 
void func(double& Xi, double& Yi, double kx, double ky, double h)
{
double f1,Yprom,a,Xprom;
f1=(kx*Xi)+(ky*Yi);
Yprom=Yi+f1*(h/2);
Xprom=Xi+h/2;
a=kx*Xprom-Yprom;
Yi=Yi+a*h;
cout<<"\t"<<"\t"<<"Interval x="<<Xi<<"\t"<<" Resultat y="<<Yi;
Xi=Xi+h;
}
Миниатюры
Решение системы дифференциальных уравнений методом Эйлера  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 13:23     Решение системы дифференциальных уравнений методом Эйлера
Посмотрите здесь:

C++ Решение систем дифференциальных уравнений методами Эйлера
Решение системы уравнений компактным методом исключений C++
решение системы уравнений методом Гауса C++
Функция для численного интегрирования системы дифференциальных уравнений методом Рунге - Кутта C++
C++ Решение системы линейных уравнений матричным методом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,912
23.01.2014, 14:08     Решение системы дифференциальных уравнений методом Эйлера #2
Цитата Сообщение от Limmer Посмотреть сообщение
В интернете нашел похожий код, но для 1 уравнения, может кто помочь сделать для 2? Тоесть для системы
Уверен,что в интернете можно найти код и для системы.Да что там в интернете,думаю и на этом форуме,есть не одна реализация.
Limmer
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 5
23.01.2014, 14:25  [ТС]     Решение системы дифференциальных уравнений методом Эйлера #3
Цитата Сообщение от S_el Посмотреть сообщение
Уверен,что в интернете можно найти код и для системы.Да что там в интернете,думаю и на этом форуме,есть не одна реализация.
В том то и беда что использовал поиск но ничего не нахожу. Запросы "метод эйлера для систем уравнений" и "модифицированный метод эйлера" ни к чему не приводят
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,912
23.01.2014, 14:38     Решение системы дифференциальных уравнений методом Эйлера #4
Находите по этим формулам:

http://www.cyberforum.ru/cgi-bin/latex.cgi?{y}_{n+1}={y}_{n}+h*(2*{y}_{n}-{z}_{n}-{{x}_{n}}^{2})\\<br />
{z}_{n+1}={z}_{n}+h*(-3*{y}_{n}+{z}_{n}+{x}_{n})\\
Nallikaea
Сообщений: n/a
06.10.2014, 22:29     Решение системы дифференциальных уравнений методом Эйлера #5
Надеюсь поможет кому-то. Моё решение системы 2х уравнений методом Эйлера и методом Эйлера с пересчетом. За красоту написания не судите ибо я физик, а не программист
(Для проверки точное решение первого 2сhx-1.)
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
#include <iostream>
#include <cmath>
#include <fstream>
 
using namespace std;
 
double dy_dx (double, double, double);
double dz_dx (double, double, double);
double Euler (int, double, double, double, double, double);
double Euler_modify (int, double, double, double, double, double, double, double);
 
int main()
{
    
    double a, b; 
    int N;
    double x=0, y=1, yi, z=0, zi, y1;
    cout<<"Set the interval from a to b:"<<endl;
    cin>>a>>b;  
    cout<<"Set the number of partition points:"<<endl;
    cin>>N; cout<<endl;
    double h=(b-a)/N;
    
    Euler (N, x, y, z, h, y1);
    Euler_modify (N, x, y, z, yi, zi, h, y1);
    
    cout<<"All done! Check your output file!"<<endl;
    return 0;
}
 
double dy_dx (double x, double y, double z)
{
    return x-z;
}
double dz_dx (double x, double y, double z)
{
    return -y;
}
double Euler (int N, double x, double y, double z, double h, double y1)
{
    int i=0;
    ofstream out("out.txt");
    while (i<=N)
    {
        
        y1=y+dy_dx(x, y, z)*h;
        z=z+dz_dx(x, y, z)*h;
        y=y1;
        x=x+h;
        
        out<<x<<" "<<y<<" "<<z<<endl;
        
        i++;
    }
    out.close();
    
};
double Euler_modify (int N, double x, double y, double z, double yi, double zi, double h, double y1)
{
    int i=0;
    ofstream out("out_m.txt");
    while (i<=N)
    {
        
        yi=y+dy_dx(x, y, z)*h;
        zi=z+dz_dx(x, y, z)*h;
        y1=y+(dy_dx(x, y, z)+dy_dx(x+h, yi, zi))*h/2;
        z=z+(dz_dx(x, y, z)+dz_dx(x+h, yi, zi))*h/2;
        y=y1;
        x=x+h;
        
        out<<x<<" "<<y<<" "<<z<<endl;
        
        i++;
    }
    out.close();
    
};
Yandex
Объявления
06.10.2014, 22:29     Решение системы дифференциальных уравнений методом Эйлера
Ответ Создать тему
Опции темы

Текущее время: 15:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru