Как решить НУ методом итераций?

совсем не понимаю как решить это уравнение методом итераций. Само уравнение: exp(x)+log(x)-x Сделал по методичке уравнение: x = exp(x)+log(x) Вот набросок программы, но она почему-то не меняет значение:

#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
using namespace std;

int main() 
{
  double rez; int iter = 0; double eps; double x = 0.2;
  double fi; double f;
  cout << "n"   << "  " << "x" << "     " << "f" <<endl;
  for(iter; iter <= 3; iter++)
  {
    f = exp(x)+log(x)-x;
    fi = exp(x)+log(x);
    cout << iter << "  " << fi << "     " << f <<endl;
  }
  return 0;
}

Промежуток x - [0,1] Скажите пожалуйста, верен ли ход решения, что нужно поменять?


Ответы (1 шт):

Автор решения: Harry

Во-первых, вы ничего не меняете — x у вас остается неизменной величиной. Во-вторых, простые итерации к данному уравнению не слишком-то применимы — надо как минимум преобразовать его так, чтобы выполнялось условие сходимости

Например, можно записать так: x = x - (exp(x) + log(x) - x)/10 — тут уже условие выполнено, так что код

double x = 0.2;
cout << "n"   << "  " << "x" << "     " << "f" <<endl;
for(int iter = 0; iter++ < 20;)
{
    x = x - (exp(x) + log(x) -x)/10;
    cout << iter << "  " << x << "     " << exp(x) + log(x) -x  <<endl;
}

будет давать ряд последовательных сходящихся приближений:

n  x     f
1  0.258804     -0.31511
2  0.290315     -0.190257
3  0.30934     -0.120128
4  0.321353     -0.0775757
5  0.329111     -0.0507405
6  0.334185     -0.0334452
7  0.337529     -0.022152
8  0.339744     -0.0147177
9  0.341216     -0.00979806
10  0.342196     -0.00653155
11  0.342849     -0.00435784
12  0.343285     -0.00290923
13  0.343576     -0.00194291
14  0.34377     -0.00129789
15  0.3439     -0.000867156
16  0.343987     -0.000579438
17  0.344045     -0.000387212
18  0.344083     -0.00025877
19  0.344109     -0.000172939
20  0.344126     -0.00011558

Теперь ваша задача — прекратить вычисления, когда два соседних значения x будут отличаться меньше, чем на eps.

→ Ссылка