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

Добавлен: 29.10.2018

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

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

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

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

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

(1)

Условие сходимости метода секущих:

(2)


Алгоритм нахождения корня уравнения методом секущих на естественном языке:

1. Задаем начальные параметры алгоритма: точности нахождения корня по х и у – еpsx и epsy, а также максимальное количество итераций – maxi.

2. Запрашиваем у пользователя начальное приближение к корню х0 и приращение d для вычисления двух начальных точек: x0 и xn.

3. Вычисляем значения функции в данных двух точках: f(x0) и f(xn).

4. Начало итераций от 1 до maxi.

5. Вычисление следующего приближения х по формуле (1), а также вычисление значения функции в этой точке f(x).

6. Вычисление погрешностей нахождения корня.

7. В случае удовлетворения условия: погрешности по осям x и y меньше точности вычисления корня – корень найден - конец вычислений, в обратном случае – 8.

8. Переопределение начальных точек приближения x0=xn и xn=x а также значений функции в этих точках. Переход к Шагу 5. Итерации продолжаются до тех пор, пока не будет удовлетворены условия Шага 7 либо количество итерации превысит значение maxi.


Алгоритм решения на языке VFP:

clear

eps1=0.001

eps2=0.001

maxi=1000


input "Введите начальное приближение к корню х0 :" to x0

Input "Введите начальный шаг приращения d :" to d


xn=x0+d


f0=f(x0)

fn=f(xn)


FOR i = 1 TO maxi

x=xn-(xn-x0)*fn/(fn-f0)

fx=f(x)

err2=abs(xn-x)

err1=aBS(fn-fx)


? "Итерация= "+ALLTRIM(STR(i))

?? " : x= "+ TRANSFORM(x,"99.999 999 999")

?? " : f(x)= "+ transform(fx,"99.999 999 999")

IF err1<eps1 AND err2<eps2

? "Решение найдено: ", x

RETURN

ENDIF

x0=xn

xn=x

f0=fn

fn=fx


ENDFOR


function f

LPARAMETERS x

return (x-4)*(x-2)

ENDPROC


Алгоритм решения задачи на Visual Basic:

Sub Sekushie()

eps1 = 0.001

eps2 = 0.001

maxi = 1000


x0 = Val(InputBox("Введите начальное приближение к корню х0:"))

d = Val(InputBox("Введите начальный шаг приращения d:"))


xn = x0 + d


f0 = f(x0)

fn = f(xn)


For i = 1 To maxi

x = xn - (xn - x0) * fn / (fn - f0)

fx = f(x)

err2 = Abs(xn - x)

err1 = Abs(fn - fx)


Debug.Print "Итерация= " + CStr(i)

Debug.Print "x= " + Format(x, "00.000 000 000")

Debug.Print "f(x)= " + Format(fx, "00.000 000 000")

If err1 < eps1 And err2 < eps2 Then

Debug.Print "Решение найдено !!! x= " & x

Exit Sub

End If

x0 = xn

xn = x

f0 = fn

fn = fx


Next i

End Sub


Function f(x)

f = (x - 4) * (x - 2)

End Function