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<="" 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

Tidak ada komentar:

Posting Komentar

Catatan: Hanya anggota dari blog ini yang dapat mengirim komentar.