HITUNG SINUS

Contoh 4. HITUNG SINUS

Hitung sin(x) dengan pendekatan: lim Sn; Sn = x - x3/3! + x5/5! - ... + (-1)n-1x2n-1/(2n-1)! , n _ 1 n -∝

sin (x) ≈x-x 3 /3! + x 5 /5! - ... suku umum dapat ditulis sebagai : t 1 = (-1) i-1 x 2i-1 / (2i-1)

Program HITUNGSIN-1

{Menghitung sin (x) ≈ x - x3/3! + x5/5! - ... }

KAMUS

T : real {Suku terakhir dihitung} S : real {Jumlah deret }

i : integer ≠ 0 { indeks suku yang terakhir dihitung}

ALGORITMA

i ← x {T1} S ←T

i ←1 while not P(S, T, I) do {Kondisi berhenti P(S, T, i) akan diperinci lebih lanjut}

i ←i+1 T ← (-1) ** (i-1)*(x^ (2* i-1) )/FACT (2*i-1) {FACT (n) adalah fungsi untuk menghitung n!}

S ← S +T {deret aditif}

output(S)

Seperti pada contoh S= 1 - 1/2 + 1/3 - ..., algoritma-algoritma ini menyangkut perhitungan suku ke-i secara langsung yang sangat tidak efisien dan memakan waktu. Pada hampir semua kasus, kita dapat memanfaatkan hasil perhitungan sebelumnya. Maka mula-mula kita definisikan hubungan berulang untuk setiap suku:

To = harga awal Ti = f(Ti-1) , i > 0

atau To = harga awal

Ti = f(Ti-1, i) , i > 0

Sehingga skema umum menjadi: Skema umum 1:

Program HITUNGDERET1

{Menghitung deret S = t 0 + t 1 +t 2 +... + tn atau S = t 0 * t 1* t 2 * ... * tn }

KAMUS

T : real {Suku/faktor terakhir dihitung} S : real {Jumlah deret aditif/multiplikatif}

ALGORITMA

T ←t0 S ←T

while not P (S,T) do T ← f(T) { f(T) adalah fungsi yang menghitung harga T baru berdasarkan T yang

lama } S ← g(S , T) { g(S,T) adalah fungsi yang mengubah harga S berdasarkan S yang lama

dan T}

{ S adalah hasil yang diinginkan}

Skema umum 2:

Program HITUNGDERET2

{Menghitung deret S = t 0 + t 1 + t 2 +... +tn atau S = t 0 * t 1* t 2 * ... * tn }

KAMUS

T : real {Suku/faktor terakhir dihitung} S : real {Jumlah deret aditif/multiplikatif}

i : integer ≠ 0 { indeks suku/faktor yang terakhir dihitung}

ALGORITMA

T ←t0 S ←T i ←0 while not P (S,T) do

{loop invariant: S = t 0 + t 1 + t 2,+... +ti atau S = t 0 * t 1* t 2 * ... * ti}

{ i adalah indeks suku terakhir yang sudah termasuk dalam S } i ←i+1 T ← f(T, i) {f(T) adalah fungsi yang menghitung harga T yang baru

berdasarkan T yang lama dan i} S ← g(S , T, i) {g(S , T, i) adalah fungsi yang mengubah harga S berdasarkan S yang lama, T dan i}

{ S adalah hasil yang diinginkan}

Maka untuk algoritma hubungan berulang menghitung pendekatan exp(x): exp(x) ≈ lim 1 + x + x2/2! + x3/3! + ... + xn/n! n -∝

Kita dapatkan: Hubungan berulang: To = 1

Ti = Ti-1* x/i Kondisi berhenti:

|T| ≤ε Sehingga algoritmanya menjadi:

Program HITUNGEXP2

{Menghitung exp (x) ≈ 1 + x + x2/2! + x3/3! + ..... xn/n! }

KAMUS

T : real {Suku terakhir dihitung} S : real {Jumlah deret }

i : integer ≠ 0 { indeks suku yang terakhir dihitung}

ALGORITMA

T ← 1 {T0} S ←T

i ←0 while abs(T) > ε do

i ←i+1 T ← T *x/i S ← S +T

output(S)

Dan untuk perhitungan sin(x) dengan: Ti = (-1) 2i-1*x2i-1/(2i-1)!

lebih disukai suatu variabel k sehingga Ti = -Ti-1*x 2/ki(ki-1) ki = ki -1 +2 To = x ko = 1

Kondisi berhenti:

|T| ≤ ε * |S|

Algoritmanya menjadi:

Program HITUNGSIN2

{Menghitung sin (x) ≈ x - x3/3! + x5/5! - ... }

KAMUS

T : real {Suku terakhir dihitung} S : real {Jumlah deret } k : [1,3,5,...] { indeks suku yang terakhir dihitung}

ALGORITMA

k ←1 T ← x {T1}

S ←T while ( abs(T) > ε * abs(S) ) do

k ←k+2 T ← -T * x * x/ (k*(k-1)) S ← S +T {deret aditif}

{ abs(T) ≤ ε * abs(S) suku berikutnya sudah dapat diabaikan : } output(S)

Latihan Soal

1. Hitung cos(x) dengan pendekatan: S = 1 - x2/2! + x4/4! - ... + (-1)n x2n /(2n )! , n

dan kondisi berhenti: |T|

* |S|

2. Buat suatu algoritma untuk menghitung cos(x) maupun sin(x) tergantung pada sebuah parameter p, p = 1 untuk cos(x) atau p = 2 utnuk sin(x) dengan

memperhatikan bahwa kedua rumus untuk menghitung sin(x) dan cos(x) sangat mirip.

3. Hitung pendekatan

exp(-x2) dx dengan pendekatan:

x - x3/3*1!+ x5/5*2! -x7/7*3! ...

4. Hitunglah konversi string “12345” menjadi nilai integer basis 10, atau sebuah string dengan basis bukan sepuluh, misalnya biner yaitu “000011111001”

menjadi nilai integer basis 10 tanpa mengetahui posisinya, yaitu dengan memanfaatkan nilai sebelumnya yang sudah dihitung.