ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 15.07.2025

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

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

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

22

L = Sgn(M) * 2 / Abs(M) 'определить параметр ' Начать процесс итераций

x0 = a Do

x1 = x0 - L * f(x0) d = Abs(x1 - x0) x0 = x1

Loop Until d < e

MsgBox x1, , " Корень уравнения на отрезке [" & a & ", " & b & "]" End Sub

1.2.8.3 Метод Ньютона

Function f(x)

' вычисление функции f(x)

f = 5 ^ x - 6 * x - 3

End Function

Function f1(x)

' производная функции f(x)

f1 = Log(5) * 5 ^ x - 6

End Function

Function f2(x)

'вторая производная функции f(x)

f2 = Sqr(Log(5)) * 5 ^ x

End Function

Sub Newton() Const e = 0.0000001

Dim a As Double, b As Double, x As Double, M1 As Double

Dim M2 As Double, dx As Double, x0 As Double, x1 As Double, p As Double a = InputBox("Введите значение а")

b = InputBox("Введите значение b")

'Найти наибольшее значение модуля второй производной M2 = f2(a)

x = a

dx = 0.01 Do

x = x + dx p = f2(x)

If Abs(p) > Abs(M2) Then M2 = p

End If

Loop Until x > b

'Найти наименьшее значение модуля производной

M1 = Abs(f1(a)) x = a

dx = 0.01

23

Do

x = x + dx

p = Abs(f1(x))

If p < M1 Then M1 = p

End If

Loop Until x > b

If Sgn(M2) = Sgn(f(a)) Then x0 = a

Else x0 = b End If

' Начать процесс итераций Do

x1 = x0 - f(x0) / f1(x0) d = Sqr(Abs(x1 - x0)) x0 = x1

Loop Until d < 2 * M1 * e / Abs(M2) If Sgn(f(a)) <> Sgn(f(b)) Then

MsgBox x1, , " Корень уравнения на отрезке [" & a & ", " & b & "]" Else

MsgBox "Метод не применим" End If

End Sub

1.2.8.4 Метод хорд

Function f(x)

' вычисление функции f(x)

f = 5 ^ x - 6 * x - 3

End Function

Function f1(x)

'производная функции f(x)

f1 = Log(5) * 5 ^ x - 6

End Function

Function f2(x) 'вторая производная функции f(x)

f2 = Sqr(Log(5)) * 5 ^ x End Function

Sub Hord()

Const e = 0.0000001

Dim a As Double, b As Double, x As Double, M As Double Dim M1 As Double, dx As Double, err As integer, p As Double


24

a = InputBox("Введите значение а") b = InputBox("Введите значение b")

err = 0

If Sgn(f(a)) <> Sgn(f(b)) Then

' Установить вариант сужения интервала изоляции корня

If Sgn(f1(a)) = Sgn(f2(a)) Then v = 1

Else v = 2 End If

'Найти наибольшее значение модуля производной

M = Abs(f1(a)) x = a

dx = 0.01 Do

x = x + dx

p = Abs(f1(x))

If p > M Then M = p

End If

Loop Until x > b

'Найти наименьшее значение модуля производной

M1 = Abs(f1(a)) x = a

dx = 0.01 Do

x = x + dx

p = Abs(f1(x))

If p < M1 Then M1 = p

End If

Loop Until x > b

' Цикл уточнения корня

Do

x = a - f(a) * (b - a) / (f(b) - f(a)) If v = 1 Then

d = x - a a = x Else

d = b - x b = x End If

25

Loop Until d < M1 / (M - M1) * e MsgBox x, , "Корень уравнения" Else

MsgBox "Метод не применим" End If

End Sub

1.2.8.5 Комбинированный метод

Function f(x)

' вычисление функции f(x)

f = 5 ^ x - 6 * x - 3

End Function

Function f1(x)

'производная функции f(x)

f1 = Log(5) * 5 ^ x - 6

End Function

Function f2(x)

' вторая производная функции f(x)

f2 = Sqr(Log(5)) * 5 ^ x

End Function

Sub Kombi()

Const e = 0.0000001

Dim a As Double, b As Double, a1 As Double, b1 As Double, x As Double Dim err As integer, p As Double

a = InputBox("Введите значение а") b = InputBox("Введите значение b")

a1 = a

b1 = b err = 0

If Sgn(f(a)) <> Sgn(f(b)) Then

' Установить вариант сужения интервала изоляции корня If Sgn(f1(a)) = Sgn(f2(a)) Then

v = 1 Else v = 2 End If Do

If v = 1 Then

a1 = a1 - (f(a1) / (f(b1) - f(a1))) * (b1 - a1) b1 = b1 - f(b1) / f1(b1)

Else


26

b1 = b1 - (f(b1) / (f(b1) - f(a1))) * (b1 - a1) a1 = a1 - f(a1) / f1(a1)

End If

Loop Until b1 - a1 < e

x = (a1 + b1) / 2

MsgBox x, , " Корень уравнения на отрезке [" & a & ", " & b & "]" Else

MsgBox "Метод не применим" End If

End Sub

1.2.9Уточнение корней уравнений в Excel с помощью циклической ссылки

При организации циклической ссылки точность вычислений зависит от числа выполненных итераций. Это число определяет пользователь, руководствуясь формулами оценки точности вычислений приближенного значения корня, в зависимости от применяемого метода, например, в методе половинного деления число итераций, определяемого формулой (6), при этом погрешность вычислений определяется по формуле (5).

Вычислительный процесс должен быть запущен после набора всех команд, реализующих алгоритм. В связи с этим предлагается следующая схема действий:

1.В меню Сервис выбрать команду Параметры. В появившемся окне Параметры выбрать вкладку Вычисления, на которой снять флажок Итерации; в поле Предельное число итераций ввести число, обеспечивающее точность вычислений.

2.Выполнить ввод команд, реализующих алгоритм.

3.Выполнить команду Сервис/Параметры. На вкладке Вычисления окна диалога Параметры установить флажок Итерации и нажать кнопку Ок. Выполняется

расчет.

Замечания:

1.Если Excel регистрирует циклическую ссылку, следует в появившемся окне нажать кнопку Отмена.

2.Если повторный расчет требует восстановления исходного состояния, то следует на вкладке Вычисления снять флажок Итерации, а затем выполнить двой-

ной щелчок мышкой по соответствующей ячейке. Ячейка открывается для корректировки, формулу не корректируем, а нажимаем на клавишу Enter.

3. Расчеты с использованием циклической ссылки могут быть выполнены пошагово:

1) В меню Сервис выбираем команду Параметры. В появившемся окне Параметры выбираем вкладку Вычисления, на которой устанавливаем флажок Итерации, в поле Предельное число итераций вводим число 1 и нажимаем кнопку Ok. Выполняется одна итерация.

2) При каждом нажатии клавиши F9 будет выполняться одна итерация. Рассмотрим решение примера средствами Excel.


27

1.2.9.1Метод половинного деления

Втаблице Excel выполним следующие действия.

1.В ячейку D4 вводим значение a = –1начало интервала изоляции нуля функции f(x). В ячейку E4 вводим значение b = 0 – конец интервала изоляции нуля функции f(x).

2.В ячейку G4 вводим константу ε = 10–7, определяющую точность вычисле-

ний.

3.В ячейку H4 вводим формулу (5), определяющую число итераций для достижения заданной точности:

=ОКРУГЛ((LN($E$4-$D$4)-LN($G$4))/LN(2);0).

На вкладке Вычисления в поле Предельное число итераций вводим полученное число.

4. В ячейку G9 вводим формулу (4), определяющую достигнутую точность вычислений:

=($E$4-$D$4)/2^($H$7+1).

6. В ячейку H7 вводим формулу, определяющую число выполненных итера-

ций

=$H$7+1.

7. Распределяем ячейки и вводим соответствующие формулы, реализующие метод половинного деления. Данные см. в таблице.

Имя ячейки

Обозначе-

Формула

Комментарий

ние

E15

an

=ЕСЛИ($H$7=1;D4;E21)

Установить начало интер-

вала изоляции корня функ-

ции f(x)

E16

bn

=ЕСЛИ($H$7=1;E4;E22)

Установить конец интерва-

ла изоляции корня функ-

ции f(x)

E17

x

=(E15+E16)/2

Вычислить срединную точ-

ку интервала – приближен-

ное значение нуля функции

f(x)

E18

f(x)

= 5^E17-6*E17-3

Вычислить значение функ-

ции f(x) в точке x.

E19

sign f(x)

=ЕСЛИ(E18>0;1;-1)

Определить знак функции

f(x) в точке x

E20

sign f(a)

=ЕСЛИ(5^E15-6*E15-3>0;1;-1)

Определить знак функции

f(x) в точке x = a

E21

an+1

=ЕСЛИ(E20=E19;E17;E15)

Вычислить новое значение

начало интервала изоляции

нуля функции f(x)

E22

bn+1

=ЕСЛИ(E20=E19;E16;E17)

Вычислить новое значение

конца интервала изоляции

нуля функции f(x)

8. Выполняем расчет по алгоритму п. 1.2.9.


28

1.2.9.2 Метод итераций

Метод итераций реализуется следующим алгоритмом.

1. Выполните распределение ячеек и запись расчетных формул:

диапазон A5:A15 – значения аргумента: –1 ≤ x ≤ 0; x = 0,1;

диапазон B5:B15 – значения производной f '(x). В ячейку B5 введите формулу =LN(5)*5^A5-6 и распространите ее на указанный диапазон;

С5 – максимальное значение модуля производной max |f '(x)|. Введите формулу =ЕСЛИ(B5<0;ABS(МИН(B5:B15));МАКС(B5:B15));

D5 – параметр λ = sgn f '(η) M2 . Введите формулу =ЗНАК(B5)*2/C5;

E5 – предыдущее приближение x0. Введите формулу =ЕСЛИ(G5=0;A5;F5). Если число итераций G5=0, то значение для x0 устанавливается равным началу отрезка отделения корня, иначе – значению, вычисленному при предыдущей итерации;

F5 – последующее приближение x1. Введите формулу =E5-$D$5*(5^E5- 6*E5-3);

G5 – счетчик числа итераций. Введите формулу =G5+1;

H5 – приближенное значение корня x. Введите формулу =(E5+F5)/2;

– I5 – значение функции в точке x. Введите формулу =5^H5-6*H5-3.

2.Выполните расчет.

3.Конец алгоритма.

1.2.9.3Метод Ньютона

Втаблице Excel выполним следующие действия.

1.Выполните распределение ячеек и запись расчетных формул:

диапазон A5:A15 – значения аргумента: –1 ≤ x ≤ 0; x = 0,1;

диапазон B5:B15 – значения производной f '(x). В ячейку B5 введите формулу =LN(5)*5^A5-6 и распространите ее на указанный диапазон;

диапазон C5:C15 – значения второй производной f ''(x). В ячейку C5 введите формулу =LN(5)*5^A5*LN(5) и распространите ее на указанный диапазон;

D5 – максимальное значение модуля второй производной max |f ''(x)|. Введите формулу =ЕСЛИ(C5<0;ABS(МИН(C5:C15));МАКС(C5:C15));

E5 – минимальное значение модуля производной min |f '(x)|. Введите формулу=ЕСЛИ(B5<0;ABS(МАКС(B5:B15));МИН(B5:B15));

F5 – предыдущее приближение x0. Введите формулу

=ЕСЛИ(H5=0;ЕСЛИ(ЗНАК(B5)=ЗНАК(C5);A15;A5);G5). {Если число итераций

H5=0, то значение для x0 устанавливается равным началу отрезка отделения корня, если не совпадают знаки первой и второй производной функции и концу отрезка отделения корня, если эти знаки совпадают, иначе – значению, вычисленному при предыдущей итерации};

G5 – последующее приближение x1. Введите формулу

=F5-(5^F5-6*F5-3)/(LN(5)*5^F5-6);

H5 – счетчик числа выполненных итераций. Введите формулу =H5+1;