40.1.2. ВЫЧИСЛЕНИЕ СЛОЖНЫХ ФУНКЦИЙ




THIS SECTION IS UNDER CONSTRUCTION


Основные алгоритмы для вычисления транцедентальных функций: 1) CORDIC (Coordinate Rotation Digital Computing) Идея: поворот осей координат на фиксированный угол меньше A.



|cos(A) -sin(A)| |x| |x'| |sin(A) cos(A)| |y| = |y'| x' = x * cos(A) - y * sin(A) y' = y * cos(A) + x * sin(A) x' / cos(A) = x - y * tg(A) y' / cos(A) = y + x * tg(A) A tgA 45' 1 26.565' 1/2 14.036' 1/4 7.125' 1/8 3.576' 1/16 1.789' 1/32 0.895' 1/64 0.4476' 1/128 Делаем сдвиг на такой угол A, чтобы tag(A) = +- 2^(-i) x{i+1} = K{i} * (x{i} - (y{i}*d{i}*2^(-i)) y{i+1} = K{i} * (y{i} + (x{i}*d{i}*2^(-i)) где, d{i} = +- 1 (направление сдвига) K{i} = cos(arctg(2^(-i))) cos(arctg(2^(-i))) = 1/sqrt(1 + 2^(-2*i))








THIS SECTION IS UNDER CONSTRUCTION


2) Апроксимация (convergence Computation method) Табличная или по аппроксимирующему полиному Затем добиваем ряд как разность, он тоже быстро сходится.




Один из вариантов для ряда: метод Ньютона



X{n+1} = Xn - F(Xn)/F'(Xn) в окрестности точки Сначала берем некое приближенное значение, затем считаем по рекуррентной формуле. Примеры: Надо вычислить X{n+1} SQRT(A) X^2 - A 0.5 * (Xn + A/Xn) A^(1/3) X^3 - A 1/3 * (2Xn + A/(Xn^2)) 1/SQRT(A) X^-2 - A Xn/2 * (3 - A * Xn^2) 1/A X^-1 - A Xn * (2 - A * Xn) итд


Как узнать где остановится для заданной точности? X + Y = X*(1+Y/X), если Y/X меньше чем заданная точность, то все приехали. абсолютная_ошибка = точное_значение - приближенное_значение относительная_ошибка = ошибка / точное_значение


Index Prev Next