Senin, 02 April 2012

Algoritma Metode Pencarian Akar (SAGE :Phyton)




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<nmax):
# 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 (51409093)
- Bobby Elvan (52409442)
- I Putu Ananta (52409540)
- Nadia Riantini (50409541)


Kelas : 3IA01
Universitas Gunadarma

Tidak ada komentar:

Posting Komentar