fork download
  1. import numpy as np
  2.  
  3. # 入力
  4. n = int(input())
  5. s = int(input())
  6.  
  7. # 1. 乱数の種
  8. np.random.seed(s)
  9.  
  10. # 2. n 次正方行列 A の生成(対角優位に修正)
  11. A = np.random.randint(0, 2, (n, n)).astype(float)
  12. for i in range(n):
  13. A[i, i] += np.sum(A[i])
  14.  
  15. # 3. n 次元ベクトル b の生成
  16. b = np.random.randint(0, 2, n).astype(float)
  17.  
  18. # 4. Jacobi 法
  19. x = np.zeros(n)
  20. for _ in range(100):
  21. x_new = np.zeros(n)
  22. for i in range(n):
  23. s = b[i] - np.dot(A[i, :], x) + A[i, i] * x[i]
  24. x_new[i] = s / A[i, i]
  25.  
  26. # 収束判定
  27. if np.linalg.norm(np.dot(A, x_new) - b) < 1e-6:
  28. x = x_new
  29. break
  30. x = x_new
  31.  
  32. # 結果をスペース区切りで出力
  33. print(*x)
  34.  
Success #stdin #stdout 1.11s 41312KB
stdin
4
2
stdout
0.3750000879213385 0.37500003351468497 -0.12499992305232045 -0.12499993683942345