2010-01-06 26 views
5

Próbuję wprowadzić odwrotne funkcje trygonometryczne w aplikacji C#. Oczywiście nie mówię o zwykłym grzechu odwrotnym, o cos i tan, ponieważ wszystkie są dostarczane przez klasę Math. Co szukam jest odwrotne do sec, COSEC i cotan:Implementowanie trygonometrycznych funkcji odwrotnych w C#

Func<double,double> secant = (d => (1/Math.Cos(d))); 
Func<double,double> cosecant = (d => (1/Math.Sin(d))); 
Func<double,double> cotangent = (d => (Math.Cos(d)/Math.Sin(d))); 

Teraz mój problem jest, że chcę, aby wdrożyć odwrotności każdego z nich, ale nie wydaje się znaleźć prostą definicję odpowiednie odwrotności - arcsec, arccsc i arccot ​​- które mogę zmienić w kod C#.

Moje pytanie brzmi: czy możesz (a) wskazać mi kierunek dobrych zasobów lub (b) podać mi przykładowy kod?

+1

Czy sprawdziłeś MathWorld pod kątem formuł dla odwróceń, które chcesz? –

+1

Wikipedia, oczywiście. –

+0

W zależności od twoich potrzeb, nie musisz robić żadnej poważnej matematyki, aby to zrobić, dlatego nie potrzebujesz "definicji"; wystarczy przygotować tabelę odnośników. –

Odpowiedz

11

pewno żart:

asec(x) = acos(1/x) 
acsc(x) = asin(1/x) 
acot(x) = atan(1/x) 

:-P

+1

+1, Dość dużo: http://en.wikipedia.org/wiki/Funkcje_współczynnikowe – user7116

+0

Tak, ale to nie było do końca oczywiste wśród gór innych równań - http://en.wikipedia.org/wiki/Funkcje inwersyjne_trigonometryczne#Logarithmic_forms – RobV

+0

pamiętaj także o dodaniu kodu, aby uniknąć dobrze znanego dzielenia przez zero problemu – JosephDoggie

0

Na odwrotnej cotangens, używając Atan (1/x) nie zawsze będzie działać. Na przykład, potrzebne, aby wykonać dość skomplikowany wzór:

r = 0,25 * arccot ​​((2,5 x/100000) - 2.1) + 0,26

Przy realizacji Atan (1/x), rozwiązanie to powoduje w przerwie, gdy (2,5x/100000) - 2,1 wynosi zero, a wszystkie wartości po lewej stronie tego punktu są poniżej prawidłowych wartości pi/4.

Zamiast tego, użycie implementacji jako takiej dostarcza dokładnych odpowiedzi dla wszystkich potrzebnych punktów:

y = 0,25 * ((pi/2) - atan ((2,5x/100000) -2,1) + 0,26

Sugerowałbym przejście do strony desmos.com/calculator lub innego narzędzia graficznego i wykreślenie rzeczywistej funkcji arccot, a następnie porównanie różnych implementacji, aby upewnić się, że otrzymujesz to, co chcesz dla wszystkich wartości.