Untuk tugas Rekayasa Komputer kali ini, kami ditugaskan untuk mengubah algoritma dari metode Biseksi (Bagi Dua), Regula falsi , Newton Raphson, dan Secant ke dalam suatu aplikasi matematika tertentu. Aplikasi matematika yang dipakai oleh kelompok kami adalah SAGE.Dengan bahasa bawaannya adalah Pyhton, berikut Algoritma dari metode-metode tersebut:
Metode Bagi Dua
omega=1.5
z_0=1
def f(z): return abs(math.cos(omega*z))-z/z_0 #nilai absolut dari kosinus omega z kurang z/z_0
a=-2
b=1
err=0.00001
n=0
nmax=10000
# Menentukan variabel-variabel float
dos = float(2); err = float(err)
# Sebelum ke algoritma kita mengevaluasi apakah perubahan fungsi mendaftar di ujung
if (f(a)*f(b)<0)&(n<="" span="">
# Carilah titik tengah pertama
c=(a+b)/dos
print 'Akar=',c, ' Nilai=',f(c),' Iterasi=',n,' (default)',' Presisi=',err
while abs(f(c))>err: # kondisi mutlak bahwa f (root) lebih besar dari kesalahan (perhatikan nilai absolut)
if f(c)*f(a)<0: # kondisi ini mengembalikan berbagai baru dengan perubahan tanda
b=c
else:
a=c
n=n+1 # iterasi memiliki
c=(a+b)/dos
print 'Akar=',c, ' Nilai=',f(c),' Iterasi=',n
else:
print 'f(a)=',f(a),' f(b)=',f(b),' Iterasi=',n
Output:
Akar= -0.5 Nilai= 1.23168886887 Iterasi= 0 (default)
Presisi= 1e-05
Akar= 0.60990524292 Nilai= -2.02227274149e-06 Iterasi= 17
Metode Newton-Rhapson
# newton's method
PRECISION = 10e-5
# x1 = x - f(x)/f'(x)
def newthon_method(x0,fn,fn_d):
while True:
x1 = x0 - ((fn(x0))/(fn_d(x0)))
if abs(x1 - x0) <= PRECISION: return x1
x0 = x1
print x0
# calculate the square sqrt of a number
# f(x) = X^2 - Number
# f'(x) = 2X
def newton_sqrt(num):
x0 = num/2
return newthon_method(x0,lambda x: x**2-num,lambda x: 2*x)
newton_sqrt(3214.0)
Output:
804.5
404.247513984
206.099044271
110.846744125
69.9208659915
57.9435579501
56.7056644466
56.6921527424
56.692151132233484
Metode Secant
PRECISION = 0.00001
# x2 = x1 - ((x1-x0)/(fn(x1)-fn(x0)))*fn(x1)
def secant_method(x0,x1,fn):
while True:
x2 = x1 - ((x1-x0)/(fn(x1)-fn(x0)))*fn(x1)
if abs(x2 - x1) <= PRECISION: return x2
x0 = x1
x1 = x2
print x2
# calculate the square sqrt of a number
# f(x) = X^2 - Number
def secant_sqrt(num):
return secant_method(num/2,num/4,lambda x: x**2-num)
secant_sqrt(3214.0)
Output:
537.0
324.277135397
205.916091836
132.004478363
89.9496774389
67.9769216068
59.0685940696
56.9032377885
56.6964766256
56.6921591697
56.692151132540069
Metode Regula-Falsi
def sign(x): # determines the sign of its argument
if x == abs(x) : return 1 # argument was positive or zero
else: return -1 # argument was negative
# Solve f = 0 on interval [x1,x2] by interpolation, with tolerances
def interpol_solve(f,x1,x2,ftol,xtol):
f1 = f(x1)
if abs(f1) <= ftol : return x1
s1 = sign(f1)
f2 = f(x2)
if abs(f2) <= ftol : return x2
s2 = sign(f2)
if s1 == s2 :
sys.stderr.write("Same sign at %g to %g - exit!\n" % (x1,x2))
sys.exit(1)
while abs(x2 - x1) > xtol :
x3 = x2 - f2*(x2 - x1)/(f2 - f1)
f3 = f(x3)
if abs(f3) <= ftol : break
s3 = sign(f3)
if s3 == s1 :
(x1,f1) = (x3,f3) # replace pair (x1,f1) by (x3,f3)
else :
(x2,f2) = (x3,f3) # replace pair (x2,f2) by (x3,f3)
return x3
def quad(x): # a simple test function with known zeroes
return (x - 5.0)*(x - 2.0)
# a simple main to test the regula falsi solver */
root = interpol_solve(quad,1.0,3.0,0.000001,0.000001);
print root
Software : SAGE
Kelompok 1
- Ahmad Riyanto (54409285)
- Amelia Belinda S (51409093)
- Bobby Elvan (52409442)
- I Putu Ananta (52409540)
- Nadia Riantini (50409541)
Kelas : 3IA01
Universitas Gunadarma