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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ не могу разобраться http://www.cyberforum.ru/cpp-beginners/thread1060457.html
Дан текст. Строки текста содержат символьную и цифровую информацию. Слова могут состоять только из букв или только из цифр. Выполнить конкатенацию(оставить только слова без цифр) нецифровых слов, причем слова меньше четырех символов удалить. Найти сумму всех чисел в строке и записать ее в конец новой строки. #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<locale.h> int...
C++ Быстрое преобразование фурье wave файла Всем доброго времени суток! Сейчас работаю над дипломом, в c++ как и в обработке звука пока новичок. На данном этапе мне необходимо реализовать быстрое преобразование фурье для wave файла. С алгоритмом БПФ проблем нет, но не знаю как представить записанный wave файл, что бы подать методу на вход. Помогите пожалуйста дельным советом либо полезной статьей, буду крайне признателен! http://www.cyberforum.ru/cpp-beginners/thread1060452.html
C++ Остановка цикла do while
Доброго времени суток. Столкнулся с такой проблемой в решении задачи: Дана числовая последовательность целых чисел и одно дробное, нужно начиная с конца найти первое же ближайшее к этому дробному целое число. Последовательность забита в виде массива. И вот собственно сама проблема: Начинаю поиск с помощью цикла do { тело цикла} while(j-- >= 0) и не знаю как его остановить после...
Как сделать программу через объекты? 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. Просмотров 2081. Ответов 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 минут
наверное выбрал плохое название темы, что даже бояться открывать и думаю, что там просто просят написать программу
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru