Kod yang dipaparkan dalam dokumen ini diuji menggunakan Python versi 3.10.12 bersama sandaran-sandaran berikut:
- numpy=1.25.0
- matplotlib=3.7.1
Pers. 5.7 yang muncul dalam bahagian 5.1 berbentuk begini \[ X\frac{e^X}{e^X-1} = 5. \tag{A.1}\]
Agak sukar untuk menyelesaikan persamaan ini pakai tangan jadi kita rujuk kaedah berangka.
Secara ringkasnya, kaedah berangka cuba mendapat jawapan penghampiran melalui pemanipulasian angka. Bandingkan dengan kaedah beraljabar yang mendapat jawapan tepat melalui mantik terhadap simbol. Contoh kaedah berangka ialah pencarian titik silang antara graf dengan garis \(y=0\) melalui cuba jaya berulang kali.
Bagi mendapatkan nilai \(X\) dalam pers. A.1, kita harus akui ia sama dengan \[ X\frac{e^X}{e^X-1} - 5 = 0 \] lalu kita gantikan 0 menjadi pembolehubah \(y\), \[ X\frac{e^X}{e^X-1} - 5 = y. \tag{A.2}\] Persamaan ini mewakili graf \(x\) melawan \(y\). Nilai \(X\) yang kita mahukan ialah apabila \(y=0\). Permasalahan ini telah bertukar menjadi permasalahan pencarian titik silang graf dengan garis \(y=0\).
Kaedah paling mudah nak faham dan buat untuk mencari titik silang graf dengan garis \(y=0\) ialah kaedah pembahagi dua. Langkah-langkahnya ialah seperti berikut:
kiri
dan kanan
. Jauh-jauh pun tidak mengapa asalkan titik persilangan itu berada di antara dua titik ini.tengah
lalu kita peroleh dua julat: julat [kiri
, tengah
] dan julat [tengah
, kanan
].kiri=kiri
dan kanan=tengah
.kiri=tengah
dan kanan=kanan
.jarak
antara kiri
dan kanan
lebih kecil dari ketepatan
yang diinginkan. Ambil nilai tengah
sebagai jawapan.Kod yang dipaparkan dalam dokumen ini diuji menggunakan Python versi 3.10.12 bersama sandaran-sandaran berikut:
```{python}
def persilangan_pembahagi_dua(
# fungsi yang kita nak tahu puncanya (titik persilangan)
fungsi, float,
kiri: float,
kanan: float = 1.0e-6
ketepatan: -> float:
)
# [1] Pilih dua titik, `kiri` dan `kanan`.
= abs(kanan-kiri)
jarak
int = 100 # Untuk letak had berapa kali boleh ulang
had: int = 1 # Untuk kira berapa kali dah ulang
ulangan:
while jarak > ketepatan:
# [2] Dapatkan titik `tengah`
= (kiri+kanan)/2.
tengah
# [3] Semak sama ada ada persilangan berlaku
# di julat pertama [`kiri`,`tengah`]
if (fungsi(kiri)*fungsi(tengah)) < 0:
# Jika ya:
# Balik ke langkah (1) dengan nilai baru kiri=kiri dan kanan=tengah
# Ulangan [1] Pilih dua titik, `kiri` dan `kanan`.
= kiri
kiri = tengah
kanan else:
# Jika tidak:
# Balik ke langkah (1) dengan nilai baru kiri=tengah dan kanan=kanan
# Ulangan [1] Pilih dua titik, `kiri` dan `kanan`.
= tengah
kiri = kanan
kanan # [4] Ulang langkah [1] - [3] sampai `jarak <= ketepatan`
= abs(kanan-kiri)
jarak
# Kalau dah lebih had, kita keluar.
# Kita tak nak benda ni ulang sampai kiamat tak berhenti.
+= 1
ulangan if ulangan == had:
raise ValueError(
f'Sudah {had} kali diulang tetapi masih tak jumpa jawapan.'
)
return tengah
```
kiri
dan kanan
berpisah jauh sangat, maka pencarian titik persilangan akan ambil masa yang lama kerana jaraknya hanya dibahagi dua setiap kali.kiri
dan kanan
yang awal. Sekiranya tidak, maka kaedah ini tidak akan membuahkan apa-apa hasil.Sebelum kita mulakan penyelesaian, kita perlu tahu dahulu adakah fungsi yang kita ada ini bersilang dengan garis \(y=0\) tidak? Kita cuba lukis graf untuk tengok wujud ke tak persilangan tersebut. Oleh itu, kita takrifkan dulu fungsi untuk pers. A.2.
```{python}
import numpy as np
def formula(x: float) -> float:
return x*np.exp(x)/(np.exp(x) - 1) -5
```
Kemudian, bolehlah kita lukis grafnya.
```{python}
import matplotlib.pyplot as plt
= np.linspace(0.1, 10)
x = formula(x)
y
plt.plot(x, y)=0, linewidth=0.8, color='black')
plt.axhline(y
plt.show()```
Nampaknya, titik persilangan tersebut berada di antara \(x=4\) dan \(x=6\). Kedua-dua nilai ini boleh jadi nilai kiri
dan kanan
asal untuk kaedah pembahagi dua.
Apabila sudah diketahui wujud titik persilangan, maka bolehlah kita gerakkan algoritma pencarian titik silang melalui pembahagian dua.
```{python}
= persilangan_pembahagi_dua(formula, kiri=4, kanan=6)
jawapan ```
Nilai x ialah 4.965113639831543 apabila y=0
Kita boleh semak jawapan ini dengan graf.