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

Метод простой итерации - C++

Восстановить пароль Регистрация
 
tema47
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 67
08.05.2014, 22:34     Метод простой итерации #1
Помогите с рекурсией!!!

Задача:
Найти корень заданного уравнения методом простой итерации с заданной точностью. Напомним, что в этом методе нужно уравнение свести к виду x=f(x) и очередное уточнение корня проводится по формуле xn+1=f(xn) до тех пор, пока |xn+1 – xn | > E, где E - заданная точность. Рядом с уравнением в скобках указано начальное приближение корня.

x-sin(x)=0.25 (1.17)

Вот, что настругал:

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
#include <iostream>
#include <math.h>
using namespace std;
 
int const max_iter=100;
int i=0;
double x, x0, eps;
 
double f(double x);
 
int main()
{
    setlocale (LC_ALL, "rus");
    cout << "Введите приближенное значение: ";
    cin >> x;
    cout << "Введите точность вычислений: ";
    cin >> eps;
    do
    {
        x0=x;
        x=x0+f(x0);
        i++;
        cout << endl << "Итерация # "<<i<<endl<<"x = "<<x<<endl;
        cout << "f(x) = " << f(x)<<endl << "Точность = "<<abs(x-x0)<<endl;
    }
    while ((abs(x-x0)>=eps) || (i<max_iter));
    cout << endl;
    if (abs(x-x0)<=eps)
        cout << "Ответ: x = "<<x<<endl;
    else
        cout << "Ответ не найден! За "<<max_iter<<" шагов итерация не сошлась."<<endl;
    system ("pause");
    return 0;
}
double f(double x)
{
    return sin(x)+0.25;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 22:34     Метод простой итерации
Посмотрите здесь:

Метод простой итерации C++
Метод простой итерации C++
Метод простой итерации C++
Метод простой итерации C++
C++ Метод простой итерации
Метод простой итерации C++
Метод простой итерации C++
C++ Метод простой итерации - путаница в векторе невязки
Метод простой итерации C++
Ошибка в цикле итераций - метод простой итерации C++
Метод простой итерации C++
Метод простой итерации C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Arukasa
3 / 3 / 1
Регистрация: 06.01.2013
Сообщений: 29
08.05.2014, 22:42     Метод простой итерации #2
Нахождение корней уравнения

Добавлено через 2 минуты
В университете решал так:

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
#ifndef _M_P_I_H_
#define _M_P_I_H_
 
#include <iostream>
#include <algorithm>
 
const float E = 0.000001;
 
const float LEFT3 = 0.1;
const float RIGHT3 = 2;
 
const float STEP = 0.1;
 
const float x03 = (RIGHT3 - LEFT3) / 3;
 
 
 
float F(const float& x, const float& k)
{
    return pow(x,3) - sin(x) - k;
}
 
float DF(const float& x, const float& k)
{
    return 3 * pow(x, 2) - cos(x);
}
 
 
float Min(const float& left, const float& k)
{
    return abs(DF(left, k));
}
 
float Max(const float& right, const float& k)
{
    return abs(DF(right, k));
}
 
float Alpha(const float& left, const float& right, const float& k)
{
    return 2 / (Min(left, k) + Max(right, k));
}
 
float Q(const float& left, const float& right, const float& k)
{
    return (Max(right, k) - Min(left, k)) / (Max(right, k) + Min(left, k));
}
 
 
float Fi(const float& x, const float& k, const float& left, const float& right)
{
    return x - Alpha(left, right, k) * F(x, k);
}
 
 
float Iter(float x0,const float& k, const float& left, const float& right)
{
    float x1 = Fi(x0, k, left, right);
    float d = (Q(left, right, k) * abs(x1 - x0)) / (1 - Q(left, right, k));
    x0 = x1;
    while (d > E) 
    {
        x1 = Fi(x0, k, left, right);
        d = (Q(left, right, k) * abs(x1 - x0)) / (1 - Q(left, right, k)) * Q(left, right, k);
        x0 = x1;
    }
    return x0; 
    
}
 
 
void MPI()
{
    float k = 0;
    while ( k <= 3)
    {
 
        printf("%.6lf   ", Iter(x03, k, LEFT3, RIGHT3)); 
        
        k += STEP;
    }
}
 
#endif
Добавлено через 1 минуту
замени отрезок, значение параметра(k), функцию и производную функции

Добавлено через 39 секунд
под отрезком подразумевается следующее:
const float LEFT3 = 0.1;
const float RIGHT3 = 2;
Yandex
Объявления
08.05.2014, 22:42     Метод простой итерации
Ответ Создать тему
Опции темы

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