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

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

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

Рунге-Кутта в С++ (ошибки) - C++

04.01.2014, 02:29. Просмотров 623. Ответов 7
Метки нет (Все метки)

Доброй ночи.
Решаю ОДУ методом Рунге-Кутта , и такая непонятка выходит, что аналитическое (в excel) и численное (результат проги) расходятся до тех пор, пока аргумент х отрицательный. В чем ошибка - не пойму.
Рунге-Кутта в С++ (ошибки)
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
double f(double x) {
    return x*exp(2*x+3);
}
int main(void) {
    float  h, a, b;
    double y, x, p1, p2, p3, p4;
    int n = 1, k;
    const int i = 10;
    FILE *t = fopen("odu.txt", "w");
    setlocale(LC_ALL, "Russian");
    printf("Интервал: ");
    scanf("%f %f", &a, &b);
    printf("Кол-во точек: ");
    scanf("%d", &k);
    printf("Начальное условие: y(%f)= ", a);
    scanf("%lf", &y);
    x = a;
    h = (b - a) / k;  //Нахождение шага h
    h = h / i;
    printf("N     x         y \n");
    fprintf(t, "N     x         y \n");
    while (x < b){
        if (n%i == 0)   {
            printf("%d %f %f\n", n / i, x, y);
            fprintf(t, "%d %f %f\n", n / i, x, y);
        }
        p1 = f(x);
        p2 = f(x + h / 2);
        p3 = f(x + h / 2);
        p4 = f(x + h);
        y = y + h / 6 * (p1 + 2* p2 + 2 * p3 + p4);
        x = x + h; n++;
    }
    getch();
    return 0;
}
0
Вложения
Тип файла: txt код проги.txt (887 байт, 18 просмотров)
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2014, 02:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рунге-Кутта в С++ (ошибки) (C++):

метод Рунге-Кутта - C++
Всем доброго времени суток, меня интересует, пользуясь методом Рунге -Кута для диф уравнений, я получу в ответе точки, графика диф...

Метод Рунге-Кутта - C++
Нужно решить диффур второго порядка. При решении выводятся нуля. Где я оплошал? #include &lt;math.h&gt; using namespace std; ...

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

Метод Рунге-Кутта. - C++
хотелось бы спросить знающих людей. Мне необходимо решить систему ДУ уравнений методом Рунге_кутта 4 порядка. А значит мне нужно в...

Алгоритм Рунге-Кутта - C++
Добрый день. Столкнулся с проблемой. Необходимо решить уравнение методом Рунге-Кутта четвертого порядка с точностью 0.0001 (для достижения...

Метод Рунге-Кутта - C++
Помогите написать метод Рунге Кутта для решение систем диф. уравнений из 4 уравнений. dx/dt=Px=f1(t,x,y,Px,Py) dy/dt=Py=f2(t,x,y,Px,Py)...

7
Ev_Hyper
Заблокирован
04.01.2014, 12:05 #2
Dammir, а вы уверены что формула в Exel та же, что и в программе?
0
S_el
2112 / 1632 / 308
Регистрация: 15.12.2013
Сообщений: 6,572
04.01.2014, 12:07 #3
Цитата Сообщение от Dammir Посмотреть сообщение
Доброй ночи.
Решаю ОДУ методом Рунге-Кутта , и такая непонятка выходит, что аналитическое (в excel) и численное (результат проги) расходятся до тех пор, пока аргумент х отрицательный. В чем ошибка - не пойму.
В Excel тоже численное решение.
0
Ev_Hyper
Заблокирован
04.01.2014, 12:08 #4
Dammir, а вообще результат довольно странный, ошибка наверное еще кое-где.
0
S_el
2112 / 1632 / 308
Регистрация: 15.12.2013
Сообщений: 6,572
04.01.2014, 12:09 #5
У вас формулы не правильные.
0
zss
Модератор
Эксперт С++
6516 / 6078 / 2001
Регистрация: 18.12.2011
Сообщений: 15,792
Завершенные тесты: 1
04.01.2014, 12:18 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Все правильно работает.
Вы забыли, что в русской кодировке вместо точки надо вводить запятую.
3
S_el
2112 / 1632 / 308
Регистрация: 15.12.2013
Сообщений: 6,572
04.01.2014, 12:25 #7
Цитата Сообщение от zss Посмотреть сообщение
Все правильно работает.
Вы забыли, что в русской кодировке вместо точки надо вводить запятую.
Вот оно в чем дело :lol: , спасибо.
0
Dammir
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 6
04.01.2014, 18:13  [ТС] #8
да, в excel у меня фун-ия проинтегрированная с постоянной интегрирования, а в проге у меня ее производная стоит,как требует Рунге-Кутта.)

Добавлено через 1 минуту
был бы благодарен, если укажете это место

Добавлено через 14 минут
Спасибо, вопрос исчерпан
0
04.01.2014, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2014, 18:13
Привет! Вот еще темы с ответами:

метод Рунге-Кутта - C++
Помогите написать программу на хаотичное движение бильярдных шаров методом Рунге-Кутта. При столкновении шары должны отталкиваться, ну и...

Метод Рунге-Кутта - C++
как реализовать программу для уравнения вида dv/dt=const*dm/dt методом рунге-кутта. как именно заменить производную справа

Цикл for. Метод Рунге-Кутта - C++
Программа считает, но неправильно из за цикла for. Он считает только начальное значение, а нужно чтобы считал предыдущее посчитанное. И еще...

ДУ. Метод Рунге-Кутта. Погрешность. - C++
Сам Рунге-Кутта III порядка. - &quot;реализовано&quot;. Огорчает погрешность, не могу понять как улучшить точность (и не достаточно ли такой?). ...


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

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

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