Форум программистов, компьютерный форум, киберфорум
Наши страницы
нтч
Войти
Регистрация
Восстановить пароль
20 Июля 1969. Нил Армстронг ступил на поверхность Луны.
20 Июля 2019. Спустя 50 лет - никого нет!
Оценить эту запись

Арксинус

Запись от нтч размещена 21.03.2019 в 11:09
Обновил(-а) нтч Вчера в 07:38

Следует отметить, что обратные тригонометрические функции мало кто любит. На планете Земля найдется всего два человека. Я надеюсь, что прочитав эту запись вы воспылаете любовью к такой замечательной функции как Арксинус. А нет - значит нет.

1. Вычисление
Если арксинус прямо не задан, то часто его вычисляют через арктангенс по формуле
http://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=arctg\frac{x}{\sqrt{1-x^2}}
2. Однако можно вычислить и по другой формуле (рекурсия)
http://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=2arcsin\sqrt{\frac{1-\sqrt{1-x^2}}{2}}

для остановки рекурсивных вычислений можно применить приближенную формулу arcsin(x) = x
3. Вот пример рекурсивной функции

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
REM
REM  Максимальное число обращений
REM         равно 25 (при x = +/-1)
REM
 
FUNCTION Asin (x)
   IF ABS(x) < .0000001 THEN
      Asin = x
   ELSE
      x2 = (1 - SQR(1 - x ^ 2)) / 2
      Asin = 2 * Asin(SQR(x2))
   END IF
END FUNCTION
примечание
Если кому-то мало предложенной точности вычислений, то можно для остановки рекурсии использовать следующую приближенную формулу http://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=x+\frac{x^3}{6} , при этом точность увеличится в миллион раз, а максимальное число обращений к функции составит всего 12 раз.

4. Неравенство
я полагаю, что для вас не составит труда доказать следующее неравенство
http://www.cyberforum.ru/cgi-bin/latex.cgi?2arcsin\frac{a+b}{2}\;\leq\;arcsin(a)+arcsin(b), где a и b положительные числа

5. Приближенные формулы
Вы уже знаете некоторые приближенные формулы. Например arcsin(x) = x
Сейчас я выведу еще одну, поистине удивительную формулу. Вам такая и не снилась. Но вы счастливый человек, коль скоро заглянули сюда на огонёк.
ЗАДАЧА
требуется вывести приближенную формулу для Арксинуса при икс близком к 1.
Решение
y = arcsin(x)
http://www.cyberforum.ru/cgi-bin/latex.cgi?y'=\frac{1}{\sqrt{1-x^2}}= \frac{x}{\sqrt{1-x^2}} (мы считаем, что x = 1)
теперь вычислим неопределённый интеграл http://www.cyberforum.ru/cgi-bin/latex.cgi?y=\int \frac{xdx}{\sqrt{1-x^2}}
получаем http://www.cyberforum.ru/cgi-bin/latex.cgi?y =C-\sqrt{1-x^2}, так как при x = 1 y = pi / 2, то получим искомую формулу

http://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=\frac{\pi}{2}-\sqrt{1-x^2} (что и требовалось получить)

ещё одну приближённую формулу (при x = -1) можно получить в уме (если он есть). Достаточно вспомнить, что арксинус функция Нечётная. То есть arcsin(-x) = -arcsin(x)
или имеем формулу для икс близком к -1
http://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=-(\frac{\pi}{2}-\sqrt{1-x^2})

6. Арксинус можно также вычислить графически (приближенно конечно)
Вообще верхняя шкала неравномерная. Поэтому справа от 60° идут такие числа
60°, 65°, 70°, 75°, 80°, 90° (точность конечно невелика и я подумал, что надо было эту часть графика построить отдельно и в большем масштабе)
Миниатюры
Нажмите на изображение для увеличения
Название: ним.GIF
Просмотров: 25
Размер:	23.7 Кб
ID:	5336  
Размещено в Выбор цели
Просмотров 159 Комментарии 7
Всего комментариев 7
Комментарии
  1. Старый комментарий
    http://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=x+\frac{1*x^3}{2*3}+\frac{1*3*x^5}{2*4*5}+\frac{1*3*5*x^7}{2*4*6*7}+... при http://www.cyberforum.ru/cgi-bin/latex.cgi?|x|<1
    Т.е. в числителях дробей - нечётные сомножители и степени, в знаменателях - чётные и в качестве добавочного сомножителя входит текущая для дроби степень при иксе.
    В нередуцированном виде (без вычислений значений произведений констант) оставил специально - чтобы было виднее, как следующие члены ряда должны строиться.
    Так что лучше сразу считать арксинус через сумму 3-4 членов указанного ряда. Уж если Вам точности пары членов хватало - то станет ещё точнее, и, заодно, будет быстрее вычислений по Вашей схеме.
    Запись от VTsaregorodtsev размещена 26.04.2019 в 12:29 VTsaregorodtsev на форуме
    Обновил(-а) VTsaregorodtsev 26.04.2019 в 12:30
  2. Старый комментарий
    VTsaregorodtsev,
    спасибо! Я конечно только слышал об этом ряде, но как он выглядит особо не интересовался. Почему? Да предполагал, что при икс по модулю близком к 1 потребуется много слагаемых, чтобы получить необходимую точность. А вот вы... Я потрясён вашими знаниями в этой области!
    Запись от нтч размещена 26.04.2019 в 12:45 нтч вне форума
  3. Старый комментарий
    Аватар для liv
    Вот полезная ссылка по разложению некоторых функций в степенные ряды...
    Запись от liv размещена 26.04.2019 в 18:26 liv вне форума
    Обновил(-а) liv 26.04.2019 в 18:28
  4. Старый комментарий
    liv,
    спасибо. Хотел вас спросить... А вам известен например такой метод разложения функции ряд Тейлора? Дана функция y = arctg(x). Тогда http://www.cyberforum.ru/cgi-bin/latex.cgi?y'=\frac{1}{1+x^2}=1-x^2+x^4-x^6+x^8-\;... Интегрируем... и получаем
    http://www.cyberforum.ru/cgi-bin/latex.cgi?arctg(x)=x-\frac{x^3}{3}+\frac{x^5}{5}-\;...
    Арксинус тоже можно получить подобным способом. Если ее производную рассматривать как бином Ньютона, разложение которого уже известно.

    примечание:
    ряды можно также умножать и делить... в частности делением несложно получить разложение тангенса в ряд Тейлора (ряд для синуса / ряд для косинуса)
    Запись от нтч размещена 27.04.2019 в 06:48 нтч вне форума
  5. Старый комментарий
    А зачем это надо? Разве всю тригонометрию не считает процессор аппаратно?
    Точность компа ограничена, поэтому используя arctg, arcsin и корни в формуле разве не уменьшается точность и увеличивается время расчета против прямого вызова арксинуса?
    Запись от Excalibur921 размещена 27.04.2019 в 08:39 Excalibur921 вне форума
  6. Старый комментарий
    Excalibur921,
    дело в том, что не в каждом языке программирования есть такая функция как арксинус. То есть приходится ее вычислять либо прямо, либо косвенно. Конечно тут много зависит от самой задачи. Вот ещё пример. Требуется знать только конечное значение этой функции (например 90-180 значений). Тогда проще их вычислить заранее и заполнить массив прямо в коде программы.
    ...
    хотелось бы подчеркнуть, что универсальные методы как правило более медленные и не всегда они нужны.
    Запись от нтч размещена 27.04.2019 в 09:53 нтч вне форума
  7. Старый комментарий
    Цитата:
    Сообщение от Excalibur921 Просмотреть комментарий
    А зачем это надо? Разве всю тригонометрию не считает процессор аппаратно?
    1. Он её считает долго. Полсотни-сотня тактов на команду.
    2. Он её считает в скалярном режиме. Векторных=SIMD команд (SSE, AVX, AVX512) нет и не планируется.
    3. Аппаратная точность результата у х87 (long double, т.е. 10 байт) кому-то может быть совершенно не нужна.

    Отсюда и желание (у меня, например) пользоваться быстрыми векторизованными аппроксимациями, да ещё и во float-точности (чтобы побольше элементов вектора хватать SIMD-командой).
    Ряды - векторизуются. Существующие для вычислений exp(x), ln(x) битхаки - тоже векторизуются.
    Запись от VTsaregorodtsev размещена 27.04.2019 в 12:42 VTsaregorodtsev на форуме
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru