Решение уравнения методом итераций в С++
Если алгебраическое уравнение записано в виде \(x=\varphi \left(x \right)\), то при выполнении определенных условий решение уравнения (приближенное) может быть найдено методом последовательных приближений. Суть метода состоит в том, что n+1-е приближение для корня уравнения \(x_{n+1}\) вычисляется на основе n-го приближения \(x_{n}\) через соотношение:
$$x_{n+1}=\varphi \left(x_{n} \right)$$
Дальше задается начальное условие для начального решения, проверяется выполнение условия возможности применения приближенного метода, а затем применяются итерационные формулы. Программа для решения уравнения \(x^{2}-5x+6=0\) итерационным методом приведена ниже. Здесь надо обратить внимание, что для каждого из корней \(x=2,x=3\) построены свои схемы из-за того, что возникают ограничения на выполнение условий применимости итерационного алгоритма. Для первого корня уравнение представляем в виде:
$$x=\left(x^{2}+6 \right)/5$$
но условие:
$$\left|d\varphi /dx \right|<1$$
выполняется только на интервале: \(\left|x \right|<2,5\), а значит второй корень не попадает в этот интервал. Чтобы получить второй корень, исходное уравнение представим в виде:
$$x=\sqrt{5x-6}$$
и тогда указанное выше условие выполняется для \(x>2,45\) а значит интересующий нас корень попадает в указанный диапазон.
#include#include using namespace std; int main(){ //Корень уравнения: double x; //Количество итераций и индексная переменная: int n=100,i; //Вычисление корня x=2: x=0; for(i=1;i <= n;i++) x=(x*x+6)/5; cout << "x = " << x << endl; //Вычисление корня x=3: x=5; for(i=1;i <= n;i++) x=sqrt(5*x-6); cout << "x = " << x << endl; return 0; }