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

Алгоритм Рунге-Кутта - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Составить алгоритм и программу расчета плотности постановки посильных помех http://www.cyberforum.ru/cpp-beginners/thread233795.html
Составить алгоритм и программу расчета плотности постановки посильных помех R (ро) к самолетам-постановщикам посильных помех, на борту, которого имеются четыре автомата сброса дипольных отражателей. Темп сброса составляет 200 пачек в минуту, скорость изменяется от 20 до 40 км/мин с шагом 1 км/мин. Плотность пассивных помех рассчитывается по формуле: R=(V1*N)/(10*v), где V1 –темп выбрасывания...
C++ Программирование на С++ с использованием классов. Массивы объектов. Наследование Помогите с программированием,пожалуйста!!!!!!!!!!!! Создать класс равносторонний треугольник, член класса - длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – периметр, площадь. Создать производный класс – правильная треугольная призма с высотой H, добавить в класс метод определения объема фигуры, перегрузить методы расчета площади и вывода сведений о... http://www.cyberforum.ru/cpp-beginners/thread233791.html
В массиве чисел найти самую маленькую серию подряд стоящих нечетных элементов C++
В заданном массиве целых чисел найти самую маленькую серию подряд стоящих нечетных элементов. Удалить из массива два первых простых числа. Проверить, изменилась ли серия подряд стоящих нечетных элементов.
Двух мерный массив. C++
Дана прямоугольная матрица. Найти строку с наибольшей и меньшей суммой элементов вывести на экран найденные строки и суммы их элементов.
C++ Есть разница между C++Builder и Visual Studio? http://www.cyberforum.ru/cpp-beginners/thread233786.html
Здравствуйте! Я только начал изучать С++ (по книге Лафоре). Хочу узнать есть ли разница в какой программе программы писать? Просто такое дело, скачал Microsoft Visual Studio 2010 а там тихий ужас - фиг разберешься, немного разобрался - напишу программу - ошибку какую то выдает (типа не компилируется) хотя все по учебнику..(( еще скачал wxDev-C++ - вроде пишет что компилируется нормально, но...
C++ Составить алгоритм решения ребуса составить алгоритм решения ребуса МУХА+МУХА+МУХА=СЛОН(различные буквы означают различные цифры, старшая - не 0) подробнее

Показать сообщение отдельно
larev01
0 / 0 / 0
Регистрация: 11.07.2010
Сообщений: 39
25.01.2011, 14:41     Алгоритм Рунге-Кутта
Добрый день. Столкнулся с проблемой. Необходимо решить уравнение методом Рунге-Кутта четвертого порядка с точностью 0.0001 (для достижения точности использую метод двойного пересчета). Написал программу, но интервалы получаются какими-то подозрительно маленькими. Помогите пожалуйста найти ошибку (если она есть).
Уравнение:
Название: Image172.gif
Просмотров: 1202

Размер: 1.0 Кб

Исходник:
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
#include <iostream>
#include <cmath>
#include <conio.h>
 
inline double f(double x, double y)
{
    return ((6-y*y)*std::cos(x)+2*y);
}
 
void runge_kutta(double h, double* x, double* y, int n)
{
    double k1, k2, k3, k4;
 
    for(int i=1; i<=n; i++)
        x[i] = x[i-1]+h;
 
    for(int i=0; i<n; i++) {
        k1 = f(x[i], y[i]);
        k2 = f(x[i]+h/2, y[i]+(h/2)*k1);
        k3 = f(x[i]+h/2, y[i]+(h/2)*k2);
        k4 = f(x[i]+h, y[i]+h*k3);
        y[i+1] = y[i]+(h/6)*(k1+2*k2+2*k3+k4);
    }
}
 
int main()
{
    double h = 0.5;
    const double precision = 0.0001;
 
    int n;
    double* x;
    double* y;
    while(true) {
        double* x_temp;
        double* y_temp;
        n = (static_cast<int>(1/h)+1)*2;
        x_temp = new double[n+1];
        y_temp = new double[n+1];
        x = new double[n+1];
        y = new double[n+1];
        x_temp[0] = 0;
        y_temp[0] = 0.3;
        x[0] = 0;
        y[0] = 0.3;
        runge_kutta(h, x_temp, y_temp, n);
        runge_kutta(h/2, x, y, n);
 
        bool need_break = false;
        for(int i=1; i<=n; i++)
            if(std::fabs(y_temp[i]-y[i])<precision*15)
                need_break = true;
        if(need_break) {
            delete[] x_temp;
            delete[] y_temp;
            break;
        }
 
        delete[] x_temp;
        delete[] y_temp;
        delete[] x;
        delete[] y;
        h/=2;
    }
 
    std::cout.precision(4);
    for(int i=0; i<=n; i++)
        std::cout << x[i] << '\t' << y[i] << '\n';
 
    delete[] x;
    delete[] y;
 
    _getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru