АЛГОРИТМЫ

Новости

Рассылка новостей

Форум

AlgoPascal

Редактор блок-схем

Статьи

О сайте

Контакты



Содержание - Уравнения общего вида и полиномиальные - Метод итераций

Корень уравнения x = F(x) методом итераций

Функция находит корень уравнения x = F(x) методом простой итерации с относительной погрешностью e. По i-му приближению корня x находится следующие приближение по формуле xi+1  = F(x), i = 0, 1, 2, ... . Процесс продолжается до тех пор, пока относительная точность для двух последовательных приближений не станет меньше e: |(xi+1 -x)/x| < e. Процесс итерации сходится на [a, b], если |F'(x)| < 1 при всех x на (a,b).

Чтобы избежать зацикливания, функция прекращает работу после n итераций. Переменная HasRoot = True если необходимая точность e достигнута менее чем за n итераций, и HasRoot = False, если необходимая точность за n итераций недостигнута.

Если нашли ошибку в алгоритме - сообщите!



Реализации алгоритма на различных языках:

Реализация алгоритма на C++
Реализация алгоритма на Delphi
Реализация алгоритма на Visual Basic 6

Блоксхемы:

Посмотреть блок-схему алгоритма
Скачать блок-схему алгоритма


Реализация алгоритма на AlgoPascal:

unit FEqXSimpleIterationUnit;

declaration
    function F(X:Real):Real;

interface
    FEqXSimpleIteration;
implementation
(*
Корень уравнения x=F(x).

procedure FEqXSimpleIteration(
    n:integer;
    e:real;
    xn:real;
    var HasRoot:boolean, x:real)

Функция находит корень уравнения x=F(x) методом простой итерации
с относительной погрешностью e. В качестве начального приближения
берется x0.
функция прекращает работу после n итераций.
ременная HasRoot=True если необходимая точность e достигнута
менее чем за n итераций, и HasRoot=False, если необходимая точность
за n итераций недостигнута.
*)
procedure FEqXSimpleIteration(
    const   n   :   Integer;
    const   e   :   Real;
    const   x0  :   real;
    out     HasRoot:Boolean;
    out     x   :   Real);
var
    I   :   Integer;
begin
    i:=1;
    x:=x0;
    repeat
        x:=F(x);
        i:=i+1;
    until not((i<=n)and(AbsReal(F(x)-x)>e*AbsReal(x)));
    HasRoot:=(i<=n)
end;


end.

 


Бочканов Сергей, Быстрицкий Владимир
Copyright © 1999-2004
При поддержке проекта MANUAL.RU