[ create a new paste ] login | about

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

C, pasted on Dec 24:
#include <stdio.h>
#include <stdlib.h>

#define N 2
#define COL 128

int main(void)
{
  int i, j, k;
  double x[N][N], inv[N][N], res[N][N], s, d; // Cはfortranとは行と列が逆になる
  char buf[COL];

  /* x[][]の入力 */
  printf("X = \n");
  for (i = 0; i < N; i++) {
    fgets(buf, COL, stdin);
    sscanf(buf, "%lf %lf", &x[i][0], &x[i][1]);
  }
  
  /* 行列式の計算 */
  d = x[0][0] * x[1][1] - x[0][1] * x[1][0];
  
  /* 逆行列が定義出来るかどうか判定 */
  if (d == 0.0) {
    fprintf(stderr, "逆行列が定義出来ません(Xが正則行列ではありません)。\n");
    exit(1);
  }
  
  printf("%f\n", d);
  
  /* 逆行列の計算 */
  inv[0][0] =  x[1][1] / d;
  inv[0][1] = -x[0][1] / d;
  inv[1][0] = -x[1][0] / d;
  inv[1][1] =  x[0][0] / d;

  /* inv[][]の出力 */
  printf("X^(-1) = \n");
  for (i = 0; i < N; i++) {
    for (j = 0; j < N; j++)
      printf("%f ", inv[i][j]);
    printf("\n");
  }
  
  /* x×invが単位行列になる事を確かめる */
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++) {
      s = 0;
      for (k = 0; k < N; k++)
        s += x[i][k] * inv[k][j];
      res[i][j] = s;
    }

  /* res[][]の出力 */
  printf("X・X^(-1) = \n");
  for (i = 0; i < N; i++) {
    for (j = 0; j < N; j++)
      printf("%f ", res[i][j]);
    printf("\n");
  }
  
  return 0;
}


Create a new paste based on this one


Comments: