2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему
 
 Вычисление синуса
Сообщение17.12.2009, 23:56 


24/08/09
12
Нужно вычислить sin(x) достаточно точно. x - может быть любым. Как я понимаю для этого нужно разложить его в ряд. Возникает вопрос в какой ряд и в окрестности какой точки его надо разложить, чтобы можно было с заданной точностью вычислить sin от любого аргумента? Или я ошибаюсь и нужен другой способ?

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение18.12.2009, 00:04 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Синус обычно вычисляется путём нажатия на кнопку "синус".
А человечки, которые сидят в калькуляторе позади этой кнопки, используют CORDIC (см. http://en.wikipedia.org/wiki/CORDIC)

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение18.12.2009, 01:29 
Заслуженный участник


22/01/07
605
Если нужен результат, то математические пакеты считают его с любой точностью, хоть десять тысяч знаков.

А если нужно имеено программу написать, не слишком сложную, то в компиляторах еще используется такой метод. Для вычисления тригонометрических функций достаточно вычислить синус на отрезке $[0,\pi/4]$. Остальное по формулам тригонометрии, только надо еще уметь вычислять корень, что можно делать с помощью метода Ньютона. На $[0,\pi/4]$ для вычисления с точностью типа $10^{-15}$ оказывается достаточно многочлена наилучшего приближения 12 степени. А для многочленов есть схема Горнера, так что получается достаточно быстро - тактов за 300. Вместо наилучшего приближения можно использовать многочлен Тейлора в нуле - легко прикинуть, сколько членов нужно взять для нужной точности.

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение18.12.2009, 10:55 
Заслуженный участник


11/05/08
32166
Gafield в сообщении #272620 писал(а):
Для вычисления тригонометрических функций достаточно вычислить синус на отрезке $[0,\pi/4]$. Остальное по формулам тригонометрии, только надо еще уметь вычислять корень, что можно делать с помощью метода Ньютона.

Не очень понятно, зачем Ньютона -- проще засадить ещё один такой же многочлен.

Gafield в сообщении #272620 писал(а):
А для многочленов есть схема Горнера,

Вряд ли есть -- погрешности будут накапливаться. Надо использовать разложение того многочлена по чебышёвским.

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение18.12.2009, 16:11 
Заслуженный участник


22/01/07
605
ewert в сообщении #272680 писал(а):
Не очень понятно, зачем Ньютона -- проще засадить ещё один такой же многочлен.

Если точность требуется та же, то да. Кто его знает, что значит "достаточно точно" в постановке задачи :) А метод Ньютона сверхсходящийся.
Цитата:
Вряд ли есть -- погрешности будут накапливаться. Надо использовать разложение того многочлена по чебышёвским.

Насколько я помню, реализовывалось все как раз просто умножением. И как считать чебышевские? К тому же непонятно, сколько накопится погрешности за 12 умножений иксов из $[0,\pi/4]$ на небольшие коэффициенты. Мне не кажется, что много. И вопрос этот проверяется непостредственно, если есть значения синуса с достаточно большим количеством верных знаков. Вполне возможно, что те, кто пишут компиляторы, считают погрешность эмпирически: взяли многочлен 11й степени - не хватает, взяли 12й...

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение18.12.2009, 16:45 
Заслуженный участник


11/05/08
32166
Gafield в сообщении #272759 писал(а):
И как считать чебышевские?

Рекуррентно. Это почти так же эффективно (по скорости), как и Горнер. Но -- существенно точнее.

Дело в том, что чистые степени на промежутке разложения ведут себя резко неравномерно. Из-за чего накапливается явно неадекватная погрешность округлений. В то время как каждый из чебышёвских многочленов -- примерно одинаков по масштабу на всём промежутке.

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение18.12.2009, 22:36 


24/08/09
12
Можно по-порядку и по-подробнее. Во-первых почему до pi/4? не очень понятно, во-вторых откуда корень и что за многочлены?

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение19.12.2009, 16:04 
Заслуженный участник


22/01/07
605
Потому что при $x\in[\pi/4,\pi/2]$ $\sin x=\cos(\pi/2-x)=\sqrt{1-\sin^2(\pi/2-x)}$. Зная четвертинку синусоиды, можно нарисовать ее всю :)
Какие многочлены? И какая вообще постанока задачи?

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение19.12.2009, 18:13 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Gafield в сообщении #272620 писал(а):
Для вычисления тригонометрических функций достаточно вычислить синус на отрезке $[0,\pi/4]$.

Только ещё $\pi$ нужно уметь с большой точностью считать.

 Профиль  
                  
 
 Re: Вычисление синуса
Сообщение19.12.2009, 18:57 
Заслуженный участник


11/05/08
32166
Профессор Снэйп в сообщении #273042 писал(а):
Только ещё $\pi$ нужно уметь с большой точностью считать.

не нужно -- она константа, и в программу с необходимой (и достаточной) точностью она уже зашита

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group