Уточнить корень, метод касательных - QBasic
Формулировка задачи:
Добрый день! очень нужна ваша помощь. Помогите пожалуйста решить. Нужно уточнить корень методом касательных с точностью ε=0,001 составить программу расчетов на языке БЕЙСИК.
Вот что получилось
Листинг программы
- 10 CLS
- 20 REM программа вычисления корня уравнения методом касательных
- 30 INPUT “Введите точность Е”, E
- 40 INPUT "введите координаты отрезка", a, b
- IF ((1/2*EXP(x) * (a + b) / 2) > 0) AND (1/2EXP(x) * (a + b) / 2) > 0 THEN x = b
- IF (1/2EXP(x) +X*X) * (a + b) / 2 < 0 AND (1/2EXP(x) * (a + b) / 2) < 0 THEN x = a
- WHILE t < (x - x1)
- x1 = x
- x = x - (1/2EXP(x) +X * X-2) / (1/2EXP(x) +X*X- 2)
- WEND
- PRINT "x=", x
- END
Решение задачи: «Уточнить корень, метод касательных»
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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д