Ujian Akhir Semester Komputasi Numerik¶
Soal¶
- Gunakan metode Midpoint untuk menyelesaikan Persamaan Deferensial Biasa berikut $ y(x) = 1 + 2x^2 + y \\ y(0) = 1 $ gunakan $ h= 0,1 $ Tentukan $ y(0.1) $ and $ y(0.2) $
- Hitunglah dengan metode iterasi Jacobi sampai iterasi ke 4 untuk penyelesaian sistem persamaan liner berikut $ x_1 + 2x_2 + 3x_3 = 10 \\ 2x_1 + 3x_2 + 3x_3 = 13 \\ x_1 + x_2 + x_3 = 15 $
- Hitunglah $ \int_{1}^{3} 2x $ dengan Metode Trapesium Rekursif
No 1¶
Berikut merupakan program dengan metode midpoint untuk meyelesaikan Persamaan Defrensial Biasa dari $ y(x) = 1 + 2x^2 + y \space \space \space$, $ y(0) = 1 $ dengan $ h= 0,1 $ dan initial $ x_0 = 0 $, initial $ y_0 = 1 $
from numpy import arange def midpoint_method(f, x0, y0, h): print('\nMidpoint Method') y = y0 for i in arange(0, 0.5, 0.1): y = y0 + h * i * f(x0, y) print('y', round(i,1), '=', round(y, 4)) def f(x, y): return 1 + 2*(x**2) + y y0 = 1 x0 = 0 h = 0.1 midpoint_method(f, x0, y0, h)
Dalam program tersebut, digunakan fungsi arange dari library numpy, yang nantinya akan digunakan untuk membuat range berupa float untuk digunakan pada perulangan for. Dengan fungsi tersebut perulangan akan menghasilkan nilai range float, seperti 0.1, 0.2, 0.3 dst. Kemudian dalam program tersebut dibuat sebuah fungsi midpoint_method(arg1,..) dengan parameter f untuk persamaan yang ditentukan, x0, y0, dan h. Dalam fungsi tersebut berisi variabel y sebagai initial yang bernilai awal y0, selanjutnya akan melakukan looping dari 0.0 hingga 0.4 (karena yang dicari hanya 0.1 dan 0.3 maka yang saya memberika batasan hanya sampai 0.5), dalam setiap looping tersebut akan melakukan perhitungan y. Setelah program tersebut dijalankan, maka output yang dihasilkan adalah seperti berikut.
Midpoint Method y 0.0 = 1.0 y 0.1 = 1.02 y 0.2 = 1.0404 y 0.3 = 1.0612 y 0.4 = 1.0824
Dari program tersebut ditemukan nilai dari dari y(0.1) adalah 1.02, dan y(0.2) adalah 1.0404.
No 2¶
import math import copy from numpy import linalg A = [[1, 2, 3], [2, 3, 3], [1, 1, 1]] B = [10, 13, 5] X = [0] * len(A) X_temp = copy.copy(X) error = 0.1 max_iterasi = 4 print('Matrix A', A) print('Matrix B', B, '\n') e = 1 iterasi = 0 while math.sqrt(e) >= error and iterasi < max_iterasi: if linalg.det(A) != 0: for i in range(len(X)): i_sum = 0 for j in range(len(X)): if j!=i: i_sum += A[i][j] * X_temp[j] X[i] = round((B[i] - i_sum) / A[i][i], 4) print('k-'+str(iterasi+1), 'X =', X) e = 0 for i in range(len(X)): e += (X[i] - X_temp[i]) ** 2 X_temp = copy.copy(X) iterasi+=1 else: print('tidak ada peneyelesaian untuk persamaan tersebut!') for i in range(len(X)): print('X'+str(i+1),':', X[i]) print('\naproksimsai error =', math.sqrt(e))
Dalam program tersebut, digunakan libarary math yang nantinya digunakan untuk menghitung akar, kemudian libarary copy untuk menyalin nilai dari sebuah variabel. dan fungsi linalg dari libarary numpy untuk mencari determinan dari matrik. Kemudian terdapat list A yang berisi nilai koefisen dari Sistem Persamaan Linear yang akan diselesaikan, dan list B merupakan nilai hasil dari SPL tersebut, kemudian list X untuk menampung hasil dari perhitungan.
Diprogram tersebut dideklarasikan toleransi error sebesar 0.1 dan maxsimal melakukan iterasi sebayak 4 kali, selanjutnya program akan melakukan iterasi ketika error yang dihasilkan kurang dari tolerasi error dan iterasi yang dilakukan belum mencapai batas iterasi, maka program akan lanjut. Selanjutnya akan dicek determinan dari matrik A, jika determinannya adalah 0 maka program akan lanjut dan melakukan perhitungan iteratif sesuai dengan formula dari metode iterasi Jacobi. Selain itu program akan berhenti dan menyatakan bahwa "tidak ada penyelesaian untuk SPL tersebut". Setelah program tersebut dijalankan dan berhenti setelah 4 kali iterasi, dan output yang dihasilkan adalah seperti berikut .
Matrix A [[1, 2, 3], [2, 3, 3], [1, 1, 1]] Matrix B [10, 13, 5] k-1 X = [10.0, 4.3333, 5.0] k-2 X = [-13.6666, -7.3333, -9.3333] k-3 X = [52.6665, 22.7777, 25.9999] k-4 X = [-113.5551, -56.7776, -70.4442] X1 : -113.5551 X2 : -56.7776 X3 : -70.4442 aproksimasi error = 207.9906980839768
Maka ditemukan nilai dari X1 : -113.5551, X2 : -56.7776, dan X3 : -70.4442, dengan error sebesar 207.9906980839768.
No 3¶
Berikut program dengan menggunakan metode Trapesium Rekursif untuk menghitung nilai integral dari $ \int_{1}^{3} 2x $ dengan 4 kali kali iterasi.
def trapezoid_rekursif(f, a, b, n): trapezoid = 0 print(' R', '\t', 'Trapezoid') for i in range(0,n+1): k = 2**i h = (b-a)/k xi = a jum = 0 for j in range(1,k): xi += h jum += f(xi) old_trapezoid = trapezoid trapezoid = (h * (f(a)+(2*jum)+f(b)) ) / 2 print('('+str(i)+',0)\t', round(trapezoid, 4)) print('\naproksimasi error :', old_trapezoid - trapezoid) def f(x): return 2*x print("f(x) = 2x\n") a = 1 b = 3 n = 3 trapezoid_rekursif(f, a, b, n)
Dalam program tersebut, dibuat fungsi trapezoid_rekusif(arg1,...) , di fungsi tersebut terdapat parameter f untuk persamaan yang digunakan, a untuk batas bawah, b untuk batas atas, dan n untuk banyaknya iterasi. Kemudian di fungsi tersebut akan melakukan iterasi sebanya n untuk melakukan perhitungan sesuai dengan formula dari metode Trapesium Rekursif. Saat program tersebut dijalankan dan berhenti setelah 4kali iterasi, dan output yang dihasilkan adalah seperti berikut.
f(x) = 2x R Trapezoid (0,0) 8.0 (1,0) 8.0 (2,0) 8.0 (3,0) 8.0 aproksimasi error : 0.0
Maka ditemukan nilai dari integral tersebut yaitu 8.0 dengan error = 0.0.