50 lines
987 B
C
50 lines
987 B
C
|
|
/* Driver for routine qroot */
|
|
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
#define NRANSI
|
|
#include "nr.h"
|
|
#include "nrutil.h"
|
|
|
|
#define N 6 /* degree of polynomial */
|
|
#define EPS 1.0e-6
|
|
#define NTRY 10
|
|
#define TINY 1.0e-5
|
|
|
|
int main(void)
|
|
{
|
|
int i,j,nflag,nroot=0;
|
|
static float p[N+1]={10.0,-18.0,25.0,-24.0,16.0,-6.0,1.0};
|
|
float *b,*c;
|
|
|
|
b=vector(1,NTRY);
|
|
c=vector(1,NTRY);
|
|
printf("\nP(x)=x^6-6x^5+16x^4-24x^3+25x^2-18x+10\n");
|
|
printf("Quadratic factors x^2+bx+c\n\n");
|
|
printf("%6s %10s %12s \n\n","factor","b","c");
|
|
for (i=1;i<=NTRY;i++) {
|
|
c[i]=0.5*i;
|
|
b[i] = -0.5*i;
|
|
qroot(p,N,&b[i],&c[i],EPS);
|
|
if (nroot == 0) {
|
|
printf("%4d %15.6f %12.6f\n",nroot,b[i],c[i]);
|
|
nroot=1;
|
|
} else {
|
|
nflag=0;
|
|
for (j=1;j<=nroot;j++)
|
|
if ((fabs(b[i]-b[j]) < TINY)
|
|
&& (fabs(c[i]-c[j]) < TINY))
|
|
nflag=1;
|
|
if (nflag == 0) {
|
|
printf("%4d %15.6f %12.6f\n",nroot,b[i],c[i]);
|
|
++nroot;
|
|
}
|
|
}
|
|
}
|
|
free_vector(c,1,NTRY);
|
|
free_vector(b,1,NTRY);
|
|
return 0;
|
|
}
|
|
#undef NRANSI
|