C/C++

Найти корни уравнений методом итераций

Промежуток 1,3
точность 0,001
f(x) = 1.5-0.4*sqrt(x^3)-0.5*lnX
желательно с обьяснением,в интернете нашел совсем другое
Андрей
Андрей
91
Насколько помнит моя дырявая память. Вычисляете значение в 1-це потом в 3-ке и сравниваете с нулём. Если f(1)>0 b f(3)>0 то нужно поделить отрезок пополам и вычислить значение в 2-ке и опять по новой. Если f(2)<0 b f(3)>0 и так делить отрезок пока не найдете корень.
Сергей Пенязь
Сергей Пенязь
4 553
Лучший ответ
Виталя Шварц Ты описал метод половинного деления, а не метод итерации.
Сергей Пенязь Это и есть итерации. Вы делите отрезок пока не найдёте корень.
Иван Косульников Спасибо, что напомнили! Вылетело из головы за давностью лет :-(
На плюсах так вот можно:
#include <iomanip>
#include <iostream>
using namespace std; int main()
{ int i; double e, eps = 1e-17, x;
cout << setprecision(16) << fixed;
for (;;) { cout << "x: "; cin >> x; e = 1; i = 0;
while (true) { e = 1.5 - 0.5 * log(x) - 0.4 *
sqrt(x * x * x); if (fabs(e) < eps) break; x += e;
i++; cout << setw(4) << i << ')' << setw(20)
<< x << endl; } } }
Уравнение f(x)=1,5-0,4•√x³-0,5•ln(x)=0 просто заменяется на х=x+f(x), которое и решается через итерационный цикл, на каждом шаге которого вычисляется f(x) и если |f(x)|<1e-3, то цикл немедленно прекращается, а если это условие не выполняется, то к текущему значению х прибавляется только что вычисленное значение f(x). Если надо получить более точное решение, то eps можно задать, скажем, 1е-16, тогда просто будет больше шагов цикла да и всё. Начальное значение х можно прямо в одном сеансе вводить с экрана любое число раз из указанного диапазона и смотреть, что при этом получается в итоге, например, так:
Валерий Яллак
Валерий Яллак
66 572
Суть метода простых итераций в том, чтобы заменить F(x)=0, на x=G(x), это можно сделать разными способами, но надо чтобы вторая функция сходилась.
Например можно написать:
x =x+1,5-0,4*sqrt(x^3)-0,5*ln(x)
Стартовать можно с любого числа в промежутке и на примерно 2-4 шаге мы получаем желаемую точность.
x=1
x=1+1,5-0,4*sqrt(1^3)-0,5*ln(1)=1,8722
x=1,8722+1,5-0,4*sqrt(1,8722^3)-0,5*ln(1,8722)=2,0340
x=2,0340+1,5-0,4*sqrt(2,0340^3)-0,5*ln(2,0340)=2,0187
x=2,0340+1,5-0,4*sqrt(2,0340^3)-0,5*ln(2,0340)=2,020
Можешь стартовать не с 1, а например с 2 или 3, результат в конце будет таким же.
Андрей Громов
Андрей Громов
4 353
Андрей Громов Лучше стартовать сразу с 2, тогда сможешь получить ответ с нужней точностью уже после второго шага.
x=2
x=2+1,5-0,4*sqrt(2^3)-0,5*ln(2)=2,0221
x=2,0221+1,5-0,4*sqrt(2,0221)-0,5*ln(2,0221)=2,0199=2,020
проверка:
x=2,0199+1,5-0,4*sqrt(2,0199)-0,5*ln(2,0199)=2,0201=2,020
x=2,0201+1,5-0,4*sqrt(2,0201)-0,5*ln(2,0201)=2,0201
Андрей Благодарю