1 #Region "Microsoft.VisualBasic::b040327637042e7f47b204fa6b7081ca, Microsoft.VisualBasic.Core\Extensions\Math\Trigonometric\Trigonometric2.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module Trigonometric
35     
36     '         Function: Arccos, Arccosec, Arccotan, Arcsec, Arcsin
37     '                   Cosec, Cotan, HArccos, HArccosec, HArccotan
38     '                   HArcsec, HArcsin, Harctan, HCos, HCosec
39     '                   HCotan, HSec, HSin, HTan, Sec
40     
41     
42     ' /********************************************************************************/
43
44 #End Region
45
46 Imports sys = System.Math
47
48 Namespace Math
49
50     Partial Module Trigonometric
51
52         ''' <summary>
53         ''' Secant(正割) ``Sec(X) = 1 / Cos(X)`` 
54         ''' </summary>
55         ''' <param name="x"></param>
56         ''' <returns></returns>
57         Public Function Sec(x As DoubleAs Double
58             Return 1 / sys.Cos(x)
59         End Function
60
61         ''' <summary>
62         ''' Cosecant(余割) ``Cosec(X) = 1 / Sin(X)``
63         ''' </summary>
64         ''' <param name="x"></param>
65         ''' <returns></returns>
66         Public Function Cosec(x As DoubleAs Double
67             Return 1 / sys.Sin(x)
68         End Function
69
70         ''' <summary>
71         ''' Cotangent(余切) ``Cotan(X) = 1 / Tan(X)``
72         ''' </summary>
73         ''' <param name="x"></param>
74         ''' <returns></returns>
75         Public Function Cotan(x As DoubleAs Double
76             Return 1 / sys.Tan(x)
77         End Function
78
79         ''' <summary>
80         ''' Inverse Sine(反正弦)  ``Arcsin(X) = Atn(X / Sqr(-X * X + 1))``
81         ''' </summary>
82         ''' <param name="x"></param>
83         ''' <returns></returns>
84         Public Function Arcsin(x As DoubleAs Double
85             Return Atn(x / sys.Sqrt(-x * x + 1))
86         End Function
87
88         ''' <summary>
89         ''' Inverse Cosine(反余弦)  ``Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)``
90         ''' </summary>
91         ''' <param name="x"></param>
92         ''' <returns></returns>
93         Public Function Arccos(x As DoubleAs Double
94             Return Atn(-x / sys.Sqrt(-x * x + 1)) + 2 * Atn(1)
95         End Function
96
97         ''' <summary>
98         ''' Inverse Secant(反正割)  ``Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))``
99         ''' </summary>
100         ''' <param name="x"></param>
101         ''' <returns></returns>
102         Public Function Arcsec(x As DoubleAs Double
103             Return Atn(x / sys.Sqrt(x * x - 1)) + sys.Sign((x) - 1) * (2 * Atn(1))
104         End Function
105
106         ''' <summary>
107         ''' Inverse Cosecant(反余割)  ``Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))`` 
108         ''' </summary>
109         ''' <param name="x"></param>
110         ''' <returns></returns>
111         Public Function Arccosec(x As DoubleAs Double
112             Return Atn(x / sys.Sqrt(x * x - 1)) + (sys.Sign(x) - 1) * (2 * Atn(1))
113         End Function
114
115         ''' <summary>
116         ''' Inverse Cotangent(反余切)  ``Arccotan(X) = Atn(X) + 2 * Atn(1)``
117         ''' </summary>
118         ''' <param name="x"></param>
119         ''' <returns></returns>
120         Public Function Arccotan(x As DoubleAs Double
121             Return Atn(x) + 2 * Atn(1)
122         End Function
123
124         ''' <summary>
125         ''' Hyperbolic Sine(双曲正弦)  ``HSin(X) = (Exp(X) - Exp(-X)) / 2``  
126         ''' </summary>
127         ''' <param name="x"></param>
128         ''' <returns></returns>
129         Public Function HSin(x As DoubleAs Double
130             Return (sys.Exp(x) - sys.Exp(-x)) / 2
131         End Function
132
133         ''' <summary>
134         ''' Hyperbolic Cosine(双曲余弦)  ``HCos(X) = (Exp(X) + Exp(-X)) / 2`` 
135         ''' </summary>
136         ''' <param name="x"></param>
137         ''' <returns></returns>
138         Public Function HCos(x As DoubleAs Double
139             Return (sys.Exp(x) + sys.Exp(-x)) / 2
140         End Function
141
142         ''' <summary>
143         ''' Hyperbolic Tangent(双曲正切)  ``HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))`` 
144         ''' </summary>
145         ''' <param name="x"></param>
146         ''' <returns></returns>
147         Public Function HTan(x As DoubleAs Double
148             Return (sys.Exp(x) - sys.Exp(-x)) / (sys.Exp(x) + sys.Exp(-x))
149         End Function
150
151         ''' <summary>
152         ''' Hyperbolic Secant(双曲正割)  ``HSec(X) = 2 / (Exp(X) + Exp(-X))`` 
153         ''' </summary>
154         ''' <param name="x"></param>
155         ''' <returns></returns>
156         Public Function HSec(x As DoubleAs Double
157             Return 2 / (sys.Exp(x) + sys.Exp(-x))
158         End Function
159
160         ''' <summary>
161         ''' Hyperbolic Cosecant(双曲余割) ``HCosec(X) = 2 / (Exp(X) - Exp(-X))`` 
162         ''' </summary>
163         ''' <param name="x"></param>
164         ''' <returns></returns>
165         Public Function HCosec(x As DoubleAs Double
166             Return 2 / (sys.Exp(x) - sys.Exp(-x))
167         End Function
168
169         ''' <summary>
170         ''' Hyperbolic Cotangent(双曲余切) ``HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))`` 
171         ''' </summary>
172         ''' <param name="x"></param>
173         ''' <returns></returns>
174         Public Function HCotan(x As DoubleAs Double
175             Return (sys.Exp(x) + sys.Exp(-x)) / (sys.Exp(x) - sys.Exp(-x))
176         End Function
177
178         ''' <summary>
179         ''' Inverse Hyperbolic Sine(反双曲正弦) ``HArcsin(X) = Log(X + Sqr(X * X + 1))`` 
180         ''' </summary>
181         ''' <param name="x"></param>
182         ''' <returns></returns>
183         Public Function HArcsin(x As DoubleAs Double
184             Return sys.Log(x + sys.Sqrt(x * x + 1))
185         End Function
186
187         ''' <summary>
188         ''' Inverse Hyperbolic Cosine(反双曲余弦) ``HArccos(X) = Log(X + Sqr(X * X - 1))`` 
189         ''' </summary>
190         ''' <param name="x"></param>
191         ''' <returns></returns>
192         Public Function HArccos(x As DoubleAs Double
193             Return sys.Log(x + sys.Sqrt(x * x - 1))
194         End Function
195
196         ''' <summary>
197         ''' Inverse Hyperbolic Tangent(反双曲正切) ``HArctan(X) = Log((1 + X) / (1 - X)) / 2`` 
198         ''' </summary>
199         ''' <param name="x"></param>
200         ''' <returns></returns>
201         Public Function Harctan(x As DoubleAs Double
202             Return sys.Log((1 + x) / (1 - x)) / 2
203         End Function
204
205         ''' <summary>
206         ''' Inverse Hyperbolic Secant(反双曲正割) ``HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)`` 
207         ''' </summary>
208         ''' <param name="x"></param>
209         ''' <returns></returns>
210         Public Function HArcsec(x As DoubleAs Double
211             Return sys.Log((sys.Sqrt(-x * x + 1) + 1) / x)
212         End Function
213
214         ''' <summary>
215         ''' Inverse Hyperbolic Cosecant(反双曲余割) ``HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)`` 
216         ''' </summary>
217         ''' <param name="x"></param>
218         ''' <returns></returns>
219         Public Function HArccosec(x As DoubleAs Double
220             Return sys.Log((sys.Sign(x) * sys.Sqrt(x * x + 1) + 1) / x)
221         End Function
222
223         ''' <summary>
224         ''' Inverse Hyperbolic Cotangent(反双曲余切)  ``HArccotan(X) = Log((X + 1) / (X - 1)) / 2`` 
225         ''' </summary>
226         ''' <param name="x"></param>
227         ''' <returns></returns>
228         Public Function HArccotan(x As DoubleAs Double
229             Return sys.Log((x + 1) / (x - 1)) / 2
230         End Function
231     End Module
232 End Namespace