#include <stdio.h>
#include <math.h>
#include "xfig.h"
Include dependency graph for poly.c:
Go to the source code of this file.
Defines | |
#define | QUAD(x) ((x)*(x)*(x)*(x)) |
#define | CUBE(x) ((x)*(x)*(x)) |
#define | SQ(x) ((x)*(x)) |
#define | N 10 |
#define | XMIN 0 |
#define | XMAX 3 |
#define | YMIN 0 |
#define | YMAX 3 |
#define | OK(i, j) |
#define | XFIG(x) (100*(x) + 100) |
#define | YFIG(y) (100*(y) + 100) |
Functions | |
void | ludcmp (double a[N+1][N+1], int indx[], double *d) |
void | lubksb (double a[N+1][N+1], int indx[], double b[]) |
main (int argc, char *argv[]) |
|
Definition at line 7 of file poly.c. Referenced by main(). |
|
|
|
Value: (!(i == 0 && j == 0) && !(i == 1 && j == 0) && !(i == 0 && j == 1) && \ !(i == 3 && j == 0) && !(i == 3 && j == 1) && !(i == 3 && j == 3)) Definition at line 16 of file poly.c. Referenced by main(). |
|
|
|
Definition at line 8 of file poly.c. Referenced by main(). |
|
|
|
Definition at line 12 of file poly.c. Referenced by main(). |
|
Definition at line 11 of file poly.c. Referenced by main(). |
|
|
|
Definition at line 14 of file poly.c. Referenced by main(). |
|
Definition at line 13 of file poly.c. Referenced by main(). |
|
Definition at line 73 of file poly.c. References N. Referenced by main().
00074 { 00075 int i,ii=0,ip,j; 00076 double sum; 00077 00078 for (i=1;i<=N;i++) { 00079 ip=indx[i]; 00080 sum=b[ip]; 00081 b[ip]=b[i]; 00082 if (ii) 00083 for (j=ii;j<=i-1;j++) sum -= a[i][j]*b[j]; 00084 else if (sum) ii=i; 00085 b[i]=sum; 00086 } 00087 for (i=N;i>=1;i--) { 00088 sum=b[i]; 00089 for (j=i+1;j<=N;j++) sum -= a[i][j]*b[j]; 00090 b[i]=sum/a[i][i]; 00091 } 00092 } |
|
Definition at line 20 of file poly.c. References N. Referenced by main().
00021 { 00022 int i,imax,j,k; 00023 double big,dum,sum,temp; 00024 double vv[N+1]; 00025 00026 *d=1.0; 00027 for (i=1;i<=N;i++) { 00028 big=0.0; 00029 for (j=1;j<=N;j++) 00030 if ((temp=fabs(a[i][j])) > big) big=temp; 00031 if (big == 0.0) { 00032 fprintf(stderr, "Singular matrix in routine ludcmp\n"); 00033 exit(1); 00034 } 00035 vv[i]=1.0/big; 00036 } 00037 for (j=1;j<=N;j++) { 00038 for (i=1;i<j;i++) { 00039 sum=a[i][j]; 00040 for (k=1;k<i;k++) sum -= a[i][k]*a[k][j]; 00041 a[i][j]=sum; 00042 } 00043 big=0.0; 00044 for (i=j;i<=N;i++) { 00045 sum=a[i][j]; 00046 for (k=1;k<j;k++) 00047 sum -= a[i][k]*a[k][j]; 00048 a[i][j]=sum; 00049 if ( (dum=vv[i]*fabs(sum)) >= big) { 00050 big=dum; 00051 imax=i; 00052 } 00053 } 00054 if (j != imax) { 00055 for (k=1;k<=N;k++) { 00056 dum=a[imax][k]; 00057 a[imax][k]=a[j][k]; 00058 a[j][k]=dum; 00059 } 00060 *d = -(*d); 00061 vv[imax]=vv[j]; 00062 } 00063 indx[j]=imax; 00064 if (a[j][j] == 0.0) a[j][j]=1e-30; 00065 if (j != N) { 00066 dum=1.0/(a[j][j]); 00067 for (i=j+1;i<=N;i++) a[i][j] *= dum; 00068 } 00069 } 00070 } |
|
Definition at line 95 of file poly.c. References CUBE, lubksb(), ludcmp(), N, OK, SQ, XFIG_BLACK, XFIG_CENTER, XFIG_SOLID, XFIG_TIMES_ROMAN, XfigEndCompound(), XfigLine(), XfigStartCompound(), XfigText(), XMAX, XMIN, YMAX, and YMIN.
00096 { 00097 int i, j, k = 1, l; 00098 double a[N+1][N+1], y[N+1][N+1], col[N+1], p; 00099 int indx[N+1]; 00100 FILE *fptr; 00101 char s[256]; 00102 00103 for (i = XMIN; i <= XMAX; i++) 00104 for (j = YMIN; j <= YMAX; j++) 00105 if (OK(i,j)) { 00106 l = 1; 00107 /* 00108 a[k][l++] = QUAD(i); 00109 a[k][l++] = QUAD(j); 00110 a[k][l++] = CUBE(i)*j; 00111 a[k][l++] = i*CUBE(j); 00112 a[k][l++] = SQ(i)*SQ(j); 00113 */ 00114 a[k][l++] = CUBE(i); 00115 a[k][l++] = CUBE(j); 00116 a[k][l++] = SQ(i)*j; 00117 a[k][l++] = i*SQ(j); 00118 a[k][l++] = SQ(i); 00119 a[k][l++] = SQ(j); 00120 a[k][l++] = i*j; 00121 a[k][l++] = i; 00122 a[k][l++] = j; 00123 a[k][l++] = 1.0; 00124 k++; 00125 } 00126 for (i = 1; i <= N; i++) { 00127 for (j = 1; j <= N; j++) 00128 printf("%g\t", a[i][j]); 00129 printf("\n"); 00130 } 00131 00132 ludcmp(a, indx, &p); 00133 for (j = 1; j <= N; j++) { 00134 for (i = 1; i <= N; i++) col[i] = 0.0; 00135 col[j] = 1.0; 00136 lubksb(a, indx, col); 00137 for (i = 1; i <= N; i++) y[i][j] = col[i]; 00138 } 00139 00140 printf("\n"); 00141 for (i = 1; i <= N; i++) { 00142 for (j = 1; j <= N; j++) 00143 printf("%g\t", y[i][j]); 00144 printf("\n"); 00145 } 00146 00147 printf("\nu[i][j] = "); 00148 k = 1; 00149 for (i = XMIN; i <= XMAX; i++) 00150 for (j = YMIN; j <= YMAX; j++) 00151 if (OK(i,j)) { 00152 if (fabs(y[N][k]) > 1e-10) { 00153 printf("%g*u", y[N][k]); 00154 if (i == 0) 00155 printf("[i]"); 00156 else if (i == 1) 00157 printf("[i+imin]"); 00158 else 00159 printf("[i+%d*imin]", i); 00160 00161 if (j == 0) 00162 printf("[j] "); 00163 else if (j == 1) 00164 printf("[j+jmin] "); 00165 else 00166 printf("[j+%d*jmin] ", j); 00167 } 00168 k++; 00169 } 00170 printf("\n"); 00171 00172 #define XFIG(x) (100*(x) + 100) 00173 #define YFIG(y) (100*(y) + 100) 00174 00175 fptr = fopen("poly.fig", "wt"); 00176 fprintf(fptr, "#FIG 2.1\n80 1\n"); 00177 XfigStartCompound(fptr, XFIG((double)XMIN), YFIG((double)YMIN), 00178 XFIG((double)XMAX + 1), YFIG((double)YMAX + 1)); 00179 for (i = XMIN; i <= XMAX + 1; i++) 00180 XfigLine(fptr, XFIG((double)i), YFIG((double)YMIN), 00181 XFIG((double)i), YFIG((double)YMAX + 1), 00182 XFIG_SOLID, 1, XFIG_BLACK); 00183 for (j = YMIN; j <= YMAX + 1; j++) 00184 XfigLine(fptr, XFIG((double)XMIN), YFIG((double)j), 00185 XFIG((double)XMAX + 1), YFIG((double)j), 00186 XFIG_SOLID, 1, XFIG_BLACK); 00187 00188 XfigText(fptr, XFIG((double)0.5), YFIG((double)0.6), 00189 XFIG_CENTER, XFIG_TIMES_ROMAN, 24, 00190 XFIG_BLACK, 0.0, "x"); 00191 k = 1; 00192 for (i = XMIN; i <= XMAX; i++) 00193 for (j = YMIN; j <= YMAX; j++) 00194 if (OK(i,j)) { 00195 if (fabs(y[N][k]) > 1e-10) { 00196 sprintf(s, "%g", y[N][k]); 00197 XfigText(fptr, XFIG((double)i + 0.5), YFIG((double)j + 0.6), 00198 XFIG_CENTER, XFIG_TIMES_ROMAN, 24, 00199 XFIG_BLACK, 0.0, s); 00200 } 00201 k++; 00202 } 00203 XfigEndCompound(fptr); 00204 fclose(fptr); 00205 } |