Нахождение корня уравнения методом Ньютона
Нахождение корня уравнения методом Ньютона Данный пример демонстрирует программу, вычисляющую приближенное значение корня уравнения 2x2 – 4x + 1 = 0 на отрезке от 0 до 0. 5 методом Ньютона. Метод Ньютона позволяет получить приближенное значение корня уравнения, используя итерационный процесс, по следующей формуле:
,
где Xi+1 – следующее приближение (уточненное значение корня), Xi - приближенное значение корня на предыдущем шаге. В качестве начального приближения выбирается та точка отрезка, в которой выполняется условие . В данном примере в качестве начального приближения выбрана точка 0, поскольку . В примере итерационный процесс выполняется до тех пор, пока не будет достигнут машинный нуль. Далее представлен текст программы. CODE SEGMENT ; сегмент команд ASSUME CS: CODE, DS: DATA, SS: STAC Start: MOV AX, DATA ; настройка DS MOV DS, AX ; на сегмент данных FINIT ; инициализация сопроцессора FLDZ ; запись в стек начального приближения FLDZ ; выделение места для предыдущего приближения M1: FXCH ST(1); обмен ST(1) и ST(0) FADDP ST, ST; выталкивание из стека значения FLDZ ; загрузка в стек нуля FADD ST, ST(1); дублирование предыдущего приближения FMUL ST, ST ; вычисление xi2 FLD n2 ; загрузка в стек числа 2. 0 FMULP ST(1), ST ; вычисление 2xi2 FLD n4 ; загрузка в стек числа 4. 0 FMUL ST, ST(2); вычисление 4xi FSUBP ST(1), ST; вычисление 2xi2 - 4xi FLD1 ; загрузка в стек единицы FADDP ST(1), ST ; вычисление 2xi2 - 4xi + 1 FLD n4 ; загрузка в стек числа 4. 0 FMUL ST, ST(2); вычисление 4xi FLD n4 ; загрузка в стек числа 4. 0 FSUBP ST(1), ST; вычисление 4xi – 4
; вычисление (2xi2 - 4xi + 1) / (4xi – 4) FDIVP ST(1), ST ; вычисление -(2xi2 - 4xi + 1) / (4xi – 4) FCHS ; вычисление xi - (2xi2 - 4xi + 1) / (4xi – 4) FADD ST, ST(1) FCOM ; сравнение предыдущего и текущего приближений FSTSW SW ; загрузка регистра состояния в переменную SW AND SW, 4500H; наложение маски CMP SW, 4000H; проверка на установку флага C3 JNE M1 ; переход, если не достигнут машинный нуль MOV AX, 4C00H; функция завершения программы INT 21H ; вызов DOS CODE ENDS DATA SEGMENT ; сегмент данных n1 DD 1. 0 ; определение промежуточных чисел n2 DD 2. 0 n4 DD 4. 0 SW DW? ; переменная для хранения значения регистра состояния DATA ENDS STAC SEGMENT PARA STACK; сегмент стека DB 128 DUP (? ) ; область памяти под стек STAC ENDS END Start ; точка входа В начале программы командой FLDZ в стек сопроцессора загружается начальное приближение. На каждой итерации последовательно вычисляются значение функции в точке предыдущего приближения и значение производной функции. После нахождения этих значений вычисляется следующее приближение по формуле, приведенной выше. После нахождения следующего приближения, оно сравнивается с предыдущим. Программа завершает работу, когда текущее и предыдущее приближения равны. Это свидетельствует о достижении машинного нуля. Результат работы программы – приближенное значение корня уравнения – заносится в регистр ST(0). Задание на лабораторную работу Вычислить значения заданной функции на указанном отрезке. В процессе проверки работы программы в отладчике проверить полученное значение функции со значением, вычисленным на калькуляторе. Для вычисления значения выражения вида можно пользоваться следующей формулой перевода: , которая вычисляется с использованием команд FYL2X, F2XM1, FSCALE и FPREM. Для вычисления значений логарифмов можно воспользоваться формулой перевода для логарифмов:
. Натуральный логарифм можно вычислить по формуле с использованием команд FYL2X и FLDLN2. Для вычисления значений синуса и косинуса можно воспользоваться следующими тригонометрическими тождествами: В этих формулах перед знаком радикала должен быть поставлен знак «плюс» или «минус», в зависимости от того, в какой четверти находится значение угла для синуса или косинуса. Гиперболические синус, косинус и тангенс определяются следующими формулами: Так как команда FSCALE округляет указываемую степень числа 2 до наименьшего целого числа, то для корректного вычисления значения выражения можно использовать следующую формулу и следующую последовательность команд: fld y fld x fyl2x ; fld1 fscale ; fxch fld1 fxch fprem ; fmul f2xm1 ; fld1 fadd ; fmul ;
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|