[ create a new paste ] login | about

Link: http://codepad.org/V188RLwa    [ raw code | output | fork ]

C, pasted on Nov 26:
#include <stdio.h>
#include <math.h>

#define N 33
#define EPSILON 1.0e-16
/* net-descripting */
struct table {
  double imm;
  int net[4];
} table[N] = {
  { 0,   { -1, -1,  1,  7 }}, /* 0 */
  { 0,   {  0, -1,  2,  8 }}, /* 1 */
  { 0,   {  1, -1,  3,  9 }}, /* 2 */
  { 0,   {  2, -1,  4, 10 }}, /* 3 */
  { 0,   {  3, -1,  5, 11 }}, /* 4 */
  { 0,   {  4, -1,  6, 12 }}, /* 5 */
  { 0,   {  5, -1, 13, -1 }}, /* 6 */
  { 0,   {  0, -1,  8, 14 }}, /* 7 */
  { 0,   {  1,  7,  9, 15 }}, /* 8 */
  { 0,   {  2,  8, 10, 16 }}, /* 9 */
  { 0,   {  3,  9, 11, 17 }}, /* 10 */
  { 0,   {  4, 10, 12, 18 }}, /* 11 */
  { 0,   {  5, 11, 13, 19 }}, /* 12 */
  { 0,   {  6, 12, 20, -1 }}, /* 13 */
  { 0,   {  7, -1, 15, 21 }}, /* 14 */
  { 0,   {  8, 14, 16, 22 }}, /* 15 */
  { 0,   {  9, 15, 17, 23 }}, /* 16 */
  { 0,   {  10,16, 18, -1 }}, /* 17 */
  { 0,   {  11,17, 19, 24 }}, /* 18 */
  { 0,   {  12,18, 20, 25 }}, /* 19 */
  { 0,   {  13,19, 26, -1 }}, /* 20 */
  { 0,   {  14,-1, 22, 31 }}, /* 21 */
  { 0,   {  15,21, 23, 27 }}, /* 22 */
  { 0,   {  16,22, 28, -1 }}, /* 23 */
  { 0,   {  18,-1, 25, 29 }}, /* 24 */
  { 0,   {  19,24, 26, 30 }}, /* 25 */
  { 0,   {  20,25, 32, -1 }}, /* 26 */
  { 0,   {  31,22, 28, -1 }}, /* 27 */
  { 0,   {  23,27, -1, -1 }}, /* 28 */
  { 0,   {  24,-1, 30, -1 }}, /* 29 */
  { 0,   {  25,29, 32, -1 }}, /* 30 */
  { 5.0, { -1, -1, -1, -1 }}, /* 31 */ /* = 5.0V */
  { 0.0, { -1, -1, -1, -1 }}  /* 32 */ /* = 0.0V */
};

/* Guss-Jordan */
int main() {
  int i, j, k, x, y;
  double r, max;
  double a[N][N + 1];

  /* net-equation constucting */
  for (i = 0; i < N; i++) {
    for (j = 0; j < N + 1; j++)
      a[i][j] = 0.0;
    if (table[i].net[0] == -1 && table[i].net[1] == -1 && table[i].net[2] == -1 && table[i].net[3] == -1) {
      a[i][i] = 1.0;
      a[i][N] = table[i].imm;
    } else {
      k = 0;
      for (j = 0; j < 4; j++)
        if (!(table[i].net[j] < 0))
          k++;
      a[i][i] = (double)(-k);
      for (j = 0; j < 4; j++)
        if (!(table[i].net[j] < 0))
          a[i][table[i].net[j]] = (double)1.0;
    }
  }    

  printf("net-equation constructed\n");
  for (y = 0; y < N; y++) {
    for (x = 0; x <= N; x++)
      printf("%+.2f ", a[y][x]);
    putchar('\n');
  }
  putchar('\n');

  /* forward */
  for (i = 0; i < N; i++) {
    /* pivotting */
    max = fabs(a[i][i]);
    k = i;
    for (j = i + 1; j < N; j++)
      if (max < fabs(a[j][i])) {
        max = fabs(a[j][i]);
        k = j;
      }
    if (k != i)
      for (j = 0; j <= N; j++) {
        r = a[k][j];
        a[k][j] = a[i][j];
        a[i][j] = r;
      }
    /* pivotting finished */

    r = a[i][i];
    for (j = i ; j <= N; j++)
      a[i][j] /= r;

    for (j = i + 1; j < N; j++) {
      r = a[j][i];
      if (fabs(r) > EPSILON) {
        for (k = 0; k <= N; k++) {
          a[j][k] /= r;
          a[j][k] -= a[i][k];
        }
      }
    }
#if 0
    printf("1step forward\n");
    for (y = 0; y < N; y++) {
      for (x = 0; x <= N; x++)
        printf("%+.2f ", a[y][x]);
      putchar('\n');
    }
    putchar('\n');
#endif
  }

  /* backward */
  for (i = N - 1; i >= 0; i--) {
    for (j = i - 1; j >= 0; j--) {
      a[j][N] -= a[i][N] * a[j][i];
      a[j][i] = 0.0;
    }
  }
  for (y = 0; y < N; y++)
    printf("%d: %.6f\n", y, a[y][N]);
  putchar('\n');
  return 0;
}
/* end */


Output:
net-equation constructed
-2.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+1.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +1.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +1.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +1.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +1.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -2.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -3.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -3.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 -3.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 -3.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +0.00 -3.00 +1.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +1.00 -4.00 +1.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 +1.00 -3.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 -3.00 +1.00 +0.00 +0.00 +1.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +1.00 -2.00 +0.00 +0.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +0.00 -2.00 +1.00 +0.00 +0.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +0.00 +0.00 +1.00 -3.00 +0.00 +1.00 +0.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 +5.00 
+0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +1.00 +0.00 

0: 3.266968
1: 3.123636
2: 2.855417
3: 2.500000
4: 2.144583
5: 1.876364
6: 1.733032
7: 3.410299
8: 3.248523
9: 2.942614
10: 2.500000
11: 2.057386
12: 1.751477
13: 1.589701
14: 3.715407
15: 3.517544
16: 3.166518
17: 2.500000
18: 1.833482
19: 1.482456
20: 1.284593
21: 4.218378
22: 3.939727
23: 3.705912
24: 1.294088
25: 1.060273
26: 0.781622
27: 4.317073
28: 4.011493
29: 0.988507
30: 0.682927
31: 5.000000
32: 0.000000



Create a new paste based on this one


Comments: