Уточнить корень, метод касательных - 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

Объяснение кода листинга программы

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

  1. В функции Derivat1 и Derivat2 вычисляются приближенные значения первой и второй производных функции fx соответственно. Для этого используется метод конечных разностей. В обоих функциях используется цикл, который выполняется до тех пор, пока абсолютное значение производной не станет меньше заданной точности eps. Значение производной вычисляется на каждой итерации цикла, и если оно удовлетворяет условию, цикл прекращается и функция возвращает значение производной.
  2. Функция fx представляет собой функцию, корни которой мы ищем. В этой функции используется формула для вычисления значения функции, а также вычисляется ее производная с помощью функции Derivat1.
  3. Функция min1 используется для определения интервала, в котором ищется корень. Она находит точку, в которой производная Derivat1 меняет знак с плюса на минус (или наоборот). Для этого используется цикл, который выполняется до тех пор, пока не будет найдена точка с максимальной ошибкой.
  4. Функция Tangent вычисляет касательную к графику функции fx в точке x1. Если значение функции fx в этой точке положительно, то корень ищется на интервале [a, x1]. Если значение отрицательно, то корень ищется на интервале [x1, b]. Используется цикл, который выполняется до тех пор, пока абсолютное значение ошибки не станет меньше заданной точности eps.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы