Difference between revisions of "Yarynara Sebrio. S"
(→tugas 1) |
(→Tugas Metode Numerik) |
||
Line 18: | Line 18: | ||
== '''Tugas Metode Numerik''' == | == '''Tugas Metode Numerik''' == | ||
+ | |||
+ | == Quiz == | ||
+ | |||
+ | Quiz 1. | ||
+ | |||
+ | 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): | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | # 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([[1., 2., 0., -2., 0.], | ||
+ | |||
+ | [0., 1., 0., 2., -1.], | ||
+ | |||
+ | [0., 0., 2., 1., 2.], | ||
+ | |||
+ | [0., 0., 0., -1., 1.], | ||
+ | |||
+ | [0., 1., -1., 1., -1.]]) | ||
+ | |||
+ | b = np.array([[-4.], | ||
+ | |||
+ | [1.], | ||
+ | |||
+ | [1.], | ||
+ | |||
+ | [-2.], | ||
+ | |||
+ | [-1.]]) | ||
+ | |||
+ | GaussElimPiv = GEPP(np.copy(A), np.copy(b), doPricing=False) | ||
+ | |||
+ | print(GaussElimPiv.x) | ||
+ | |||
+ | print(GaussElimPiv.A) | ||
+ | |||
+ | print(GaussElimPiv.b) | ||
+ | |||
+ | GaussElimPiv = GEPP(A, b) | ||
+ | |||
+ | print(GaussElimPiv.x) | ||
+ | |||
+ | |||
+ | |||
+ | if __name__ == "__main__": | ||
+ | |||
+ | main() | ||
+ | |||
==Tugas 1== | ==Tugas 1== | ||
Revision as of 14:46, 14 October 2019
Biografi
Nama : Yarynara Sebrio Suharyadi
TTL : Jakarta,23 September 1999
NPM : 1706070816
Jurusan : Teknik Mesin Paralel Universitas Indonesia
Hobi : Bermain Tenis lapangan
Di bagian pemograman python ini saya mempelajari cara mengerjakan operasi matematika yang sering digunakan untuk membuat simulasi di berbagai sistem seperti fisika,kimia,biologi , cara menyelesaikan matematika tersebut cukup sulit diperoleh karena persamaan disamping yang tidak efisien
Tugas Metode Numerik
Quiz
Quiz 1.
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):
# 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([[1., 2., 0., -2., 0.],
[0., 1., 0., 2., -1.],
[0., 0., 2., 1., 2.],
[0., 0., 0., -1., 1.],
[0., 1., -1., 1., -1.]])
b = np.array([[-4.],
[1.],
[1.],
[-2.],
[-1.]])
GaussElimPiv = GEPP(np.copy(A), np.copy(b), doPricing=False)
print(GaussElimPiv.x)
print(GaussElimPiv.A)
print(GaussElimPiv.b)
GaussElimPiv = GEPP(A, b)
print(GaussElimPiv.x)
if __name__ == "__main__":
main()
Tugas 1
x1 = 0
dx1 = ('0.1')
dx = float (dx1)
x2 = x1+dx
Fx_1 = ((x2**2)-1) / (x1-1)
n = 1 error = 0
print ("n x F(x) error")
print (n," ",x1," ",Fx_1," ",error)
while x2<1 :
Fx_2 = ((x2**2)-1) / (x2-1)
error = ((Fx_2-Fx_1) / Fx_1)
Fx_1 = Fx_2
n = n+1
print (n," ",x1," ",Fx_1," ",error)
x2=x2+dx
Tugas 2
Tugas 3
Soal ini dikerjakan dengan menggunakan Hukum Kontinuitas Massa Definisi : massa yang masuk ke dalam sistem akan sama dengan massa yang keluar dari sistem
Rumus Q*p=Q*p
Karena terdapat 4 variabel, maka terdapat 4 persamaan
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
Dari model python akan didapatkan nilai
C1 = 275/9
C2 = 100/3
C3 = 275/9
C4 = 425/12
- python segera menyusul