Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
SVD102
0 / 0 / 1
Регистрация: 12.10.2015
Сообщений: 207
#1

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

18.04.2016, 14:47. Просмотров 902. Ответов 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 порядка?
Пока имеется вот такой код для решения системы ДУ 1 порядка, если имеется...

Метод Рунге-Кутта 4 порядка (исправить код)
Всем привет. Нужно решить пример методом Рунге-Кутта 4-го порядка точности. ...

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

Решение дифуров методами Эйлера-Коши с итерациями и Рунге-Кутты четвертого порядка
решить методами эйлера-коши с итерациями и рунге -куты четвертого порядка диф....

Как написать программу для метода Рунге-Кутты 4 порядка с автоматическим выбором шага ?
помогите переделать ? #include &lt;iostream&gt; #include &lt;math.h&gt; #include...

5
avgoor
1008 / 602 / 157
Регистрация: 05.12.2015
Сообщений: 1,686
18.04.2016, 14:53 #2
Цитата Сообщение от SVD102 Посмотреть сообщение
x11 = x1 +
Имхается должно быть x11 = x11 + ...
0
dcshowcousa
26 / 18 / 97
Регистрация: 22.10.2015
Сообщений: 303
18.04.2016, 14:54 #3
Условие задачи где?
0
avgoor
1008 / 602 / 157
Регистрация: 05.12.2015
Сообщений: 1,686
18.04.2016, 15:05 #4
Лучший ответ Сообщение было отмечено SVD102 как решение

Решение

SVD102, Посмотрел внимательнее ваш код, шаг должен быть только по времени. Остальные значения вычисляются из предыдущих. Выкиньте x11 и x22 вообще. x1=x1+1./6...
1
SVD102
0 / 0 / 1
Регистрация: 12.10.2015
Сообщений: 207
18.04.2016, 15:12  [ТС] #5
Вот описание задачи(4 пункт)
0
S_el
2134 / 1662 / 354
Регистрация: 15.12.2013
Сообщений: 6,603
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

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

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

Метод Рунге-Кутта 4 порядка
Помогите найти ошибку в методе рунге-Кутта 4 порядка System::System(double m,...


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

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

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