Тригонометрические функции

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ЭнерGY
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 10.07.2004 (Сб) 18:46

Тригонометрические функции

Сообщение ЭнерGY » 12.07.2004 (Пн) 19:15

arcsin, arccos - (крик отчаяния)Почему их нету?
Представляете в расчете попадается раз 30, а высчитывать из arctg грамозко (исключать /0; формула(из-за этого неточность). + расчет на трех страниц), делать сылки - путаница (в самом расчете их куча).
Плиз подскажите формулу arcsin и arccos нормальную.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 12.07.2004 (Пн) 19:21

MSDN есть? Тогда ищи раздел Derived Math Functions. Для конкретно твоего примера:
Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Правда, мне они тоже кажутся несколько подозрительными, но это все-таки дока от MS...

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Взгляд с боку

Сообщение Faust » 13.07.2004 (Вт) 18:39

Atn - функция неоднозначная, и меня тоже всегда раздражало то, что со времен gwbasic'а она остается единственной аркфункцией. Я в свое время решил проблему радикально - написал собственные Arcsin(x) и Arccos(x). Что и тебе советую сделать. Если оперативки много и скорость вычислений важнее точности, можешь заранее записать таблицу значений Arcsin(x), помня что Arccos(x)=Arcsin(x)+pi/2. Если же ситуация противоположная, то можешь использовать разложение функции в ряд.
Листинги не горят!

ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Сообщение ZOD » 14.07.2004 (Ср) 9:26

arcsin(x)=sin(x)^-1. А функция синуса в VB есть.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14100
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.07.2004 (Ср) 10:42

За такое исключать надо из школы/института.
sin(x)^-1 -- это 1/(sin(x)).
Lasciate ogni speranza, voi ch'entrate.

ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Сообщение ZOD » 19.07.2004 (Пн) 10:49

sin(x)^-1 -- это 1/(sin(x))
- А то я не знаю.
За такое исключать надо из школы/института.
- Прежде чем писать, неплохо бы проверить. Функции sin и arcsin - обратные, т.е. как ты уже заметил sin(x)^-1 -- это 1/(sin(x)). Кстати, к сведению, в инженерных и научных калькуляторах вместо arcsin всегда (или почти всегда) пишут sin^-1.
Вот так.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14100
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.07.2004 (Пн) 12:52

блин...
sin(30*) = 0.5
arcsin(0.5) = 30*
sin(30*)^-1 = 1/sin(30*) = 1/0.5 = 2

2 <> 30*
Lasciate ogni speranza, voi ch'entrate.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 20.07.2004 (Вт) 4:30

ZOD писал(а):
sin(x)^-1 -- это 1/(sin(x))
- А то я не знаю.
За такое исключать надо из школы/института.
- Прежде чем писать, неплохо бы проверить. Функции sin и arcsin - обратные, т.е. как ты уже заметил sin(x)^-1 -- это 1/(sin(x)). Кстати, к сведению, в инженерных и научных калькуляторах вместо arcsin всегда (или почти всегда) пишут sin^-1.
Вот так.


Пишут так для краткости, подразумевая обратность функции, а не то, что обратный синус (arcsin) это синус в минус первой степени.

Кстати, tg^-1=ctg, но "почемму-то" :) arctg<>ctg
С уважением, Approximator.

ToT
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 10.06.2002 (Пн) 11:56
Откуда: Russia, Taganrog

Сообщение ToT » 21.07.2004 (Ср) 9:49

То ZOD
Ты сильно ошибаешься, арксинус может принимать значения из отрезка [-pi/2;pi/2], а ф-ия 1/sin(x) при sin(x) стремящимя к 0 стремиться к бесконечности, т.е. конкретно выходит за рамки отрезка :) Да и вообще аргументом арксинуса могут быть только числа в диапазоне от -1 до 1. Вот так вот.
Keyboard not found. Press any key.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 22.07.2004 (Чт) 1:19

ToT писал(а):То ZOD
Ты сильно ошибаешься, арксинус может принимать значения из отрезка [-pi/2;pi/2]...

:) Ну, вообще-то обратные тригонометрические функции многозначные (angle+n*k*pi) с областью определения (-бесконечность, +бесконечность)
С уважением, Approximator.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 22.07.2004 (Чт) 5:56

[sin(x)]^(-1) == 1.0 / sin(x)
sin^(-1)(x) == arcsin(x)

Обратность здесь используется в разных смыслах:

в первом случае - как обратность вещественных чисел a * a^(-1) = E, где E - вещественная единица (т.е. 1.0).

[sin(x)] * [sin(x)]^(-1) = 1.0

во втором - как обратность оператора функции f * f^(-1) = E, где E - единичный оператор (т.е. тождественная функция E : x -> x).

sin( sin^(-1) (x) ) = x
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 22.07.2004 (Чт) 7:53

Vi писал(а):[sin(x)]^(-1) == 1.0 / sin(x)
sin^(-1)(x) == arcsin(x)

Обратность здесь используется в разных смыслах:

в первом случае - как обратность вещественных чисел a * a^(-1) = E, где E - вещественная единица (т.е. 1.0).

[sin(x)] * [sin(x)]^(-1) = 1.0

во втором - как обратность оператора функции f * f^(-1) = E, где E - единичный оператор (т.е. тождественная функция E : x -> x).

sin( sin^(-1) (x) ) = x

Углубим математическую тему :)?

Это всё верно, если существует изоморфизм, то есть взаимно-однозначное соответствие. Иными словами эти функции должны были бы взаимнооднозначно отображать друг в друга область значений друг друга. А подобное между прямой и обратной функцией существует не всегда. Например, как в этом случае, когда функции периодические...
С уважением, Approximator.

ToT
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 10.06.2002 (Пн) 11:56
Откуда: Russia, Taganrog

Сообщение ToT » 22.07.2004 (Чт) 13:13

Ну, вообще-то обратные тригонометрические функции многозначные (angle+n*k*pi) с областью определения (-бесконечность, +бесконечность)


Я не понял, что ты имел ввиду, но ты хочешь сказать, что обычному арксинусу(не гиперболическим всяким, а обыкновенному, формулу расчета котрого в этом топике хотел найти автор) можно подсунуть например число 5? Я проверил на калькуляторе :) - нельзя. И _множество значений_у арксинуса та которуя я сказал. Так как синус многих углов равен например 1, то принято рассматривать обратность синуса только на отрезке [-pi;pi].
Keyboard not found. Press any key.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 23.07.2004 (Пт) 1:41

ToT писал(а):
Ну, вообще-то обратные тригонометрические функции многозначные (angle+n*k*pi) с областью определения (-бесконечность, +бесконечность)


Я не понял, что ты имел ввиду, но ты хочешь сказать, что обычному арксинусу(не гиперболическим всяким, а обыкновенному, формулу расчета котрого в этом топике хотел найти автор) можно подсунуть например число 5? Я проверил на калькуляторе :) - нельзя. И _множество значений_у арксинуса та которуя я сказал. Так как синус многих углов равен например 1, то принято рассматривать обратность синуса только на отрезке [-pi;pi].

Аааа... ты о возможностях :) конкретного :) калькулятора... извини, я-то по наивности думал, что ты про обратные тригонометрические функции... :) Ладно, закончим этот околоматематический флуд. :)
С уважением, Approximator.

Вэйл
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 28.04.2013 (Вс) 8:02

Re: Тригонометрические функции

Сообщение Вэйл » 28.04.2013 (Вс) 8:51

Ещё на заре внедрения ЭВМ в практику я написал программу вычисления угла (дуги) по заданному синусу или косинусу методом задания угла, вычисления его тригонометрической функции, сравнения её с заданной и в зависимости от полученного результата добавлял или отнимал половину заданного, а затем половину предшествующей половины и так до тех пор пока не получал нужное значение с заданной точностью в цикле. Количество циклов зависит от заданной точности. Есть одна тонкость, заключающаяся в конечности разрядной сетки. При делении в конце концов заданный угол превращается в ноль. Поэтому каждый раз необходимо добавлять число, меньшее заданной точности. В этом случае зацикливания не будет. А уж квадрант определяется отдельно в программе, для которой решается проблема арксинуса (косинуса, котангенса).
Есть ещё один метод - метод задания случайных чисел. Этим методом решаются задачи, которые другими методами вообще решены быть не могут. Очень красивый метод! Да и первый тоже. Мне в то время некогда было искать формулы расчёта арков, но самое главное мне было очень интересно смотреть как машина здорово вычисляет искомое значение. Применялась программа в прикладной программе и действовала отлично!
Извините, может я ни в теме.

Вэйл
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 28.04.2013 (Вс) 8:02

Re: Тригонометрические функции

Сообщение Вэйл » 28.04.2013 (Вс) 9:05

Кстати, совсем недавно я написал такую же программу вычисления арксинуса или арккосинуса и арккотангенса этим методом на VB6.0. Работают отлично. А ранее было написано для ЭВМ Днепр - управляющая машина. И ещё другие особенности мною были решены. Например, замена команды деления, стыковка аналоговой машины с ЭВМ Днепр. Здесь особенность - необходимость подавления помех. Расстояние между машинами было порядка 50 метров.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3814
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Тригонометрические функции

Сообщение Mikle » 28.04.2013 (Вс) 9:23

Approximator писал(а):закончим этот околоматематический флуд.

Это не флуд, а принципиально важный вопрос. Ты написал:
Approximator писал(а):обратные тригонометрические функции многозначные (angle+n*k*pi) с областью определения (-бесконечность, +бесконечность)

Это их область ЗНАЧЕНИЙ. А область определения у них разная, у arcsin и arccos она от -1 до 1.

Правка:
Вэйл, ты видел дату последнего поста?

Вэйл
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 28.04.2013 (Вс) 8:02

Re: Тригонометрические функции

Сообщение Вэйл » 28.04.2013 (Вс) 12:32

Ну и что?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.04.2013 (Вс) 18:18

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16096
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Тригонометрические функции

Сообщение Хакер » 28.04.2013 (Вс) 21:25

Вэйл получает замечание за некрофилию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Bing-бот, NashRus, The trick и гости: 1

    TopList