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]);
176 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
181 double res=(v[0]+v[n-1])/2.0;
182 for(
size_t i=1;i<n-1;i++) res+=v[i];
193 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
198 return (v[0]+v[1])/2.0;
200 double res=v[0]+v[n-1];
204 for(
size_t i=1;i<n/2;i++) {
207 if (four) res+=(v[i]+v[n-i-1])*3.5;
208 else res+=(v[i]+v[n-i-1])*2.5;
210 if (four) res+=(v[i]+v[n-i-1])*4.0;
211 else res+=(v[i]+v[n-i-1])*2.0;
225 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
230 return (v[0]+v[1])/2.0;
232 return (v[0]+4.0*v[1]+v[2])/3.0;
234 double res=(v[0]*5.0+v[1]*13.0+v[n-1]*5.0+v[n-2]*13.0)/12.0;
235 for(
size_t i=2;i<n-2;i++) {
248 O2SCL_ERR2(
"Tried to integrate zero-length vector in ",
253 return (v[0]+v[1])/2.0;
255 return (v[0]+4.0*v[1]+v[2])/3.0;
257 double res=(v[0]*4.0+v[1]*11.0+v[n-1]*4.0+v[n-2]*11.0)/10.0;
258 for(
size_t i=2;i<n-2;i++) {
271 double res=((v[0]+v[n-1])*17.0+(v[1]+v[n-2])*59.0+(v[2]+v[n-3])*43.0+
272 (v[3]+v[n-4])*49.0)/48.0;
273 for(
size_t i=4;i<n-4;i++) {
280 #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.
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_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
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...
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.
void vector_deriv_threept(size_t n, vec_t &v, vec2_t &dv)
Derivative of a vector with a three-point formula.