Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
Ilya_Russia
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 5
1

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

05.01.2016, 14:53. Просмотров 4979. Ответов 17
Метки нет (Все метки)

Найти приближенное решение уравнения x = f(x), где f(x) = α*exp(x), при α = 0, 2 методом простой итерации: xn+1 = f(xn).
В качестве начального приближения взять x0 = 0.
Итерации продолжать до тех пор, пока |xn+1 − xn| ≥ ε, где ε — заданная точность.

Помогите пожалуйста решить задачу, на языке С++.
Ну или покажите пример решения на бумаге, что бы можно было понять что к чему
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2016, 14:53
Ответы с готовыми решениями:

Метод простой итерации
Помогите решить методом простой итерации уравнение вида x=f(x).Очередное...

Метод простой итерации
Помогите с рекурсией!!! Задача: Найти корень заданного уравнения методом...

Метод простой итерации
Здраствуйте! Нужно реализовать в C++ метод простой итерации. #include...

Метод простой итерации
Всем привет. Кто знаком с методом простой итерации??? Вот есть код, он вроде...

Метод простой итерации
Люди помогите пожалуйста очень нужно для курсачя, а в С++ не тум тум. ...

17
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
05.01.2016, 15:15 2
примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
 
float f(float x){
    float a = 0.2;
    return a*exp(x);
}
 
void main(){
 
    float eps = 0.0000001,
        x_0 = 0,
        x_n = 0;
 
    do{
        x_0 = x_n;
        x_n = f(x_0);
 
    } while (fabs(x_n-x_0)>=eps);
 
    system("pause");
}
0
Ilya_Russia
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 5
05.01.2016, 16:27  [ТС] 3
К сожалению не работает.
0
Apostol584
242 / 148 / 118
Регистрация: 26.11.2012
Сообщений: 375
Завершенные тесты: 2
05.01.2016, 16:34 4
Если не выводит в консоль, то я не писал эту строчку, добавьте её сами.
0
olya7
497 / 311 / 234
Регистрация: 18.02.2013
Сообщений: 745
05.01.2016, 16:40 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double alpha=0.2,x0=0,x1=0,delta=0,eps=1e-6;
    int iter=0;
    do
    {
        x1=alpha*exp(x0);
        delta=fabs(x1-x0);
        x0=x1;
        iter++;
    }
    while(delta>eps && iter < 1000);
    cout<< "Answer = "<<x0<<endl;
}
0
Kirik516
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 66
05.01.2016, 17:05 6
Если это Ньютон, то некогда я реализовывал его так.
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
#define EPSILON 0.00001
enum CalcMethod {Iterative = 0, Recursive};
float findFuncRootsByNewton(float &a, float &b, CalcMethod key = Iterative)
{
    float e = EPSILON;
    float xLast, xCurr = a;
    
    if (!key)
    {
        do
        {
            xLast = xCurr;
            xCurr = xLast - calcFuncValue(xLast)/calcDeffFuncValue(xLast);
        }
        while (fabs(xLast - xCurr) > e);
        
        return xCurr;
    }
    else
    {
        xLast = xCurr;
        xCurr = xLast - calcFuncValue(xLast)/calcDeffFuncValue(xLast);
        
        if (fabs(xLast - xCurr) > e)
            return findFuncRootsByNewton(xCurr, b, key);
        else
            return xCurr;
    }
}
Добавлено через 5 минут
olya7, при каких иксах какие значения у вас получаются? Давайте сравним.)

Добавлено через 6 минут
Вообще Википедия говорит, что все-таки нужно делить на производную функции. Правда на константую (f'(x0)). По-моему, у автора ошибка.
0
olya7
497 / 311 / 234
Регистрация: 18.02.2013
Сообщений: 745
05.01.2016, 17:06 7
Kirik516, вопрос стоял реализовать метод простых итераций
0
Изображения
 
Kirik516
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 66
05.01.2016, 17:47 8
Цитата Сообщение от olya7 Посмотреть сообщение
Kirik516, вопрос стоял реализовать метод простых итераций
Ну простые итерации это модификация-упрощение метода Ньютона.
Вообще, если предлагаемая функция это http://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = 0,2e ^x, то ваш ответ неверный, т.к. ни метод Ньютона, ни метод простых итераций не сработает. У этой функции нулей вообще нет, ось абсцисс для нее является асимптотой. По крайней мере так говорит Микрософт математика.
Возможно автор просто решил пошутить над нами.
0
Ilya_Russia
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 5
05.01.2016, 17:58  [ТС] 9
Я не шучу, такое было задание
0
Kirik516
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 66
05.01.2016, 18:00 10
Цитата Сообщение от Ilya_Russia Посмотреть сообщение
Я не шучу, такое было задание
Ну функцию я верно написал? Точно такая в задании?
0
Ilya_Russia
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 5
05.01.2016, 18:04  [ТС] 11
Да. 2е задание
0
Вложения
Тип файла: pdf test151106.pdf (139.7 Кб, 17 просмотров)
Kirik516
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 66
05.01.2016, 18:19 12
Цитата Сообщение от Ilya_Russia Посмотреть сообщение
Да. 2е задание
Ну давайте подумаем. Альфу мы менять не можем. Значит она у нас в 0 не обратится. Остается только экспонента. Экспонента это число положительное. Она возводится в степень Х. X мы можем поменять. Вот теперь скажите. Каким должен быть Х, чтобы экспонента стала нулем? Т.е. http://www.cyberforum.ru/cgi-bin/latex.cgi?x = ln(0). И все. Дальше мы ничего не сделаем.
0
DocC
337 / 66 / 37
Регистрация: 22.12.2010
Сообщений: 138
05.01.2016, 19:23 13
что значит нет решения?
господа, ну что вы, в самом деле.
в задание указано:
http://www.cyberforum.ru/cgi-bin/latex.cgi?x = f(x),
где http://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = 0.2{e}^{x}
Имеем:
http://www.cyberforum.ru/cgi-bin/latex.cgi?x = 0.2{e}^{x}
Значит уравнение для поиска решения по методу простых итераций следующее:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\phi(x) = 0 - что и есть общая форма
http://www.cyberforum.ru/cgi-bin/latex.cgi?0.2{e}^{x} - x = 0'

и одно из решений:
0.2591711018190737450566519
2
Kirik516
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 66
05.01.2016, 19:36 14
Цитата Сообщение от DocC Посмотреть сообщение
Значит уравнение для поиска решения по методу простых итераций следующее:
<формулы не копируются>
Если в задании имелось именно это, то я не прав.
0
DocC
337 / 66 / 37
Регистрация: 22.12.2010
Сообщений: 138
05.01.2016, 19:39 15

Не по теме:

сверяйте с методом ньютона ответ
ссылка на решение в wolfram

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <locale>
#include <cmath>
 
using std::cout;
using std::cin;
using std::endl;
 
const int iter = 100;
 
double myfun(double x) {
    return 0.2*exp(x) - x;
}
 
double cycle_myfun(double (*my_fun)(double),const double& esp, const double& x0) {
    double c, diff;
    int i = 1;
    c = x0;
    diff = (my_fun(c+esp) - my_fun(c))/esp;
    while (i <= iter) {
        c = c - my_fun(c)/diff;
        ++i;
    }
    return c;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    double esp, x0 = 1;
    cout << "Достаточное количество итераций = 100" << endl;
    cout << "Введите точность e = ";
    cin >> esp;
    cout << endl << "0.2exp(x) - x = 0 имеет корень = " << cycle_myfun(myfun, esp, x0) << endl;
    return 0;
}



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Kirik516 Посмотреть сообщение
Если в задании имелось именно это, то я не прав.
Сразу же раздел "идея метода" смотрите. Я просто развернул в обратную сторону.
https://ru.wikipedia.org/wiki/%D0%9C...86%D0%B8%D0%B8

0
Kirik516
05.01.2016, 19:41
  #16

Не по теме:

Цитата Сообщение от DocC Посмотреть сообщение
Сразу же раздел "идея метода" смотрите. Я просто развернул в обратную сторону.
Я вас не понял. Зачем мне идею метода смотреть?

0
DocC
05.01.2016, 19:50
  #17

Не по теме:

Цитата Сообщение от Kirik516 Посмотреть сообщение

Не по теме:


Я вас не понял. Зачем мне идею метода смотреть?

ну собственно для того, чтобы понять, почему за уравнение принимается не f(x) = 0, а f(x) - x =0.

0
Kirik516
05.01.2016, 20:13     Метод простой итерации
  #18

Не по теме:

Цитата Сообщение от DocC Посмотреть сообщение
ну собственно для того, чтобы понять, почему за уравнение принимается не f(x) = 0, а f(x) - x =0.
Это то я понял. Автор задания просто решил "упростить жизнь" его исполнителям. Я привык к тому, что подобные задания нормально формулируют. И как-то сразу без задних мыслей воспринял функцию как http://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = 0.2e^x. Из-за чего собственно и разгорелся весь этот конфуз.

0
05.01.2016, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2016, 20:13
Привет! Вот еще темы с ответами:

Метод простой итерации
решение системы линейных уравнений методом простой итерации

Метод простой итерации
Вот такая задача! Используя метод простой итерации, решить с точностью ε = 10...

Метод простой итерации
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double f(double...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru