📄 qroot.c
字号:
#include <math.h>
#define ITMAX 20
#define TINY 1.0e-6
void qroot(p,n,b,c,eps)
float p[],*b,*c,eps;
int n;
{
int iter,i;
float sc,sb,s,rc,rb,r,dv,delc,delb;
float *q,*qq,*rem,*vector();
float d[3];
void poldiv(),nrerror(),free_vector();
q=vector(0,n);
qq=vector(0,n);
rem=vector(0,n);
d[2]=1.0;
for (iter=1;iter<=ITMAX;iter++) {
d[1]=(*b);
d[0]=(*c);
poldiv(p,n,d,2,q,rem);
s=rem[0];
r=rem[1];
poldiv(q,(n-1),d,2,qq,rem);
sc = -rem[0];
rc = -rem[1];
for (i=n-1;i>=0;i--) q[i+1]=q[i];
q[0]=0.0;
poldiv(q,n,d,2,qq,rem);
sb = -rem[0];
rb = -rem[1];
dv=1.0/(sb*rc-sc*rb);
*b += (delb=(r*sc-s*rc)*dv);
*c += (delc=(-r*sb+s*rb)*dv);
if ((fabs(delb) <= eps*fabs(*b) || fabs(*b) < TINY)
&& (fabs(delc) <= eps*fabs(*c) || fabs(*c) < TINY)) {
free_vector(rem,0,n);
free_vector(qq,0,n);
free_vector(q,0,n);
return;
}
}
nrerror("Too many iterations in routine QROOT");
}
#undef ITMAX
#undef TINY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -