Metode Incremental
Dengan mencari nilai P(x) dari x = -10 sampai x = -2
Akar dari persamaan tersebut terdapat antara -2 dan 0
Dengan mempersempit pencarian maka akar P(x) terdapat pada -0.8 dan -0.6
Untuk mencari hasil yang lebih akurat dengan menambahkan jumlah angka dibelakang koma maka didapat akar dari P(x) adalah -0.604
Code pada lembar kerja Fortran
CHARACTER*1 AS
F (x) = 4 * x ** 3 + 3 * x ** 2 + 2 * x + 1
FP (x) = 12 * x ** 2 + 6 * x + 2
WRITE (*,1)
1 FORMAT(' Program FindRoot - Finds roots of polynomial or transcendental equations.')
WRITE (*,*) ' (1) Incremental Search,'
WRITE (*,*) ' Select a method, enter 1/2/3/4/5/6/7/8/9/0 : '
READ (*,*) ms
WRITE (*,3)
3 FORMAT(' Have you defined F(x) by editing? Enter Y/N :')
READ (*,4) AS
4 FORMAT(A1)
IF (AS.NE.'Y')GOTO 900
IF (ms.NE.4) GOTO 5
WRITE (*,*) ' Have you defined d[F(x)]/dx by editing? Enter Y/N :'
READ (*,4) AS
IF (AS.NE.'Y')GOTO 900
5 WRITE (*,*) ' Enter the lower and upper bounds of the roots : '
READ (*,*) xl, xr
WRITE (*,*) ' How small should F(X) be for termination :'
READ (*,*) epsilon
WRITE (*,*) ' Trial # X F(X)'
nt = 1
GOTO (10) ,ms
10 f1 = f(x1)
15 dx = (xr - x1) / 10
x = x1 + dx
GOTO 50
50 fv = f(x)
WRITE (*,52) nt, x, fv
52 FORMAT(I10,2E15.4)
IF (ABS(fv).LT.epsilon) GOTO 900
nt = nt + 1
GOTO (110),ms
110 IF ((f1 * fv) .LT. 0) GOTO 115
x = x + dx
GOTO 50
115 xr = x
xl = x - dx
GOTO 15
900 END
Keterangan pada F(x) kita dapat mengganti persamaan kuadrat sesuai yang kita inginkan. Dengan format F(x) = a * x ** n +/- b*x**n +/- … y* x +/- z.
Contoh : F(x) = 4 * x ** 3 + 3 * x ** 2 + 2 * x + 1
F(x) = 4x^3 + 3x^2 + 2x + 1
Metode Bisection
Metode ini berbeda sedikit pada metode incremental, dimana range akar pencariannya diperbesar
P(x) = 4x^3 + 3x^2 + 2x + 1
Linear Interpolation
Newton Rhapsom
Hasil akhirnya dapat ditemukan jika nilai x berada diantara hasil x sebelumnya.
Code pada Fortran :
CHARACTER*1 AS
F (x1) = x ** 4 + 2 * x ** 3 + 5 * x ** 2 - 28 * x - 9
FP (x1) = 4 * x ** 3 + 6 * x ** 2 + 10 * x - 28
WRITE (*,1)
1 FORMAT(' Program ini dapat Membantu Saudara/i dalam Mencari Akar dari Sebuah Persamaan.')
WRITE (*,*) ' Program ini Menggunakan Metode Newton-Raphson Iteration.'
WRITE (*,*)
WRITE (*,*) ' Masukkan Salah Satu Angka yang Anda Sukai (1/2/3/4/5/6/7/8/9/0) :)'
WRITE (*,*)
READ (*,*) ms
WRITE (*,3)
3 FORMAT( ' Program ini menggunakan --f(x)= x^4 + 2x^3 + 5x^2 - 28x - 9--')
WRITE (*,*) 'Tekan -Y- untuk melanjutkan, tekan -N- untuk keluar dari program ini.)'
WRITE (*,*)
READ (*,4) AS
4 FORMAT(A1)
IF (AS.NE.'Y')GOTO 900
IF (ms.NE.4) GOTO 5
WRITE (*,*) ' d[F(x)]/dx = 4x^3 + 6x^2 + 10x - 28 ? Enter Y/N :)'
WRITE (*,*)
READ (*,4) AS
IF (AS.NE.'Y')GOTO 900
5 WRITE (*,*) ' Masukkan batas-batas yang saudara/i inginkan ! :)'
WRITE (*,*)
READ (*,*) xl, xr
WRITE (*,*)
WRITE (*,*) ' Berapa kecil perhitungan F(x) yang saudara/i inginkan ? )'
WRITE (*,*) ' Contoh: 1.E-5 '
WRITE (*,*)
READ (*,*) epsilon
WRITE (*,*)
WRITE (*,*) ' Didapatkan # )'
nt = 1
WRITE (*,*) ' E = Epsilon '
WRITE (*,*)
WRITE (*,*) ' No. X F(x) '
GOTO (40) ,ms
WRITE (*,*)
40 x = x1
fv = f(x)
fpv= fp(x)
45 x = x - fv / fpv
GOTO 50
50 fv = f(x)
WRITE (*,52) nt, x, fv
52 FORMAT(I10,2E15.4)
IF (ABS(fv).LT.epsilon) GOTO 900
nt = nt + 1
GOTO (140),ms
140 fpv = fp(x)
GOTO 45
900 WRITE (*,*)
Code Fotran untuk penggabungan keempat metode :
CHARACTER*1 AS
F (x) = 4 * x ** 3 + 3 * x ** 2 + 2 * x + 1
FP (x) = 12 * x ** 2 + 6 * x + 2
WRITE (*,1)
1 FORMAT(' Program FindRoot - Finds roots of polynomial or transcendental equations.')
WRITE (*,*) ' Four options available : '
WRITE (*,*) ' (1) Incremental Search,'
WRITE (*,*) ' (2) Bisection Search,'
WRITE (*,*) ' (3) Linear Interpolation, and'
WRITE (*,*) ' (4) Newton-Raphson Iteration.'
WRITE (*,*) ' Select a method, 1/2/3/4 : '
READ (*,*) ms
WRITE (*,3)
3 FORMAT(' Have you defined F(x) by editing? Enter Y/N :')
READ (*,4) AS
4 FORMAT(A1)
IF (AS.NE.'Y')GOTO 900
IF (ms.NE.4) GOTO 5
WRITE (*,*) ' Have you defined d[F(x)]/dx by editing? Enter Y/N :'
READ (*,4) AS
IF (AS.NE.'Y')GOTO 900
5 WRITE (*,*) ' Enter the lower and upper bounds of the roots : '
READ (*,*) xl, xr
WRITE (*,*) ' How small should F(X) be for termination :'
READ (*,*) epsilon
WRITE (*,*) ' Trial # X F(X)'
nt = 1
GOTO (10, 20, 30, 40) ,ms
10 f1 = f(x1)
15 dx = (xr - x1) / 10
x = x1 + dx
GOTO 50
20 fr = f(xr)
25 x = .5 * (x1 + xr)
GOTO 50
30 f1 = f (x1)
fr = f (xr)
35 x = (xr * f1 - x1 * fr) / (f1 - fr)
GOTO 50
40 x = x1
fv = f(x)
fpv= fp(x)
45 x = x - fv / fpv
GOTO 50
50 fv = f(x)
WRITE (*,52) nt, x, fv
52 FORMAT(I10,2E15.4)
IF (ABS(fv).LT.epsilon) GOTO 900
nt = nt + 1
GOTO (110, 120, 130, 140),ms
110 IF ((f1 * fv) .LT. 0) GOTO 115
x = x + dx
GOTO 50
115 xr = x
xl = x - dx
GOTO 15
120 IF ((fr * fv).GE.0.) GOTO 125
xl = x
GOTO 25
125 xr = x
fr = fv
GOTO 25
130 IF ((fr * fv).GE.0.) GOTO 135
xl = x
fl = fv
GOTO 35
135 xr = x
fr = fv
GOTO 35
140 fpv = fp(x)
GOTO 45
900 END
MATEMATIKA TEKNIK II – 110401096 – HISKIA BENINDO |
10