- •Лабораторная работа №2 Методы численного интегрирования.
- •Лабораторная работа №4
- •4. Метод касательных.
- •Лабораторная работа №4 Численные методы поиска безусловного экстремума.
- •Лабораторная работа №5 Работа с файлами последовательного доступа.
- •Оператор открытия файла
- •Закрытие файла.
- •Оператор управления “конец файла”.
4. Метод касательных.
Метод Ньютона, или метод касательных основан на вычислении не только значений функции, но и значений ее производной. Разложим f(x) в ряд Тейлора и отбросим члены ряда выше второго порядка:
В этом приближении корень функции легко найти по формуле:
f(x) = 0
Для нелинейных функций это, конечно, не точное равенство, но
способ получить значение, более близкое к корню. Таким образом,
метод Ньютона состоит в построении последовательности итераций:
На какой итерации завершить процесс нахождения корня? Возможны два варианта: либо когда значение функции станет достаточно маленьким по абсолютной величине: , либо когда практически перестанет меняться значение x :
Порядок выполнения работы
Получить у преподавателя вариант задания, включающий в себя трансцендентное уравнение (f(X)=0), отрезок для поиска решения (a,b), точность вычисления значения корня ( eps )
Исследовать существование корня на заданном отрезке. ( требования к функции: разные знаки на концах отрезка, непрерывность и FI(x)<>0)
Построить график функции на заданном отрезке с помощью пакета Eureka. И найти точное значение корня уравнения.
Выяснить с какой стороны отрезка строить начальное приближение к решению уравнения методом Ньютона: если знак второй производной совпадает со знаком функции (f(x)·f''(x)>), то приближение строим с левой стороны отрезка, в противном случае - с правой стороны.
Написать подпрограмму функцию для вычисления функции f(x)
Написать подпрограмму для метода «половинного деления»
Написать подпрограмму для метода «Касательных» или Ньютона
Найти первую производную функции f'(x) и оформить ее вычисление процедурой- функцией
Написать головной модуль
Отладить программу и получить результаты
Сравнить полученные результаты, с полученными в пакете Eureka и сделать вывод о том, какой метод наиболее точный.
Содержание отчета
Содержательная постановка задачи
Исходные данные
Краткое описание методов.
Блок схема подпрограмм и блок схема головного ( или управляющего) модуля.
Листинг подпрограмм и управляющего модуля.
Распечатка полученных результатов
Распечатка результатов в Eureka
Сравнительный анализ результатов, полученных разными методами и в Eureka.
Литература
Лекции по курсу «Информатика»
Г.Зельднер «Quick-basic для носорогов».Из-во «Март», Москва, 1996
Бахвалов С.А. «Численные методы математического анализа», т. 1, «Высшая школа», Москва, 1976
Пример решения поставленной задачи в Basic
Уравнение соответствующего варианта приводится к виду
f(x)=0
Все исследования на существование и единственность корня проводятся с функцией f(x).
Головной или управляющий модуль. Напоминаем, что переход от головного модуля к подпрограммам осуществляется через диалоговое окно, вызываемое нажатием клавиши ALT + F1 или ALT + F2.
DECLARE SUB kas (x!, e!, kast!)
DECLARE FUNCTION f1! (x!)
DECLARE SUB dih (a!, b!, e!, rdih!)
DECLARE FUNCTION f! (x!)
REM Численные методы решения нелинейных уравнений
CLS
REM Ввод отрезка с проверкой на существование решения
DO
INPUT "Введите отрезок для поиска решения (a,b)"; a, b
INPUT "Введите точность поиска решения eps="; e
LOOP WHILE f(a) * f(b) > 0
REM Метод дихотомии или метод деления отрезка пополам
CALL dih(a, b, e, rdih)
PRINT "Корень уравнения, найденный по методу дихотомии - "; rdih
PRINT : PRINT
REM Метод касательных
INPUT "Введите начальное приближение x0 для корня на отрезке (a,b)";x
CALL kas( x, e, kast)
PRINT "Корень уравнения, найденный по методу касательных - "; kast
END
Вычисление значений функций оформляется процедурой-функцией:
FUNCTION F(X)
F= < функция соответствующего варианта >
END FUNCTION
Используя и в дальнейшем меню оболочки Quick-Basic пишем подпрограмму для метода половинного деления
SUB dih (a, b, e, rdih)
x = (b + a) / 2
DO
IF f(x) * f(a) < 0 THEN
b = x
ELSE
a = x
END IF
x = (b + a) / 2
LOOP UNTIL abs(b - a) < e
rdih = (b + a) / 2
END SUB
Перед тем как написать подпрограмму для метода Ньютона, организуем вычисление производной функции в процедуре-функции F1(х)
FUNCTION F1(X)
F= < производная функции соответствующего варианта >
END FUNCTION
Теперь пишем подпрограмму для метода Ньютона
SUB kas (x, e, kast)
DO
x= x - f(x) / f1(x)
LOOP UNTIL ABS(f(x) / f1(x)) < e
kast = x
END SUB
Программу осталось только набрать и отладить. Полученные результаты подклеить в отчет.
Пример решения поставленной задачи в Eureka
Esc - вход в меню
EDIT - окно редактирования для записи функций. В нем необходимо записать следующее:
Y=f(x)
f(x)= <функция соответствующего варианта>
f(x)=0
x>=a
x<=b
a и b левая и правая границы отрезка существования корня.
Solve – окно решения, где выводятся результаты вычислений. Их необходимо записать.
Graph-Plot-левая граница отрезка – правая граница отрезка. Окно, где выводится график функции, чтобы просмотреть график на весь экран нажмите F5.
В пакете Eureka необходимо получить точное значение корня уравнения (значение Y в окне Solve) и зарисовать график функции (Graph-Plot).