Как решить НУ методом итераций?
совсем не понимаю как решить это уравнение методом итераций. Само уравнение: 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 шт):
Во-первых, вы ничего не меняете — 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.