Файл: Определение корня одномерного уравнения методом простой итерации.doc

Добавлен: 29.10.2018

Просмотров: 316

Скачиваний: 12

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Определение корня одномерного уравнения методом простой итерации

Решение нелинейного одномерного уравнения вида

F(x)=0 (1)

заключается в нахождении корня или корней этого уравнения на отрезке [a,b]. Если представить уравнение (1) в виде x=f(x), где f(x)=F(x)+x, тогда при x=xc, где xc - корень уравнения (1) - f(xс)=xс.

Формула x = f(x) – является основой метода итераций.

Алгоритм метода итераций состоит в следующем:

Задаем начальное значение корня xn.

Вычисляем по нему с помощью итерационной формулы xn+1=f(xn) следующее приближение корня.

Проверяем точность определения корня |xn+1 - xn|< e, где e – заданная точность вычисления корня. Если условие не выполняется, то выполняем вышеописанные действия.

Условие сходимости этого метода: (xnxc при n→∞), f ‘(x)<1 при a<x<b.

 

Промер алгоритма нахождения корня нелинейного одномерного уравнения методом простой итерации на естественном языке:

1.     Задаем точность вычисления корня по оси абсцисс и по оси ординат: ex и ey.

2.     Задаем максимальное количество итераций нахождения корня – max_i.

3.     Задаем начальное значение x0.

4.     Начало цикла по i от 1 до max_i.

5.     В цикле вычисляем следующее приближение корня: x1=f(x0)+x0.

6.     В цикле вычисляем изменение значений x и f(x) на данной итерации: dx=ABS(x1-x0), df=abs(f(x1)-f(x0)).

7.     Проверяем условие сходимости алгоритма. Задаем ветвление: если dx<ex и df<ey, то корень найден, вывод на экран значения xi, f(xi) и номера итерации i. Выход из программы. Конец ветвления.

8.     Копируем значение x1 в x0 для следующей итерации: x0=x1.

9.     Конец цикла.

10. Вывод сообщения:”Корень не найден за i итераций !!!”

11. Конец программы.

 

Пример реализации алгоритма нахождения корня одномерного нелинейного уравнения методом простой итерации на VFP:

 

CLEAR

dec=3

ex=1/(10^dec)

ey=1/(10^(dec/2))

maxi=100

 

x0=1

 

FOR i=1 TO maxi

x1=f(x0)+x0

dx=ABS(x1-x0)

df=abs(f(x1)-f(x0))

 

IF dx<ex AND df<ey then

?" Корень найден за "+ALLTRIM(STR(i))+" итераций"

?" x= "+STR(x1,dec*2,dec)+" f(x)= "+STR(f(x1),dec*2,dec)

?

?" Конец итераций"

RETURN

ENDIF

x0=x1

endfor

 

? "Решение не найдено за", maxi, "итераций"

 

FUNCTION f

PARAMETERS x

RETURN 3*x-EXP(x)

ENDFUNC

 

 

Пример реализации алгоритма нахождения корня одномерного нелинейного уравнения методом простой итерации на VBA:

Sub Simple_Iteration()

 

ex = 0.0001

ey = 0.0001

maxi = 100

 

x0 = 1

bfind = False

For i = 1 To maxi

x1 = f(x0) + x0

df = Abs(f(x1) - f(x0))

 

If Abs(x1 - x0) < ex And df < ey Then

Debug.Print " Корень найден за " & i & " итераций"

Debug.Print " x= " & x1 & " f(x)= " & f(x1)

bfind = True

Debug.Print " Конец итераций"

Exit For

End If

x0 = x1

Next i

 

If Not bfind Then Debug.Print "Решение не найдено за", maxi, "итераций"

End Sub

 

Function f(x)

f = 3 * x - Exp(x)

End Function