#include #include /*Solves Least Squares based on CLR, p. 771*/ #define MAX_SLOTS 10 typedef char boolean; short num_slots,i,j,num_points,num_functions; float basisFunc[MAX_SLOTS+1][MAX_SLOTS+1]; float slot[MAX_SLOTS+1]; typedef float row[MAX_SLOTS+2]; row ab[MAX_SLOTS+2]; void LU() /*SOLVES SYSTEM OF LINEAR EQUATIONS.*/ /*TAKEN FROM Quinn,P. 147*/ /*CODE HAS BEEN MODIFIED TO PRELOAD AB TO */ /*SAVE SPACE BY NOT STORING A AND B */ /*SOLUTION IS PLACED IN SLOT[*] */ { float amax,temp,c,sum; short n,i,j,k,k1,l,l1,itemp; row y; short piv[MAX_SLOTS+1]; n=num_slots; for (i=1;i<=n;i++) piv[i]=i; for (k=1;k<=n-1;k++) { printf("iteration %hd\n",k); amax=0.0; for (l1=k;l1<=n;l1++) if (amax=1;i--) { sum=0.0; for (j=i+1;j<=n;j++) sum+=ab[i][j]*slot[j]; slot[i]=(y[i]-sum)/ab[i][i]; } } main() { short i,j,k; float y[MAX_SLOTS+1]; printf("enter n (number of points): "); scanf("%hd",&num_points); printf("enter m (number of functions): "); scanf("%hd",&num_functions); printf("enter %hd x %hd basis-function matrix\n",num_points, num_functions); for (i=1;i<=num_points;i++) for (j=1;j<=num_functions;j++) scanf("%f",&basisFunc[i][j]); printf("enter %hd y values\n",num_points); for (i=1;i<=num_points;i++) scanf("%f",&y[i]); num_slots=num_functions; /*Load system to be solved*/ /*a is loaded with the product of basisFunc transposed and basicFunc */ for (i=1;i<=num_functions;i++) for (j=1;j<=num_functions;j++) { ab[i][j]=0.0; for (k=1;k<=num_points;k++) ab[i][j]+=basisFunc[k][i]*basisFunc[k][j]; } /*b is loaded with the product of basisFunc transposed and y*/ for (i=1;i<=num_functions;i++) { ab[i][num_functions+1]=0.0; for (j=1;j<=num_points;j++) ab[i][num_functions+1]+=basisFunc[j][i]*y[j]; } printf("input:\n"); for (i=1;i<=num_slots;i++) { for (j=1;j<=num_slots+1;j++) printf("%f ",ab[i][j]); printf("\n"); } LU(); printf("coefficients\n"); for (i=1;i<=num_slots;i++) printf("%f\n",slot[i]); }