23 #ifndef O2SCL_VECTOR_DERINT_H 24 #define O2SCL_VECTOR_DERINT_H 48 #include <o2scl/interp.h> 50 #ifndef DOXYGEN_NO_O2NS 62 template<
class vec_t,
class vec2_t>
65 O2SCL_ERR2(
"Requested derivative of zero or one-element vector ",
74 dv[0]=-1.5*v[0]+2.0*v[1]-0.5*v[2];
75 dv[n-1]=1.5*v[n-1]-2.0*v[n-2]+0.5*v[n-3];
76 for(
size_t i=1;i<n-1;i++) {
77 dv[i]=(v[i+1]-v[i-1])/2.0;
85 template<
class vec_t,
class vec2_t>
88 O2SCL_ERR2(
"Requested derivative of zero or one-element vector ",
99 dv[n-1]=v[n-1]-v[n-2];
101 for(
size_t i=1;i<n-1;i++) {
102 dv[i]=(v[i+1]-v[i-1])/2.0;
109 template<
class vec_t,
class vec2_t>
112 O2SCL_ERR2(
"Requested derivative of zero or one-element vector ",
121 dv[0]=-25.0/12.0*v[0]+4.0*v[1]-3.0*v[2]+4.0/3.0*v[3]-0.25*v[4];
122 dv[1]=-0.25*v[0]-5.0/6.0*v[1]+1.5*v[2]-0.5*v[3]+v[4]/12.0;
123 dv[n-2]=-v[n-5]/12.0+0.5*v[n-4]-1.5*v[n-3]+5.0/6.0*v[n-2]+0.25*v[n-1];
124 dv[n-1]=0.25*v[n-5]-4.0*v[n-4]/3.0+3.0*v[n-3]-4.0*v[n-2]+25.0*v[n-1]/12.0;
125 for(
size_t i=2;i<n-2;i++) {
126 dv[i]=1.0/12.0*(v[i-2]-v[i+2])+2.0/3.0*(v[i+1]-v[i-1]);
134 template<
class vec_t,
class vec2_t>
137 O2SCL_ERR2(
"Requested derivative of zero or one-element vector ",
147 dv[0]=-1.5*v[0]+2.0*v[1]-0.5*v[2];
148 dv[n-1]=1.5*v[n-1]-2.0*v[n-2]+0.5*v[n-3];
150 dv[1]=-v[0]/3.0-v[1]/2.0+v[2]-v[3]/6.0;
151 dv[n-2]=v[n-4]/6.0-v[n-3]+v[n-2]/2.0+v[n-1]/3.0;
153 for(
size_t i=2;i<n-2;i++) {
154 dv[i]=1.0/12.0*(v[i-2]-v[i+2])+2.0/3.0*(v[i+1]-v[i-1]);
161 template<
class ovec_t,
class vec2_t>
165 for(
size_t i=0;i<n;i++) grid[i]=((
double)i);
167 for(
size_t i=0;i<n;i++) dv[i]=oi.
deriv(((
double)i));
173 template<
class vec_t,
class vec2_t,
class vec3_t>
177 for(
size_t i=0;i<n;i++) dv[i]=oi.
deriv(vx[i]);
198 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
203 double res=(v[0]+v[n-1])/2.0;
204 for(
size_t i=1;i<n-1;i++) res+=v[i];
215 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
220 return (v[0]+v[1])/2.0;
222 double res=v[0]+v[n-1];
226 for(
size_t i=1;i<n/2;i++) {
229 if (four) res+=(v[i]+v[n-i-1])*3.5;
230 else res+=(v[i]+v[n-i-1])*2.5;
232 if (four) res+=(v[i]+v[n-i-1])*4.0;
233 else res+=(v[i]+v[n-i-1])*2.0;
247 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
252 return (v[0]+v[1])/2.0;
254 return (v[0]+4.0*v[1]+v[2])/3.0;
256 double res=(v[0]*5.0+v[1]*13.0+v[n-1]*5.0+v[n-2]*13.0)/12.0;
257 for(
size_t i=2;i<n-2;i++) {
270 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
275 return (v[0]+v[1])/2.0;
277 return (v[0]+4.0*v[1]+v[2])/3.0;
279 double res=(v[0]*4.0+v[1]*11.0+v[n-1]*4.0+v[n-2]*11.0)/10.0;
280 for(
size_t i=2;i<n-2;i++) {
293 double res=((v[0]+v[n-1])*17.0+(v[1]+v[n-2])*59.0+(v[2]+v[n-3])*43.0+
294 (v[3]+v[n-4])*49.0)/48.0;
295 for(
size_t i=4;i<n-4;i++) {
303 template<
class ovec_t>
306 for(
size_t i=0;i<n;i++) grid[i]=((
double)i);
308 return oi.
integ(0.0,((
double)(n-1)));
312 #ifndef DOXYGEN_NO_O2NS void vector_deriv_fivept(size_t n, vec_t &v, vec2_t &dv)
Derivative of a vector with a five-point formula.
Interpolation class for pre-specified vector.
The main O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl names...
double vector_integ_durand(size_t n, vec_t &v)
Integrate with Durand's rule for 4 or more points.
double vector_integ_extended8(size_t n, vec_t &v)
Integrate with an extended rule for 8 or more points.
void vector_deriv_interp(size_t n, ovec_t &v, vec2_t &dv, size_t interp_type=itp_cspline)
Derivative from interpolation object.
void vector_deriv_threept_tap(size_t n, vec_t &v, vec2_t &dv)
Derivative of a vector with a three-point formula using two-point at the edges.
invalid argument supplied by user
virtual double deriv(const double x0) const
Give the value of the derivative .
double vector_integ_trap(size_t n, vec_t &v)
Integrate with an extended trapezoidal rule.
double vector_integ_threept(size_t n, vec_t &v)
Integrate with an extended 3-point rule (extended Simpson's rule)
void vector_deriv_fivept_tap(size_t n, vec_t &v, vec2_t &dv)
Derivative of a vector with a five-point formula with four- and three-point formulas used at the edge...
Cubic spline for natural boundary conditions.
double vector_integ_interp(size_t n, ovec_t &v, size_t interp_type)
Integral from interpolation object.
double vector_integ_extended4(size_t n, vec_t &v)
Integrate with an extended rule for 4 or more points.
#define O2SCL_ERR2(d, d2, n)
Set an error, two-string version.
virtual double integ(const double x1, const double x2) const
Give the value of the integral .
void vector_deriv_threept(size_t n, vec_t &v, vec2_t &dv)
Derivative of a vector with a three-point formula.