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

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

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

Добавлен: 19.06.2025

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

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

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

23

Readln(a,b);

if sgn(f(a)) <> sgn(f(b)) then begin

{Установить вариант сужения интервала изоляции корня} if sgn(f1(a)) = sgn (f2(a)) then v := 1 else v := 2;

{Найти наибольшее значение модуля производной} M:=abs(f1(a)); x:=a; dx:=0.01;

repeat x:=x+dx; p:=abs(f1(x)); if p > M then M:=p; until x>b; {Найти наименьшее значение модуля производной} m1:=abs(f1(a)); x:=a; dx:=0.01;

repeat x:=x+dx; p:=abs(f1(x)); if p < m1 then m1:=p; until x>b; repeat {цикл уточнения корня} x:=a-f(a)*(b-a)/(f(b)-f(a)); {вычислить оценку приближения и выполнить сужение интервала изоляции корня}

if v =1 then begin d := x - a; a:=x end else begin d := b - x; b:=x; end; until d < m1/(M - m1)*e;

writeln('Корень x = ', x:12:9); end

else writeln('Метод хорд не применим'); readkey;

end.

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

program PHordiNuton; uses crt;

const e = 0.00000001;

function f(x:real):real;{вычисление функции f(x)} begin f:=exp(x*ln(5))-6*x-3; end;

function f1(x:real):real; {вычисление производной функции f'(x)} begin f1:=exp(x*ln(5))*ln(5)-6; end;

function f2(x:real):real; {вторая производная функции f(x)} begin f2:=sqr(ln(5))*exp(x*ln(5)); end;

function sgn(z:real):integer; {функция вычисления знака}

begin if z=0 then sgn:=0 else if z>0 then sgn:=1 else sgn:=-1; end; function fHord(c:real):real; {вычисление приближения по методу хорд} begin fHord:=c-f(c)*(b-a)/(f(b)-f(a)); end;

function fNuton(c:real):real; {вычисление приближения по методу Ньютона} begin fNuton:=c-f(c)/f1(c); end;

var a, b : real; v:byte; begin

clrscr;

writeln('Корни отделены на отрезках [-1;0], [1;2]. Введите значения a,b'); Readln(a, b);

if sgn(f(a)) <> sgn(f(b)) then

24

begin

{Установить вариант сужения интервала изоляции корня} if sgn(f1(a)) = sgn (f2(a)) then v := 1 else v := 2;

repeat {цикл уточнения значения корня}

if v = 1 then begin a:=fHord(a); b:=fNuton(b); end

else

begin a:=fNuton(a);b:=fHord(b); end;

until b-a<e;

writeln('Корень x= ',(a+b)/2:12:9);

end

else

writeln('Комбинированный метод не применим');

readkey;

end.

1.2.9 Уточнение корней уравнений средствами Excel

Для организации циклических вычислений в Excel имеются два механизма –

циклическая ссылка и подбор параметра.

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

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

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

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

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

Замечания:

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

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

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

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


25

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

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

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>0;1;-1)

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

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

E21

an+1

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

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


26

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

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

E22

bn+1

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

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

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

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

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

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));


27

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;

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

J5 – значение d. Введите формулу =(G5-F5)^2;

K5 – погрешность вычислений. Введите формулу =2*E5*0,0000001/D5.

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

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

1.2.9.4Метод хорд

Втаблице 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 – определить вариант v расчета. Введите формулу =ЕСЛИ(ЗНАК(B5)=ЗНАК(C5);1;2). Если совпадают знаки первой и второй производной функции f(x), то принимаем v =1 – расчет приблизительного значения корня с недостатком, иначе v = 2 – расчет приблизительного значения корня с избытком.

G5 –начало интервала изоляции корня, a. Введите формулу

=ЕСЛИ(J5=0;A5;ЕСЛИ(F5=1; I5;G5)).

Если число итераций J5=0, то значение для a устанавливается равным началу отрезка отделения корня, иначе, если вариант расчета v = 1 – значению x, в других случаях значение a не изменяется;

H5 – конец интервала изоляции корня, b. Введите формулу

=ЕСЛИ(J5=0;A15;ЕСЛИ(F5=2; I5;H5)).

Если число итераций J5=0, то значение для a устанавливается равным началу отрезка отделения корня, иначе, если вариант расчета v = 2 – значению x, в других случаях значение b не изменяется;

I5 – приближенное значение корня. Введите формулу


28

=G5-(5^G5-6*G5-3)*(H5-G5)/(5^H5-6*H5-3-(5^G5-6*G5-3));

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

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

L5 – значение d. Введите формулу =ЕСЛИ(F5=1;I5-G5;H5-I5);

M5 – погрешность вычислений. Введите формулу

=E5*0,0000001/ABS((D5-E5)).

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

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

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

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

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

диапазон A5:A6 – значения аргумента: a = –1; b = 0;

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

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

D5 – определить вариант расчета v. Введите формулу =ЕСЛИ(ЗНАК(B5)=ЗНАК(C5);1;2). Если совпадают знаки первой и второй производной функции f(x), то принимаем v =1, иначе v = 2;

E5 – начало интервала изоляции корня, a. Введите формулу

=ЕСЛИ(H5=0;A5;ЕСЛИ(D5=1; E5-(5^E5-6*E5-3)*(F5-E5)/(5^F5-6*F5-3-(5^E5- 6*E5-3));E5-(5^E5-6*E5-3)/(LN(5)*5^E5-6))).

Если число итераций H5=0, то значение для a устанавливается равным началу отрезка отделения корня, иначе, если вариант расчета v = 1 – значение a рассчитывается по формуле хорд, в других случаях значение a рассчитывается по формуле Ньютона;

F5 – b, конец интервала изоляции корня. Введите формулу

=ЕСЛИ(H5=0;A6;ЕСЛИ(D5=2; F5-(5^F5-6*F5-3)*(F5-E5)/(5^F5-6*F5-3-(5^E5- 6*E5-3));F5-(5^F5-6*F5-3)/(LN(5)*5^F5-6))).

Если число итераций H5=0, то значение для b устанавливается равным концу отрезка отделения корня, иначе, если вариант расчета v = 2 – значение b рассчитывается по формуле хорд, в других случаях значение b рассчитывается по формуле Ньютона;

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

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

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

J5 – значение d – погрешность вычислений. Введите формулу

=F5-E5.

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

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