![]() |
![]() |
junk |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Репутация: ![]() ![]() ![]() |
Метод дихотомии (деления отрезка пополам)
Цитата Программа находит корень уравнения F(x) = 0, где F(x) - непрерывная на отрезке [a,b] функция, удовлетворяющая условию F(a)*F(B)<0. Для нахождения корня отрезок [a,b] делится пополам и выбирается тот полуинтервал, на концах которого знаки F(x) разные. Затем процесс деления повторяется до тех пор, пока длина интервала не станет меньше Eps. {$n+} Метод хорд {$n+} Метод Ньютона (касательных) Цитата Действительный корень x уравнения F(x) = 0 вычисляется методом Ньютона по итерационному уравнению: Xk+1 = Xk - F(Xk)/F'(Xk) {$n+} Метод Ньютона с аппроксимацией производной Цитата Если вычисление производной в методе Ньютона затруднено, можно заменить ее вычисление оценкой: F'(X)= (F(X+h)-F(X))/h {$n+} |
![]() ![]() |
hiv |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Метод итераций. Модернизирован так, чтобы лучше и быстрее сходился. Для этого функция F(x) делится на коэффициент M, который является численным значением производной функции F(x) в каждой точке итерационного приближения. И все равно, главное во всех методах итерационных приближений - это начальное приближение, т.е. то самое первое значение x, с которого стартует метод итераций.
Код program ITERAT; uses crt; const max_iter=100; {максимальное количество итераций} var i :integer; x,x0,eps,M :real; function F(x:real):real; {функция} begin F:=5*x*x-exp(1-x)-4; end; begin {основная программа} clrscr; write('Введите приближенное значение x='); readln(x); write('Введите точность вычислений eps='); readln(eps); i:=0; repeat M:=-(F(x+eps)-F(x-eps))/(2*eps); {коэффициент для улучшения сходимости} x0:=x; x:=x0+F(x0)/M; {сердце метода итераций} inc(i); writeln('--- Итерация ',i:3,' x=',x); writeln('F(x)=',F(x),' точность=',abs(x-x0)); until (abs(x-x0)<=eps)or(i>max_iter); if (abs(x-x0)<=eps) then writeln('Ответ: X=',x) else writeln('Ответ не найден! За ',max_iter:0,' шагов итерация не сошлась.'); end. Чтобы получить метод простых итераций, уберите строчку: Код M:=-(F(x+eps)-F(x-eps))/(2*eps); {коэффициент для улучшения сходимости} И вместо строчки: Код x:=x0+F(x0)/M; {сердце метода итераций} Наберите: Код x:=x0+F(x0); {сердце метода итераций} -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
![]() ![]() |
![]() |
Текстовая версия | 10.09.2025 2:19 |