Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SVD102
0 / 0 / 0
Регистрация: 12.10.2015
Сообщений: 207
#1

Исправить код в методе рунге кутты 4 порядка ля системы ДУ 1 порядка - C++

18.04.2016, 14:47. Просмотров 395. Ответов 5
Метки с++ (Все метки)

Вот код для метода рунге кутты 4 порядка для систему ДУ 1 порядка. Вроде все верно, но ответ не правильный. В чем ошибка. Подскажите пожалуйста. Ответ должен быть x11 = -0,9 x22 = 0,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
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
 
double f1(double x1, double x2, double t)// первая функция 
{
    return(-52*x1-100*x2+exp(-t));               
}
 
double f2(double x1, double t)// вторая функция
{
    return(x1+sin(t));               
} 
int main()
{
    setlocale(LC_ALL,"rus");
    
    double h;
    //cout << " Введите  h = ";//шаг
    //cin >> h;
    //int n;
    //n=10000;
    //cout << "Введите n = ";//число точек
    //cin >> n;
    double k1=0;
    double k2=0;
    double k3=0;
    double k4=0;
    double m1=0;
    double m2=0;
    double m3=0;
    double m4=0;
    double x1=0;
    double x2=0;
    double x11=0;
    double x22=0;
    double t=0;
    //cout << "enter x[0] = ";
    //cin >> x[0];
    //cout << "enter y[0] = ";
    //cin >> y[0];
    t = 0; // начальне значения
    x1 = 1; // начальне значения
    x2 = 0; // начальне значения
    h = 0.01;   // шаг
    
    int i = 0;
    
    while(t<2.0)
    {
        
        k1 =  h*f1(x1, x2, t);
        m1 =  h*f2(x1, t);
        
        k2 =  h*f1(x1 + k1/2., x2 + m1/2., t+h/2.);
        m2 =  h*f2(x1 + k1/2., t+h/2.);
 
        k3 =  h*f1(x1 + k2/2., x2 + m2/2., t+h/2.);
        m3 =  h*f2(x1 + k2/2., t+h/2.);
 
        k4 =  h*f1(x1 + k3, x2 + m3, t+h);
        m4 =  h*f2(x1 + k3, t+h);
        
        x11 = x1 + (1. / 6.)*(k1 + 2. * k2 + 2. * k3 + k4);
        x22 = x2 + (1. / 6.)*(m1 + 2. * m2 + 2. * m3 + m4);
 
        i++;
        x1 = x1 + h;
        x2 = x2 + h;
        t = t + h;
        
        cout<<"t = "<< t << " x11 = "<< x11 << " x22 = " << x22 << endl;
    }
    
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 14:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Исправить код в методе рунге кутты 4 порядка ля системы ДУ 1 порядка (C++):

Какое условие поставить на выходе из цикла в методе Рунге Кутта 4 порядка для системы ДУ 1 порядка? - C++
Пока имеется вот такой код для решения системы ДУ 1 порядка, если имеется ошибка исправьте пожалуйста, Вопрос: как мне получить ответ, мне...

Метод Рунге-Кутта 4 порядка (исправить код) - C++
Всем привет. Нужно решить пример методом Рунге-Кутта 4-го порядка точности. Пример: y=1/2*x*y x0=0 - начало интервала. y0=1 -...

Решение дифуров методами Эйлера-Коши с итерациями и Рунге-Кутты четвертого порядка - C++
решить методами эйлера-коши с итерациями и рунге -куты четвертого порядка диф. уравнение y`+ycosx=e-sinx X e, y(0)=1 h=0.1

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

Метод Рунге-Кутта 4 порядка для решения системы дифференциальных уравнений - C++
Имеется код программы, но по не очевидным для меня причинам работает не корректно, во время отладки выдает сообщения типа : Run-Time...

Метод Рунге Кутты для системы уравнений - C++
Добрый день! Столкнулся с проблемой, при решении задачи, а именно : Реализовать решение системы оду с количеством уравнений N,...

5
avgoor
967 / 601 / 130
Регистрация: 05.12.2015
Сообщений: 1,686
18.04.2016, 14:53 #2
Цитата Сообщение от SVD102 Посмотреть сообщение
x11 = x1 +
Имхается должно быть x11 = x11 + ...
0
dcshowcousa
26 / 18 / 48
Регистрация: 22.10.2015
Сообщений: 303
18.04.2016, 14:54 #3
Условие задачи где?
0
avgoor
967 / 601 / 130
Регистрация: 05.12.2015
Сообщений: 1,686
18.04.2016, 15:05 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
SVD102, Посмотрел внимательнее ваш код, шаг должен быть только по времени. Остальные значения вычисляются из предыдущих. Выкиньте x11 и x22 вообще. x1=x1+1./6...
1
SVD102
0 / 0 / 0
Регистрация: 12.10.2015
Сообщений: 207
18.04.2016, 15:12  [ТС] #5
Вот описание задачи(4 пункт)
0
S_el
2133 / 1661 / 313
Регистрация: 15.12.2013
Сообщений: 6,582
18.04.2016, 22:54 #6
SVD102, переделал:

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
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
# include <array>
int main()
{
double x0= 1.0,y0 =0.0,tstart = 0,tend = 2,h=0.01;
auto F1 = [](double t, double x, double y) {return -52*x-100*y+std::exp(-t);};
auto F2 = [](double t, double x, double y) {return x+std::sin(t);};
 
int count= 0;
std::vector<std::array<double,3>> X(int((tend-tstart)/h)+1);
X[0][0]=0;
X[0][1]=x0;
X[0][2]=y0;
double xtemp=x0,ytemp=y0;
std::for_each(X.begin()+1,X.end(),
                           [=,&count,&xtemp,&ytemp](std::array<double,3> &T)
        {
        auto i=tstart+h*(count+1);
        auto k1 = h * F1(i, xtemp, ytemp);
        auto l1 = h * F2(i, xtemp, ytemp);
        auto k2 = h * F1(i+h/2, xtemp+k1/2, ytemp+l1/2);
        auto l2 = h * F2(i+h/2, xtemp+k1/2, ytemp+l1/2);
        auto k3 = h * F1(i+h/2, xtemp+k2/2, ytemp+l2/2);
        auto l3 = h * F2(i+h/2, xtemp+k2/2, ytemp+l2/2);
        auto k4 = h * F1(i+h, xtemp+k3, ytemp+l3);
        auto l4 = h * F2(i+h, xtemp+k3, ytemp+l3);
        double addx= (k1+2*k2+2*k3+k4)/6, addy = (l1+2*l2+2*l3+l4)/6;
        count++;
        xtemp =xtemp+addx;
        ytemp = ytemp+addy;
        T ={i,xtemp,ytemp};
        });
        
for(const auto &el : X)
    std::cout<<el[0]<<"\t"<<el[1]<<"\t"<<el[2]<<std::endl;;
 
        return 0;
}
0
18.04.2016, 22:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 22:54
Привет! Вот еще темы с ответами:

Метод рунге-кутта 3 порядка - C++
дана функция d(y(x))/dx=e^x-2y(x) Нач. условия y(0)=e Код#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; float fun(float...

Метод Рунге-Кутта 2-го порядка - C++
Написал код программы. С компиляцией вроде бы нет проблем. А цикл for воспринимать не хочет. Программа просто его пропускает. Помогите...

Метод Рунге-Кутта 4-го порядка - C++
Правильно ли я записал выражения для коэффициентов моего уравнения(система Лоренца) #include &lt;math.h&gt; #include &lt;stdlib.h&gt; ...

Метод Рунге-Кутта 4 порядка - C++
Помогите найти ошибку в методе рунге-Кутта 4 порядка System::System(double m, const Vector3D&amp; g, double C, double f, double p, double S,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru