Files
2025-02-Numerical/lib/nr/k_and_r/recipes/kermom.c
2025-09-12 18:55:25 +09:00

32 lines
596 B
C

#include <math.h>
extern double x;
void kermom(w,y,m)
double w[],y;
int m;
{
double d,df,clog,x2,x3,x4,y2;
if (y >= x) {
d=y-x;
df=2.0*sqrt(d)*d;
w[1]=df/3.0;
w[2]=df*(x/3.0+d/5.0);
w[3]=df*((x/3.0 + 0.4*d)*x + d*d/7.0);
w[4]=df*(((x/3.0 + 0.6*d)*x + 3.0*d*d/7.0)*x+d*d*d/9.0);
} else {
x3=(x2=x*x)*x;
x4=x2*x2;
y2=y*y;
d=x-y;
w[1]=d*((clog=log(d))-1.0);
w[2] = -0.25*(3.0*x+y-2.0*clog*(x+y))*d;
w[3]=(-11.0*x3+y*(6.0*x2+y*(3.0*x+2.0*y))
+6.0*clog*(x3-y*y2))/18.0;
w[4]=(-25.0*x4+y*(12.0*x3+y*(6.0*x2+y*
(4.0*x+3.0*y)))+12.0*clog*(x4-(y2*y2)))/48.0;
}
}