Difference between revisions of "Metode Numerik soal 21 - Jaringan pipa"
IlliyyinLafi (talk | contribs) |
IlliyyinLafi (talk | contribs) |
||
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" /> |
Revision as of 14:14, 30 September 2019
Pada tugas hiburan ini
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
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.Ak, maxindex = self.Amaxindex, k self.bk, maxindex = self.bmaxindex, 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()
Enable comment auto-refresher
Edosyafei
Permalink |
IlliyyinLafi
Permalink |
Bagus fadhlurrohman
Permalink |
IlliyyinLafi
Permalink |
Anggitoz
Permalink |
Renoandib
Permalink |
Renoandib