fork download
  1. import sys
  2. import numpy as np
  3.  
  4. def main():
  5. # 標準入力からデータをすべて読み込む
  6. input_data = sys.stdin.read().split()
  7.  
  8. if not input_data:
  9. return
  10.  
  11. iterator = iter(input_data)
  12.  
  13. try:
  14. # 1行目: n (次元数)
  15. n = int(next(iterator))
  16.  
  17. # 2行目以降: 行列 A の要素
  18. # n * n 個の要素を読み込んで行列に変換
  19. a_elements = []
  20. for _ in range(n * n):
  21. a_elements.append(int(next(iterator)))
  22.  
  23. A = np.array(a_elements, dtype=float).reshape(n, n)
  24.  
  25. except StopIteration:
  26. return
  27.  
  28. # ベクトル b を作成(要素がすべて 1 の n 次元ベクトル)
  29. b = np.ones(n)
  30.  
  31. # 行列 A の行列式 |A| を計算
  32. det_A = np.linalg.det(A)
  33.  
  34. # 解のベクトル x を格納するリスト
  35. x = []
  36.  
  37. # クラメルの公式による計算
  38. # x_i = |A_i| / |A|
  39. for i in range(n):
  40. # A をコピーして A_i を作成
  41. A_i = A.copy()
  42.  
  43. # A_i の i 列目をベクトル b で置き換え
  44. # numpyのスライス機能 A[:, i] で i列目を指定
  45. A_i[:, i] = b
  46.  
  47. # |A_i| を計算
  48. det_A_i = np.linalg.det(A_i)
  49.  
  50. # 解の要素を計算してリストに追加
  51. x_i = det_A_i / det_A
  52. x.append(x_i)
  53.  
  54. # 結果を出力 (スペース区切りで1行に表示)
  55. print(*(x))
  56.  
  57. if __name__ == '__main__':
  58. main()
Success #stdin #stdout 1.06s 41316KB
stdin
4
1 3 -5 2
5 2 6 1
3 0 -2 4
0 9 3 -5
stdout
-0.18181818181818216 0.31818181818181884 0.13636363636363638 0.45454545454545553