|
|
Line 2: |
Line 2: |
| | | |
| [[File:S__18382858.jpg]] | | [[File:S__18382858.jpg]] |
− |
| |
− | dikerjakan menggunakan hukum kontinuitas massa dimana masa yang masuk akan sama dengan yang dikeluarkan sehingga didapati rumus Q*''p''=Q*''p'' sehingga akan mendapatakan 4 persamaan dengan 4 variabel
| |
− |
| |
− |
| |
− | 6C1 - 4C2 = 50
| |
− |
| |
− | -2C1 - 1C3 + 4C4 = 50
| |
− |
| |
− | 7C2 - 3C3 - 4C4 = 0
| |
− |
| |
− | -4C1 + 4C3 = 0
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | 6C1 - 4C2 + 0C3 + 0C4 = 50
| |
− |
| |
− | -2C1 + 0C2 - 1C3 + 4C4 = 50
| |
− |
| |
− | 0C1 + 7C2 - 3C3 - 4C4 = 0
| |
− |
| |
− | -4C1 + 0C2 + 4C3 + 0C4 = 0
| |
− |
| |
− | yang kemudian dijadikan dalam modue python lalu didapatkan nilai C1 = 275/9 , C2 = 100/3 , C3 = 275/9, C4 = 425/12
| |
− |
| |
− |
| |
− |
| |
− | <div border-style: inset;">
| |
− | import numpy as np
| |
− | class GEPP():
| |
− | def __init__(self, A, b, doPricing=True):
| |
− | #super(GEPP, self).__init__()
| |
− | self.A = A # input: A is an n x n numpy matrix
| |
− | self.b = b # b is an n x 1 numpy array
| |
− | self.doPricing = doPricing
| |
− | self.n = None # n is the length of A
| |
− | self.x = None # x is the solution of Ax=b
| |
− | self._validate_input() # method that validates input
| |
− | self._elimination() # method that conducts elimination
| |
− | self._backsub() # method that conducts back-substitution
| |
− | def _validate_input(self):
| |
− | self.n = len(self.A)
| |
− | if self.b.size != self.n:
| |
− | raise ValueError("Invalid argument: incompatible sizes between" +
| |
− | "A & b.", self.b.size, self.n)
| |
− | def _elimination(self):
| |
− | """
| |
− | k represents the current pivot row. Since GE traverses the matrix in the
| |
− | upper right triangle, we also use k for indicating the k-th diagonal
| |
− | column index.
| |
− | :return
| |
− | """
| |
− | # Elimination
| |
− | for k in range(self.n - 1):
| |
− | if self.doPricing:
| |
− | # Pivot
| |
− | maxindex = abs(self.A[k:, k]).argmax() + k
| |
− | if self.A[maxindex, k] == 0:
| |
− | raise ValueError("Matrix is singular.")
| |
− | # Swap
| |
− | if maxindex != k:
| |
− | self.A[[k, maxindex]] = self.A[[maxindex, k]]
| |
− | self.b[[k, maxindex]] = self.b[[maxindex, k]]
| |
− | else:
| |
− | if self.A[k, k] == 0:
| |
− | raise ValueError("Pivot element is zero. Try setting doPricing to True.")
| |
− | # Eliminate
| |
− | for row in range(k + 1, self.n):
| |
− | multiplier = self.A[row, k] / self.A[k, k]
| |
− | self.A[row, k:] = self.A[row, k:] - multiplier * self.A[k, k:]
| |
− | self.b[row] = self.b[row] - multiplier * self.b[k]
| |
− | def _backsub(self):
| |
− | # Back Substitution
| |
− | self.x = np.zeros(self.n)
| |
− | for k in range(self.n - 1, -1, -1):
| |
− | self.x[k] = (self.b[k] - np.dot(self.A[k, k + 1:], self.x[k + 1:])) / self.A[k, k]
| |
− | def main():
| |
− | A = np.array([[6., -4., 0., 0.],
| |
− | [-4., 0., 4., 0.],
| |
− | [-2., 0., -1., 4.],
| |
− | [0., 7., -3., -4.]])
| |
− | b = np.array([[50.],
| |
− | [0.],
| |
− | [50.],
| |
− | [0.]])
| |
− | print("ini matriks awal nya")
| |
− | print(A)
| |
− | print("ini hasil yang awal")
| |
− | print(b)
| |
− | GaussElimPiv = GEPP(np.copy(A), np.copy(b), doPricing=False)
| |
− | print("ini hasil akhirnya")
| |
− | print(GaussElimPiv.x)
| |
− | print(GaussElimPiv.A)
| |
− | print(GaussElimPiv.b)
| |
− | GaussElimPiv = GEPP(A, b)
| |
− | print(GaussElimPiv.x)
| |
− | if __name__ == "__main__":
| |
− | main()
| |
− |
| |
− | </div>
| |
| | | |
| <comments voting="Plus" /> | | <comments voting="Plus" /> |
Enable comment auto-refresher
Edosyafei
Permalink |
IlliyyinLafi
Permalink |
Bagus fadhlurrohman
Permalink |
IlliyyinLafi
Permalink |
Anggitoz
Permalink |
Renoandib
Permalink |
Renoandib