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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка оператора присваивания http://www.cyberforum.ru/cpp-beginners/thread1770478.html
Приветствую всех. Не могли бы подсказать как переопределить оператор присваивания. То что искал, так там написано в общем о переопределении. Существует класс rational, хранящий рациональные числа....
C++ Как ввести формулу Доброго времени суток. Можете подсказать как ввести данную формулу: \frac{1}{\sqrt{n}+n} http://www.cyberforum.ru/cpp-beginners/thread1770472.html
C++ Элементы массива, которые при делении нацело на собственный индекс дают значение большее 2 возвести в квадрат
Ввести одномерный массив A из N элементов. Элементы массива, которые при делении нацело на собственный индекс дают значение большее 2 возвести в квадрат. Массив вывести до и после преобразования.
C++ Вывести номера элементов массива, значения которых отличаются менее чем на 3 от значения наименьшего элемента
Ввести одномерный массив А , вывести его. Напечатать номера элементов, значение которых менее чем на 3 отличается от значения наименьшего элемента массива, и определить количество таких элементов.
C++ Не могу разобраться с потоками http://www.cyberforum.ru/cpp-beginners/thread1770452.html
Здравствуйте. Следующий код без потоков и в одном потоке работает нормально. В двух потоках компилируется, но вылетает. #include <thread> typedef struct { uchar mk; } data; void tst(data...
C++ Iswalpha не переваривает юникод Задача - проверить является ли символ частью слова. Под частью слова я подразумеваю символы любых азбук, иероглифы, etc. Короче, все чем слова записываются. Использую iswalpha, подсовываю ему い из... подробнее

Показать сообщение отдельно
redseven
49 / 8 / 7
Регистрация: 07.02.2015
Сообщений: 268
26.06.2016, 16:31
Вот как пример.

Но насчёт правильности не уверен,считать то считает и точности заданны выводит как и полагается.
Но для этого нужно разобратся в вычислительной математике.
А это процесс не быстрый
Но если поджимает может и поможет.

А так считает и методом Рунге-Кутта и Методом Эйлера с задачей Коши

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <cmath>
 
#define EPS 1E-2
 
using namespace std;
 
//Исходное уравнение
double func ( double x,double y )
{
    return exp(x)-sin(x)-y*cos(x);
}
//Функция, реализующая метод Эйлера-Коши
void EulerKoshi (double h,double a,double b)
{   
    const int n = 10;
    const double y0=1;
    double x[n + 1];
    double y[n + 1];
    double t,t2;
    double y_2[2*(n + 1)];
    x[0] = a;
    y[0] = y0;
    for (int j = 1; j < n; j++)
    {
     x[j] = x[j - 1] + h;
     y[j] = y[j - 1] + h * func(x[j - 1], y[j - 1]);
     t = y[j];
     cout <<"-------------------" << endl;
     cout << "x_h= " << x[j-1] + h << endl;
     cout << "y_h= " << t << endl;         
        for (int i = 0; i < 2; i++)
        {
            x[i] = x[i - 1] + h/2;
            y_2[i] = y_2[i - 1] + (h/2) * func(x[i - 1], y_2[i - 1]);
            t2 = y_2[i];
        }
             cout << "y_h2= " << t2 << endl;
             cout <<"eps= " << abs(t2-t) << endl;
             cout <<"-------------------" << endl;
             if(abs(t2-t) > EPS)
             {
             h = h/2;
             }
             cout << "h= " << h << endl;
    }
}
 
 
//Функция, реализующая метод Рунге-Кутта 4-ого порядка
double RungeKut(double h,double a,double b)
{   
     double result,x1=1;
    int i;
    const int n = 10;
    double x =a;
    double y=1;
    double y1;
    double k1;
    double k2;
    double k3;
 
    h = (x1-x)/n;
    y1 = y;
    i = 1;
    do
    {
        k1 = h*func(x, y);
        x = x+h/2;
        y = y1+k1/2;
        k2 = func(x, y)*h;
        y = y1+k2/2;
        k3 = func(x, y)*h;
        x = x+h/2;
        y = y1+k3;
        y = y1+(k1+2*k2+2*k3+func(x, y)*h)/6;
        y1 = y;
        i = i+1;
    }
    while(i<=n);
    result = y;
    return result;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    const int a=0;
    const int b=1;
    const double h = 0.1;
    cout<<"Программ для решения диф.уравения y'+y*cosx=e - sinx:"<<endl;
    cout<<"Решение диф.уравнения методом Эйлера-Коши"<<endl;
    EulerKoshi(h,a,b);
    cout<<"Решение диф.уравнения методом Рунге-Кутта 4-ого порядка"<<endl;
    cout<<RungeKut(h,a,b)<<endl;
    system("pause");
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru