Eliminasi Gauss-Jordan dengan Python

Eliminasi Gauss-Jordan dengan Python


Algoritma
Masukkan matrik A, dan vektor B beserta ukurannya n
Buat augmented matrik [A|B] namakan dengan A
Untuk baris ke i dimana i=1 s/d n, perhatikan apakah nilai ai,i =0 : Bila iya, maka tukarkan baris ke i dan baris ke i+k≤n, dimana ai+k ,i ≠0,
bila tidak ada berarti perhitungan tidak bisa dilanjutkan dan proses dihentikan dengan tanpa penyelesaian. Bila tidak, maka lanjutkan
Untuk baris ke j, dimana j = i+1 s/d n

Coding Python
#python 2.7.15
#Nama = Muhammad Ikhwan Fathulloh
#Kelas = TIF RP19C
#NPM = 19552011024
#Mata Kuliah = Metode Numerik
#Eliminasi Gauss Jordan
def idMatx(size):
  id = []
  for i in range(size):
    id.append([0]*size)
  for i in range(size):
    id[i][i] = 1
  return(id)
def tranMtx(inMtx):
  tMtx = []
  for row in range(0, len(inMtx[0])):
    tRow = []
    for col in range(0, len(inMtx)):
      ele = inMtx[col][row]
      tRow.append(ele)
    tMtx.append(tRow)
  return(tMtx)
def matxRound(matx, decPts=4):
  for col in range(len(matx)):
    for row in range(len(matx[0])):
      matx[col][row] = round(matx[col][row], decPts)
#Pemecahan (Solver)
def gj_Solve(A, b=False, decPts=4):
  """ A gauss-jordan method to solve an augmented matrix for
      the unknown variables, x, in Ax = b.
      The degree of rounding is 'tuned' by altering decPts = 4.
      In the case where b is not supplied, b = ID matrix, and therefore
      the output is the inverse of the A matrix.
  """
  if not b == False:
    #pertama, tes untuk memastikan bahwa A dan b sudah sesuai
    if (len(A) != len(b)):
      print 'A dan b asinkron'
      return
    Ab = A[:]
    Ab.append(b)
    m = tranMtx(Ab)
  else:
    ii = idMatx(len(A))
    Aa = A[:]
    for col in range(len(ii)):
      Aa.append(ii[col])
    tAa = tranMtx(Aa)
    m = tAa[:]
  (eqns, colrange, augCol) = (len(A), len(A), len(m[0]))
  # Permutasi Matrix - bawa angka terbesar ke diagonal
  # Ambil baris pertama, asumsikan x [1,1] adalah yang terbesar, dan tukar jika itu tidak benar
  for col in range(0, colrange):
    bigrow = col
    for row in range(col+1, colrange):
      if abs(m[row][col]) > abs(m[bigrow][col]):
        bigrow = row
        (m[col], m[bigrow]) = (m[bigrow], m[col])
  print 'Soal SPL = ', m
  # Kurangi, sehingga baris terakhir paling banyak tidak diketahui 
  for rrcol in range(0, colrange):
    for rr in range(rrcol+1, eqns):
      cc = -(float(m[rr][rrcol])/float(m[rrcol][rrcol]))
      for j in range(augCol):
        m[rr][j] = m[rr][j] + cc*m[rrcol][j]
  # Reduksi final - tes pertama menangkap sistem yang tidak ditentukan
  # Ini dicirikan oleh beberapa persamaan yang semuanya nol
  for rb in reversed(range(eqns)):
    if ( m[rb][rb] == 0):
      if m[rb][augCol-1] == 0:
        continue
      else:
        print 'Sistem tidak bisa diselesaikan'
        return
    else:
      # Mengulang kembali untuk menangkap sistem yang tidak ditentukan
      for backCol in reversed(range(rb, augCol)):
        m[rb][backCol] = float(m[rb][backCol]) / float(m[rb][rb])
      # Knock-up (batalkan yang di atas untuk menghilangkan yang diketahui)
      # Lagi, kita harus mengulang untuk menangkap sistem yang tidak ditentukan           
    if not (rb == 0):
        for kup in reversed(range(rb)):
          for kleft in reversed(range(rb, augCol)):
            kk = -float(m[kup][rb]) / float(m[rb][rb])
            m[kup][kleft] += kk*float(m[rb][kleft])
  matxRound(m, decPts)
  if not b == False:
    return m
  else:
    mOut = []
    for row in range(len(m)):
      rOut = []
      for col in range(augCol/2, augCol):
        rOut.append(m[row][col])
      mOut.append(rOut)
    return mOut
   
# Uji Soal SPL ini
A = [[-1,2,1],
     [1,2,1],
     [2,1,-1]]
b = [5,5,1]
#Solusi
sol = gj_Solve(A, b)
print 'Solusi Gauss Jordan = ', sol

Soal SPL
 1   1   -1   1
 2   2    1   5
-1   1    2   5

Output SPL Gauss Jordan
Soal SPL =  [[2, 2, 1, 5], [-1, 1, 2, 5], [1, 1, -1, 1]]
Solusi Gauss Jordan =  [[1.0, 0.0, 0.0, -0.5], [0.0, 1.0, 0.0, 2.5], [0.0, 0.0, 1.0, 1.0]]


Komentar

Trendingkanlah

"Aplikasi data anggota perpustakaan serta transaksi peminjaman dengan RFID dan Wemos ESP8266 berbasis Internet of Things."

Menjadi Agen Pembangunan dengan pendekatan Rumus Fisika Energi Mekanik

Kebenaran yang bersifat Aksioma

Sejarah Ibnu Sina Karya dan Kebesarannya

Hakikat Masa Depan

Hakikat Sarjana, dari Resensi Buku Bukan Sarjana Muda