#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 }
|
1.2.18