OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
LinearMath.h
Go to the documentation of this file.
1 #ifndef CLASSIC_LinearMath_HH
2 #define CLASSIC_LinearMath_HH
3 
4 // ------------------------------------------------------------------------
5 // $RCSfile: LinearMath.h,v $
6 // ------------------------------------------------------------------------
7 // $Revision: 1.1.1.1.2.1 $
8 // ------------------------------------------------------------------------
9 // Copyright: see Copyright.readme
10 // ------------------------------------------------------------------------
11 // Description:
12 //
13 // Declared template functions:
14 //
15 // ------------------------------------------------------------------------
16 // Class category: FixedAlgebra
17 // ------------------------------------------------------------------------
18 //
19 // $Date: 2004/11/18 22:18:06 $
20 // $Author: jsberg $
21 //
22 // ------------------------------------------------------------------------
23 
24 #include "FixedAlgebra/LinearFun.h"
25 #include "Utilities/DomainError.h"
26 
27 
28 // Class LinearFun; global functions acting on LinearFun objects.
29 // These functions all work in the linear approximation.
30 // ------------------------------------------------------------------------
31 
33 template <class T, int N>
34 LinearFun<T, N> pow(const LinearFun<T, N> &x, int y);
35 
37 template <class T, int N>
39 
41 template <class T, int N>
43 
45 template <class T, int N>
47 
49 template <class T, int N>
51 
53 template <class T, int N>
55 
57 template <class T, int N>
59 
61 template <class T, int N>
63 
65 template <class T, int N>
67 
69 template <class T, int N>
71 
73 template <class T, int N>
75 
77 template <class T, int N>
79 
81 template <class T, int N>
83 
84 
85 // Implementation
86 // ------------------------------------------------------------------------
87 
88 template <class T, int N>
91  z[0] = std::pow(x[0], y);
92  T fac = T(y) * std::pow(x[0], y - 1);
93  for(int i = 1; i <= N; ++i) z[i] = fac * x[i];
94  return z;
95 }
96 
97 
98 template <class T, int N>
100  T aZero = x[0];
101  if(aZero <= 0.0) throw DomainError("sqrt(const LinearFun &)");
102  T series[2];
103  series[0] = sqrt(aZero);
104  series[1] = series[0] / (2.0 * aZero);
105  return x.taylor(series);
106 }
107 
108 
109 template <class T, int N>
111  T aZero = x[0];
112  T series[2];
113  series[0] = sin(aZero);
114  series[1] = cos(aZero);
115  return x.taylor(series);
116 }
117 
118 
119 template <class T, int N>
121  T aZero = x[0];
122  T series[2];
123  series[0] = cos(aZero);
124  series[1] = - sin(aZero);
125  return x.taylor(series);
126 }
127 
128 
129 template <class T, int N>
131  return sin(x) / cos(x);
132 }
133 
134 
135 template <class T, int N>
137  return cos(x).inverse();
138 }
139 
140 
141 template <class T, int N>
143  return sin(x).inverse();
144 }
145 
146 
147 template <class T, int N>
149  T aZero = x[0];
150  T series[2];
151  series[0] = series[1] = exp(aZero);
152  return x.taylor(series);
153 }
154 
155 
156 template <class T, int N>
158  T aZero = x[0];
159  if(aZero <= 0) throw DomainError("log(const LinearFun &)");
160 
161  T series[2];
162  series[0] = log(aZero);
163  series[1] = T(1) / aZero;
164  return x.taylor(series);
165 }
166 
167 
168 template <class T, int N>
170  T aZero = x[0];
171  T series[2];
172  series[0] = sinh(aZero);
173  series[1] = cosh(aZero);
174  return x.taylor(series);
175 }
176 
177 
178 template <class T, int N>
180  T aZero = x[0];
181  T series[2];
182  series[0] = cosh(aZero);
183  series[1] = sinh(aZero);
184  return x.taylor(series);
185 }
186 
187 
188 template <class T, int N>
190  return sinh(x) / cosh(x);
191 }
192 
193 #endif // CLASSIC_LinearMath_HH
Definition: rbendmap.h:8
LinearFun taylor(const T series[2]) const
Taylor series.
Definition: LinearFun.hpp:277
Tps< T > sin(const Tps< T > &x)
Sine.
Definition: TpsMath.h:111
Tps< T > exp(const Tps< T > &x)
Exponential.
Definition: TpsMath.h:165
Tps< T > tan(const Tps< T > &x)
Tangent.
Definition: TpsMath.h:147
Tps< T > cot(const Tps< T > &x)
Cotangent.
Tps< T > sec(const Tps< T > &x)
Secant.
Definition: TpsMath.h:153
Tps< T > log(const Tps< T > &x)
Natural logarithm.
Definition: TpsMath.h:182
Tps< T > cosh(const Tps< T > &x)
Hyperbolic cosine.
Definition: TpsMath.h:222
Tps< T > csc(const Tps< T > &x)
Cosecant.
Definition: TpsMath.h:159
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
Definition: TpsMath.h:76
Tps< T > sqrt(const Tps< T > &x)
Square root.
Definition: TpsMath.h:91
Domain error exception.
Definition: DomainError.h:32
Tps< T > cos(const Tps< T > &x)
Cosine.
Definition: TpsMath.h:129
Linear function in N variables of type T.
Definition: LinearFun.h:39
Tps< T > tanh(const Tps< T > &x)
Hyperbolic tangent.
Definition: TpsMath.h:240
Tps< T > sinh(const Tps< T > &x)
Hyperbolic sine.
Definition: TpsMath.h:204