Уточнить корень, метод касательных - QBasic
Формулировка задачи:
Добрый день! очень нужна ваша помощь. Помогите пожалуйста решить. Нужно уточнить корень методом касательных с точностью ε=0,001 составить программу расчетов на языке БЕЙСИК.
Вот что получилось
Решение задачи: «Уточнить корень, метод касательных»
textual
Листинг программы
DECLARE FUNCTION fx! (x!) DECLARE FUNCTION min1! (a!, b!, eps!) DECLARE FUNCTION Derivat1! (x0!, eps!) DECLARE FUNCTION Derivat2! (x0!, eps!) DECLARE FUNCTION Tangent! (a!, b!, eps!) DIM a!, b!, eps!, tmp! CLS eps = .001 a = 1.3 b = 1.5 tmp = Tangent(a, b, eps) PRINT "x1= "; tmp PRINT "y1= "; fx(tmp) a = -.9 b = -.7 tmp = Tangent(a, b, eps) PRINT "x2= "; tmp PRINT "y2= "; fx(tmp) FUNCTION Derivat1! (x0!, eps!) DIM dx!, dy!, dy1! dx = 1 DO dx = dx / 2 dy = fx(x0 + dx / 2) - fx(x0 - dx / 2) dy1 = fx(5 * x0 / 4 + dx) - 2 * fx(5 * x0 / 4) dy1 = dy1 + fx(5 * x0 / 4 - dx) LOOP UNTIL ABS(dy1 / (2 * dx)) < eps Derivat1 = dy / dx END FUNCTION FUNCTION Derivat2! (x0!, eps!) DIM dx!, dy!, dy1! dx = 1 DO dx = dx / 2 dy = fx(x0 + dx) - 2 * fx(x0) + fx(x0 - dx) dy1 = fx(5 * x0 / 4 + 2 * dx) - 2 * fx(5 * x0 / 4 + dx) dy1 = dy1 - fx(5 * x0 / 4 - 2 * dx) + 2 * fx(5 * x0 / 4 - dx) LOOP UNTIL ABS(dy1 / (6 * dx)) < eps Derivat2 = dy / (dx * dx) END FUNCTION FUNCTION fx! (x!) 'root1 [-0.9,-0.7]; root2 [1.3,1.5] fx = 1 / (2 * EXP(x)) + x * x - 2 END FUNCTION FUNCTION min1! (a!, b!, eps!) DIM d!, tmp! a = a - eps b = b + eps DO a = a + eps b = b - eps tmp = ABS(Derivat1(a, eps)) d = ABS(Derivat1(b, eps)) IF tmp > d THEN tmp = d LOOP UNTIL tmp <> 0 min1 = tmp END FUNCTION FUNCTION Tangent! (a!, b!, eps!) DIM x1!, M!, tmp! IF fx(a) * Derivat2(a, eps) > 0 THEN x1 = a ELSE x1 = b END IF M = min1(a, b, eps) DO tmp = x1 - fx(x1) / Derivat1(x1, eps) x1 = tmp LOOP UNTIL ABS(fx(x1)) / M < eps Tangent = tmp END FUNCTION
Объяснение кода листинга программы
В этом коде реализованы вычисления, связанные с поиском корней уравнений и касательных к графикам функций.
- В функции
Derivat1
иDerivat2
вычисляются приближенные значения первой и второй производных функцииfx
соответственно. Для этого используется метод конечных разностей. В обоих функциях используется цикл, который выполняется до тех пор, пока абсолютное значение производной не станет меньше заданной точностиeps
. Значение производной вычисляется на каждой итерации цикла, и если оно удовлетворяет условию, цикл прекращается и функция возвращает значение производной. - Функция
fx
представляет собой функцию, корни которой мы ищем. В этой функции используется формула для вычисления значения функции, а также вычисляется ее производная с помощью функцииDerivat1
. - Функция
min1
используется для определения интервала, в котором ищется корень. Она находит точку, в которой производнаяDerivat1
меняет знак с плюса на минус (или наоборот). Для этого используется цикл, который выполняется до тех пор, пока не будет найдена точка с максимальной ошибкой. - Функция
Tangent
вычисляет касательную к графику функцииfx
в точкеx1
. Если значение функцииfx
в этой точке положительно, то корень ищется на интервале[a, x1]
. Если значение отрицательно, то корень ищется на интервале[x1, b]
. Используется цикл, который выполняется до тех пор, пока абсолютное значение ошибки не станет меньше заданной точностиeps
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д