Jacobi

คำอธิบายเรื่อง Jacobi และโค้ด Ruby อยู่ที่ https://wannik.wordpress.com/2013/09/28/jacobi/

อันนี้เป็นโค้ด Python 3 ไฟล์ matrix.py ผมเขียนขึ้นเอง ตอนนี้ใช้แค่ตรวจสอบขนาดของ matrix และดึงคอลัมน์ที่กำหนด

# Worasait Suwannik

from matrix import height
from matrix import column

def jacobi(m, x0 = None, e = 1e-5, round = 100):
  n  = height(m)
  b  = column(m, n)
  x0 = [0] * n if x0 == None else x0
  x1 = [None] * n
 
  for r in range(round):
    for i in range(n):
      s = sum(-m[i][j] * x0[j] for j in range(n) if i != j)
      x1[i] = (s + b[i]) / m[i][i]
    if all(abs(x1[i]-x0[i]) / x1[i] < e for i in range(n)):
      return x1 
    x0, x1 = x1, x0
   
  raise ValueError('Solution does not converge')
 
if __name__ == '__main__':
  m = [[5,3,41],[2,7,57]]
  print(jacobi(m))

ทดลองรันได้ที่ https://trinket.io/python/5c952ce22f

สอนเขียน Python

Numerical Method using Python

หากจะนำข้อความไปใช้ ต้องแสดงที่มา และห้ามใช้ในเชิงพาณิชย์

One thought on “Jacobi

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s