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

Решение задачи Коши методом Рунге-Кутта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ не могу разобраться http://www.cyberforum.ru/cpp-beginners/thread1060457.html
Дан текст. Строки текста содержат символьную и цифровую информацию. Слова могут состоять только из букв или только из цифр. Выполнить конкатенацию(оставить только слова без цифр) нецифровых слов,...
C++ Быстрое преобразование фурье wave файла Всем доброго времени суток! Сейчас работаю над дипломом, в c++ как и в обработке звука пока новичок. На данном этапе мне необходимо реализовать быстрое преобразование фурье для wave файла. С... http://www.cyberforum.ru/cpp-beginners/thread1060452.html
C++ Остановка цикла do while
Доброго времени суток. Столкнулся с такой проблемой в решении задачи: Дана числовая последовательность целых чисел и одно дробное, нужно начиная с конца найти первое же ближайшее к этому дробному...
Как сделать программу через объекты? C++
#include <stdio.h> #include <conio.h> #include <math.h> void main() { float max,min,med,sred,s; float x; int i,n,k; clrscr(); while(1)
C++ программа для вычисления значения выражения Паскаль http://www.cyberforum.ru/cpp-beginners/thread1060435.html
Составить программу для вычисления значения выражения у = к1∙х4+ к2∙х3+ к3∙х2+ к4∙х+к5. Для возведения числа k в целую степень n создать подпрограмму-процедуру. Числа к1, к2, к3, к4, к5 вводятся с...
C++ Переменной m присвоить значение 1, если x<y и -1, если x>=y Составить программу на языке C++ Заданы два числа x и y. Переменной m присвоить значение 1, если x<y и -1, если x>=y. Исходные данные:1) х=10, y=4; 2) x=2, y=13 разбираюсь только в бейсике, не... подробнее

Показать сообщение отдельно
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42

Решение задачи Коши методом Рунге-Кутта - C++

29.12.2013, 23:46. Просмотров 2128. Ответов 16
Метки (Все метки)

Решение задачи Коши методом Рунге-Кутта и сравнить результат с MATLAB

не могу найти ошибку, работает практически исправно, только где то небольшая ошибка.


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
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
 
double foo(double x, double y)
{
    return x*x;
}
 
double kuttStep (double x, double y, double h)
{
    double K1 = h*foo (x, y);
    double K2 = h*foo (x + h / 2.0, y + K1 / 2.0);
    double K3 = h*foo (x + h / 2.0, y + K2 / 2.0);
    double K4 = h*foo (x + h, y + K3);
    return y +  (K1 + 2.0 * K2 + 2.0 * K3 + K4) / 6.0;
}
 
 
 
int main()
{
    double x0 = 0.0;
    double y0 = 0.0; 
    double xn = 1.0;
    double h;
    
    cout << "h= ";
    cin >> h;
    int n = ceil((xn-x0)/h) + 2;
    
    double** arr = new double* [n];
    for (int i = 0; i < n; ++i){
        arr[i] = new double [2];
    }
 
    double x = x0;
    double y = y0;
    double y_ = 0.0;
    arr[0][0] = x;
    arr[0][1] = y;
    
    for (int i = 1; i < n; ++i){
        x += h;
        y = kuttStep (x, y, h);
        arr[i][0] = x;
        arr[i][1] = y;
    }
    
    cout << "Kutt:" << endl;
    for(int i = 0; i < n; ++i){
        cout << fixed << setprecision(4) << arr[i][0] << "\t" << fixed << setprecision(4) << arr[i][1] << endl;
    }
    return 0;
}
результат программы:
Кликните здесь для просмотра всего текста

0 0
0.0250 0.0000
0.0500 0.0001
0.0750 0.0003
0.1000 0.0007
0.1250 0.0011
0.1500 0.0018
0.1750 0.0027
0.2000 0.0038
0.2250 0.0052
0.2500 0.0069
0.2750 0.0090
0.3000 0.0114
0.3250 0.0143
0.3500 0.0176
0.3750 0.0213
0.4000 0.0256
0.4250 0.0304
0.4500 0.0357
0.4750 0.0417
0.5000 0.0482
0.5250 0.0555
0.5500 0.0634
0.5750 0.0720
0.6000 0.0814
0.6250 0.0915
0.6500 0.1025
0.6750 0.1143
0.7000 0.1270
0.7250 0.1406
0.7500 0.1552
0.7750 0.1707
0.8000 0.1872
0.8250 0.2047
0.8500 0.2233
0.8750 0.2430
0.9000 0.2638
0.9250 0.2858
0.9500 0.3090
0.9750 0.3333
1.0000 число


результат MATLAB:
Кликните здесь для просмотра всего текста
0 0
0.0250 0.0000
0.0500 0.0000
0.0750 0.0001
0.1000 0.0003
0.1250 0.0007
0.1500 0.0011
0.1750 0.0018
0.2000 0.0027
0.2250 0.0038
0.2500 0.0052
0.2750 0.0069
0.3000 0.0090
0.3250 0.0114
0.3500 0.0143
0.3750 0.0176
0.4000 0.0213
0.4250 0.0256
0.4500 0.0304
0.4750 0.0357
0.5000 0.0417
0.5250 0.0482
0.5500 0.0555
0.5750 0.0634
0.6000 0.0720
0.6250 0.0814
0.6500 0.0915
0.6750 0.1025
0.7000 0.1143
0.7250 0.1270
0.7500 0.1406
0.7750 0.1552
0.8000 0.1707
0.8250 0.1872
0.8500 0.2047
0.8750 0.2233
0.9000 0.2430
0.9250 0.2638
0.9500 0.2858
0.9750 0.3090
1.0000 0.3333


суть в том, что глупо говоря правый столбик смещён на 1ну позицию вверх, что видно из результатов.

Добавлено через 13 минут
наверное выбрал плохое название темы, что даже бояться открывать и думаю, что там просто просят написать программу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru