Anda di halaman 1dari 53

J u r u s a n F i s i k a , S e k i p U t a r a , B u l a k s u mu r Y o g y a k a r t a

2011
Pemrograman Python
Analisis Data Eksperimen Fisika
Eko Sulistya
Jurusan Fisika FMIPA UGM
1

Kata Pengantar
Alhamdulillah, puji syukur ke hadirat Allah S.W.T, yang telah
memberikan petunjuk dan hidayah-Nya sehingga buku (singkat)
tentang pemrograman ini dapat saya selesaikan.
Mungkin tulisan ini masih jauh dari sebutan buku, namun
semoga dapat berguna bagi mahasiswa peserta Praktikum Fisika
Dasar, dan matakuliah Komputer Multimedia.
Karena disebut sebagai buku singkat dan dikerjakan dengan
waktu yang singkat pula, maka pastilah banyak kekurangan dan
kesalahan di sana sini. Penulis menyampaikan permohonan maaf atas
kekurangan itu, dan mengaharapkan kritik dan saran demi
pengembangan tulisan ini agar menjadi buku yang sebenarnya.
Yogyakarta, Februari 2011
Penulis,
Eko Sulistya


2


Daftar isi
Kata Pengantar .................................................................................... 1
I. Pendahuluan .................................................................................... 4
1.1 Latar belakang ........................................................................... 4
1.2 Rumusan masalah ...................................................................... 4
1.3 Tujuan ......................................................................................... 5
2 Pengantar singkat bahasa pemrograman Python ........................... 5
2.1 Yang dihadapi dalam membuat program : rumus .................... 5
2.1.1 Menggunakan Python sebagai kalkulator .......................... 5
2.1.2 Tentang Program dan Pemrograman .................................. 6
2.1.3 Perangkat untuk Menulis Program .................................... 7
2.1.4 Menggunakan Idle untuk Menulis Program ....................... 8
2.1.5 Bagaimana Menjalankan Program ................................... 10
2.1.6 Verifikasi Hasil Program ................................................... 10
2.1.7 Menggunakan Variabel ..................................................... 11
2.1.8 Pemilihan Nama Variabel ................................................. 12
2.1.9 Kata-kata Kunci dalam Python ......................................... 13
2.1 10 Komentar ......................................................................... 13
2.1.11 Memformat Tampilan Teks dan Angka .......................... 14
2.2 Loop dan List ............................................................................ 15
2.2.1 Penyelesian yang sangat sederhana ................................. 16
2.2.2 While .................................................................................. 17
2.2.3 Ekspresi Boolean (atau logical) ......................................... 18
2.2.4 List ..................................................................................... 19
2.2.5 For ...................................................................................... 21
2.3 Fungsi ....................................................................................... 22
2.3.1 Fungsi dengan satu variabel ............................................. 23
2.3.2 Variabel lokal dan variabel gobal ...................................... 24
2.3.3 Fungsi dengan beberapa variabel (argumen) ................... 25
2.3.4 Variabel keluaran (hasil = return) yang lebih dari satu .. 25
2.3.5 Fungsi tanpa nilai keluaran .............................................. 26
3

3 Regresi linear .................................................................................. 28
3.1 Metode kuadrat terkecil ........................................................... 28
3.2 Metode kebolehjadian maksimum ........................................... 29
3.3 Parameter a dan b .................................................................... 30
3.4 Goodness-of-fit .......................................................................... 31
3.5 Koefisien korelasi ..................................................................... 32
4 Implementasi .................................................................................. 33
4.1 Membaca file data .................................................................... 33
4.2 Memformat dan memplot data ................................................ 36
4.3 Fungsi untuk membuka file, membaca, mengolah dan
memplot data .......................................................................................... 38
4.4 Fungsi untuk regresi linear ..................................................... 41
4.5 Plot data hasil regresi linear .................................................... 42
4.6 Goodnes-of-fit, chi-kuadrat ...................................................... 45
4.7 Sedikit dekorasi ........................................................................ 46
4.8 Interaktif .................................................................................. 47
5 Penutup ........................................................................................... 49
6. Referensi/Daftar bacaan ................................................................ 50
7 Lampiran (source kode) .................................................................. 51




4

I. Pendahuluan
1.1 Latar belakang
Membuat grafik hasil praktikum merupakan tugas yang tidak
bisa dihindari oleh setiap mahasiswa yang melakukan Praktikum
Fisika Dasar, sehingga setiap praktikan selalu bisa dipastikan pernah
membuat grafik hasil praktikum. Walaupun demikian, ada keluhan
bahwa mahasiswa yang telah mengambil Praktikum Fisika Dasar
ditengarai tetap tidak bisa membuat grafik dengan benar, sehingga
perlu diadakan kuliah tambahan yang khusus membahas tentang
grafik.
Tidak diketahui penyebab yang pasti mengapa mahasiswa tidak
memiliki kemampuan membuat grafik dengan baik dan benar
walaupun telah melaksanakan Praktikum Fisika selama 2 semester,
yaitu Praktikum Fisika Dasar I dan Praktikum Fisika Dasar II.
Tulisan ini tidak bermaksud untuk mencari penyebab itu, namun
hanya bertujuan untuk memberikan contoh bagaimana membuat
grafik dengan komputer berdasarkan metode yang telah teruji secara
eksperimental dan telah digunakan secara umum, yaitu metode
kuadrat terkecil, khususnya untuk regresi linear. Bahasa
pemrograman yang digunakan adalah Python.
Bahasa pemrograman Python dikategorikan sebagai multi-
purposeprogramming language. Apa saja bisa, dan kebutuhan apa saja
bisa dilakukan dengan bahasa Python. Mulai dari database sederhana,
komputasi sains, sampai dengan pemrograman web, bisa dilakukan
dengan Python.
Grafik hasil dari program ini dapat disimpan dalam file
berformat gambar (png = portable netwrok graphics), walaupun tidak
(belum) boleh digunakan dalam laporan praktikum, namun dapat
digunakan sebagai acuan, atau pembanding grafik yang dibuat dengan
tangan.
1.2 Rumusan masalah
Bagaimana membuat suatu program pembuat grafik linear untuk
data-data praktikum Fisika Dasar yang dapat digunakan sebagai
contoh/pembanding oleh mahasiswa dan untuk latihan membuat
grafik yang baik dan benar.
5

1.3 Tujuan
Membuat program pembuat grafik regresi linear untuk
data praktikum Fisika Dasar yang : sederhana, open-
source, multi-platform
Belajar pemrograman dengan bahasa Python sebagai dasar
untuk pemrograman yang lebih lanjut dan lebih kompleks
2 Pengantar singkat bahasa pemrograman Python
2.1 Yang dihadapi dalam membuat program : rumus
Rumus yang akan ditinjau adalah persamaan gerak dari sebuah
bola yang dilemparkan vertikal ke atas. Dari hukum Newton ke-2
tentang gerak, dapat diperoleh model matematik untuk gerakan bola,
yaitu posisi vertikal bola, disebut y, bervariasi terhadap waktu t
menurut persamaan
=
2
0
1
( )
2
y t v t gt (2.1)
dengan v0 adalah kecepatan awal bola, g adalah percepatan
gravitasi dan t adalah waktu. Dari persamaan di atas menunjukkan
bahwa sumbu-y dipilih sedemikian sehingga y = 0 pada saat t = 0.
Waktu yang diperlukan bola dari mulai saat dilemparkan
vertikal ke atas sampai ke ketinggian mula-mula dapat diperoleh
dengan menyelesaikan persamaan (1.1) untuk y(t) = 0,
2
0 0
1 1
0
2 2
v t gt t v gt
| |
= =
|
\ .
t = 0 atau
0
2v
t
g
=
Jadi bola kembali ke posisi awal setelah
0
2v g detik, dan dengan
demikian masuk akal bila membatasi persamaan (2.1) hanya untuk
0
0,2 t v g (

. Pemrograman untuk menghitung ketinggian bola yang
dilemparkan vertikal ke atas dengan kecepatan awal v
0
dibatasi untuk
t antara 0 sampai 2v0/g.
2.1.1 Menggunakan Python sebagai kalkulator
Program yang akan dibuat adalah menyelesaikan persamaan
(2.1) untuk nilai-nilai v0, g dan t tertentu. Dengan memilih
0
5 m/s v =
dan
2
9,81 m/s g = , maka bola akan kembali ke ketinggian awal setelah
6

0
2 1 s t v g = , yang berarti kita hanya tertarik pada interval waktu 0
sampai 1 detik. Seandainya kita ingin menghitung ketinggian bola
pada waktu t = 0,6 s, maka dari persamaan (2.1)
2
1
5 0,6 9,8 0,6
2
y =
Penulisan aritmatika di atas dapat diselesaian dan hasilnya bisa
ditampilkan dengan satu baris program Python :
pr i nt 5*0. 6- 0. 5*9. 8*0. 6**2
Satu baris perhitungan di atas dituliskan dengan command line
Python, atau disebut terminal (Gambar 1.1). Untuk menutup jendela
command line digunakan instruksi : Exi t ( ) .

Gambar 2.1 Jendela command line Python
Empat operator aritmatika standar dituliskan sebagai +,,* dan /
dalam Python dan sebagian besar bahasa pemrograman lain, namun
untuk pangkat, Python menggunakan dobel-*, seperti pada baris
perintah di atas,
2
0,6 dituliskan sebagai 0. 6**2.
2.1.2 Tentang Program dan Pemrograman
Sebuah program komputer hanyalah suatu urutan instruksi
kepada komputer yang dituliskan dalam bahasa komputer.
Kebanyakan program komputer agak-agak mirip dengan bahasa
Inggris, namun sangat lebih sederhana. Jumlah kata yang berkaitan
dengan instruksi kepada komputer sangat terbatas jumlahnya,
sehingga untuk melaksanakan satu operasi yang kompleks kita harus
menggabungkan sejumlah besar jenis instruksi yang berbeda-beda.
Teks program, yang berisi urutan instruksi-instruksi disimpan dalam
satu atau lebih file. Komputer hanya dapat melakukan pekerjaan
persis seperti apa yang diperintahkan kepadanya.
7

Persepsi lain tentang program adalah sebuah file yang dapat
dijalankan dengan cara dobel-klik untuk melakukan sebuah
pekerjaan. Kadang file ini berupa file teks berisi instruksi (seperti
halnya pada Python), dan kadang file itu berupa terjemahan dari
keseluruhan teks program menjadi bahasa yang lebih dekat ke
komputer (bahasa mesin), yang lebih efisien, namun cukup sulit
dibaca oleh manusia. Semua program dalam bab ini terdiri dari teks
singkat yang tersimpan dalam satu file, sedangkan program yang
sering kita gunakan, sebagai contoh Firefox, atau Internet Explorer,
untuk membaca halaman web, terdiri dari teks program yang
didistribusikan dalam sejumlah besar file, ditulis oleh sejumlah besar
orang dan dalam waktu selama beberapa tahun. Salah satu file berisi
terjemahan dari keseluruhan program menjadi bahasa mesin, dan
inilah yang dijalankan dengan cara mendobel klik. Secara umum,
kata program dapat berarti file tunggal seperti Firefox atau yang
lain, dapat pula berarti kumpulan dari beberapa file yang berisi
instruksi-instruksi tekstual.
Kata pemrograman jelas berkaitan dengan penulisan program,
namun prosesnya tidak hanya sekedar menulis instruksi yang benar.
Pertama, kita harus paham bagaimana sebuah masalah dapat
diselesaikan dengan cara memberikan sejumlah urutan instruksi
kepada komputer. Pada umumnya inilah hal yang paling sulit pada
pemrograman. Kedua, kita harus menuliskan urutan instruksi-
instruksi tersebut dalam bahasa komputer dengan benar dan
menyimpannya dalam sebuah file (program). Ketiga, kita harus
menjalankan program itu, mengecek kebenaran hasilnya, dan kadang
masuk fase keempat yaitu menemukan kesalahan dalam program
kemudian membetulkannya. Penguasaan proses-proses tersebut
memerlukan banyak latihan, yang berarti membuat banyak program,
dan berusaha untuk membuat program-program itu jalan.
2.1.3 Perangkat untuk Menulis Program
Karena program berisi teks, maka kita memerlukan bantuan
program lain yang bisa untuk menuliskan teks itu dan menyimpannya
ke dalam sebuah file teks. Kita mungkin sudah terbiasa dan memiliki
pengalaman yang cukup dalam hal menuliskan teks dengan komputer,
namun untuk menuliskan program kita memerlukan program khusus,
yang disebut editor, yang menyimpan teks persis seperti apa yang kita
tuliskan. Program pengolah kata yang banyak digunakan, misalnya
Microsoft Word, ditujukan untuk menghasilkan hasil cetakan yang
indah, bukanlah perangkat yang bagus untuk menuliskan program,
meskipun bisa juga menyimpan file dalam format teks murni.
8

Emacs, Xemacs dan Vim adalah editor yang umum digunakan
untuk menulis program pada sistem Linux atau Unix, termasuk
komputer Mac. Dalam Windows disarankan menggunakan Notepad++,
bisa juga Emacs atau Vim versi Windows. Semua program tersebut
bukan merupakan bagian dari paket instalasi standar Windows.
Editor khusus untuk program Python yang merupakan bagian dari
software Python disebut Idle biasanya sudah ikut terinstall pada saat
menginstall Python.
2.1.4 Menggunakan Idle untuk Menulis Program
Idle adalah Python Shell, semacam GUI editor teks untuk
menuliskan program Python baik secara interaktif (seperti command
line) atau untuk menuliskan beberapa baris instruksi dan
menyimpannya ke dalam satu file program. Program satu baris seperti
pada Gambar 2.1 dituliskan dalam Idle seperti ditunjukkan pada
Gambar 2.2.
Penulisan pada Idle dengan cara di atas masih merupakan
pemrograman interaktif seperti pada jendela terminal Python. Efektif
untuk instruksi yang hanya beberapa baris, namun jika program
terdiri dari sejumlah besar baris instruksi (dan biasanya begitu) maka
baris-baris instruksi disimpan ke dalam file. Untuk menuliskan
instruksi program yang akan disimpan ke dalam file, diperlukan
jendela editor yang baru, dengan menu : FileNew Window pada
Python Shell.

Gambar 2.2 Python Shell Idle yang berisi satu baris program
9


Gambar 2.3 Jendela editor untuk menuliskan program
Satu baris instruksi sudah dituliskan pada editor, selanjutnya
disimpan ke dalam file dengan menu : FileSave.
Ekstensi . py harus dituliskan supaya dikenali oleh Idle sehingga
pada saat diedit, Idle mengatur tampilan sesuai dengan aturan
pemrograman Python, seperti indentasi dan pewarnaan untuk
keyword. Spasi (karakter kosong) dan tab (indentasi) sangat penting
dalam penulisan program Python, demikian juga keyword. Kesalahan
penulisan keyword mudah dideteksi dari pewarnaan oleh Idle, seperti
ditunjukkan pada Gambar 2.3. Kata pr i nt mempunyasi warna yang
berbeda karena pr i nt merupakan keyword Python. Kesalahan
indentasi (dengan tab) tidak mudah dideteksi, sehingga pada saat
dijalankan akan menyebabkan Error. Oleh karena itu dalam
pemrograman dengan Python (dan bahasa pemrograman komputer
yang lain tentu saja), diperlukan kehati-hatian dalam mengetikkan
baris instruksi.

10

Gambar 2.4
2.1.5 Bagaimana Menjalankan Program

Gambar 2.5 Jendela Command Prompt untuk menjalankan file
program
File program bab1_1.py yang sudah disimpan dapat dijalankan
melalui jendela terminal, atau dos prompt pada Windows. Pada
Windows, Command Prompt dijalankan dari menu : StartAll
ProgramsAccessoriesCommand Prompt. Untuk menjalankan
program Python yang sudah disimpan, lokasi file program itu harus
diketahui, dan Command Prompt jalan di lokasi file itu.
Bagi yang sudah terbiasa dengan Windows Explorer, Command
Prompt bisa langsung dijalankan pada suatu folder yang dipilih
dengan cara meng-klik kanan nama folder itu kemudian memilih Dos
Prompt pada jendela popup yang muncul.

Gambar 2.6 Membuka Command Prompt (Dos Prompt) di folder yang
dipilih
2.1.6 Verifikasi Hasil Program
Hasil dari program harus dikontrol dengan hati-hati, apakah
hasil tersebut benar. Apa yang ditampilkan sebagai hasil program
tidak bisa dianggap selalu benar. Komputer hanya menjalankan sesuai
apa yang diperintahkan, sehingga kesalahan rumus, baik karena salah
ketik angka, atau karena salah menggunakan konsep, tidak akan
11

diperiksa oleh komputer. Komputer hanya memperhatikan sintaks
apakah sesuai dengan aturan bahasa pemrograman, jika benar,
mengolahnya, kemudian memberikan hasil. Jika ternyata hasil yang
diberikan komputer tidak benar, maka kesalahan dalam program
harus dicari dan dibenarkan.
Pada contoh satu baris program yang telah dibuat di muka dapat
dengan mudah dicek dengan menggunakan kalkulator. Dengan v0 = 5 ,
g = 9,8 dan t = 0.6, perhitungan dengan kalkulator menghasilkan
1,236. Cocok dengan yang dihasilkan oleh program.
2.1.7 Menggunakan Variabel
Jika kita ingin menghitung nilai y(t) untuk beberapa nilai t, maka
diperlukan pengubahan nilai t di dua tempat pada program satu-baris
yang telah dibuat sebelumnya. Pengubahan suatu nilai dalam suatu
program seperti itu lebih efektif dan sederhana bila instruksi
matematik dinyatakan dalam variabel, atau simbol. Hal ini berarti
bahwa kita dapat mendefinisikan v0, g, t dan y sebagai suatu variabel
dalam program, dengan cara memberikan nilai awal untuk v0, g, dan t
kemudian mengkombinasikan ketiganya sesuai dengan ruas kanan
persamaan (1.1) dan memasukkan hasil perhitungan ke variabel y.
Alternatif penulisan program sebelumnya dengan menggunakan
variabel dituliskan dalam teks berikut ini.
v0=5
g=9. 8
t =0. 6
y=v0*t - 0. 5*g*t **2
pr i nt y
Teks di atas dituliskan pada jendela Idle, dengan membuka
jendela baru : FileNew Window. Pada pemrograman dengan Python,
variabel tidak perlu dideklarasikan lebih dulu. Nama variabel
langsung dituliskan dan nilainya dituliskan setelah tanda sama
dengan.
Gambar 2.7 menampilkan baris-baris instruksi program yang
telah dimodifikasi yang ditulis pada Idle.
12


Gambar 2.7 Jendela editor berisi baris-baris program yang
menggunakan variabel
Program kedua seperti yang tertulis pada Gambar 2.7 nampak
lebih mudah dibaca dan dipahami karena lebih dekat dengan
persamaan matematis (2.1). Juga lebih mudah dimodifikasi nilainya.
Misalnya akan mengganti nilai t maka hanya diperlukan mengganti
pada satu tempat saja, yaitu baris ke-3, tidak dua tempat seperti pada
program sebelumnya.
Untuk menjalankannya, program kedua harus disimpan lebih
dulu, misalnya dengan nama bab1_2. py. Jalankan pada jendela
Command Prompt.

Gambar 2.8 Jendela Dos Prompt untuk menjalankan program
bab1_2. py
Hasilnya sesuai dengan hasil program pertama.
2.1.8 Pemilihan Nama Variabel
Pemilihan nama variabel yang deskriptif dan dekat dengan
persamaan matematis yang akan diselesaikan adalah penting agar
program mudah dibaca dan lebih mudah untuk pengecekan kebenaran
program. Nama variabel dapat mengandung huruf dan angka dari 0
sampai 9, namun karakter pertama tidak boleh angka. Python
13

membedakan huruf besar dan huruf kecil, jadi v0 selalu berbeda
dengan V0.
Bisa saja kita mengganti nama variabel v0 menjadi
kecepat an_awal , g menjadi per cepat an_gr avi t asi , t menjadi
wakt u, dan seterusnya. Walaupun itu diperbolehkan dalam Python,
namun penulisan program menjadi tidak efektif. Aturan yang
disarankan adalah memberi nama variabel sesuai dengan persamaan
matematis yang akan diselesaikan.
2.1.9 Kata-kata Kunci dalam Python
Beberapa kata dipergunakan sebagai kata kunci dalam Python
sehingga tidak boleh digunakan sebagai nama variabel. Sebagai
contoh : print, break, and, class, continue, dan lain sebaginya. Kata-
kata kunci yang lengkap dapat dilihat dengan memberikan instruksi
pada GUI Python (Idle) : >>> hel p( keywor ds ) . Semua kata kunci
ditampilkan pada Gambar 2.9.

Gambar 2.9 Jendela Idle yang menampilkan kata-kata kunci Python
Kata-kata kunci dapat diubah menjadi nama variabel, misalnya
dengan menambahkan garis bawah pada akhir kata kunci. Jadi el se
adalah kata kunci, tetapi el se_ adalah nama variabel.
2.1 10 Komentar
Komentar dalam pemrograman digunakan agar mudah dipahami
oleh orang lain yang tidak menulis program itu, atau mempermudah si
penulis program bila suatu saat akan melakukan modifikasi. Baris
komentar dalam Python diawali dengan karakter #. Apapun yang
tertulis setelah karakter itu akan diabaikan oleh Python. Gambar 1.10
14

menampilan program yang sama dengan sebelumnya namun ditambah
dengan komentar-komentar.
# pr ogr am unt uk menghi t ung t i nggi bol a yang di l empar ke
udar a
v0=5 # kecepat an awal
g=9. 8 # per cepat an gr avi t asi
t =0. 6 # wakt u
y=v0*t - 0. 5*g*t **2 # posi si ver t i kal
pr i nt y
Program di atas sama persis dengan program yang ditampilkan
pada Gambar 2.7, namun program yang terakhir ini lebih mudah
dimengerti oleh manusia dengan adanya komentar-komentar yang
ditambahkan.
Pada program-program yang panjang, yang terdiri dari banyak
baris, memerlukan komentar yang informatif dan pemilihan variabel
yang cocok (baik) sehingga mudah dipahami oleh orang lain maupun
pemrogram sendiri.
2.1.11 Memformat Tampilan Teks dan Angka
Pada progam-program yang sudah dibuat sebelumnya, hasil
program hanya ditampilkan dalam angka saja. Lebih informatif jika
hasil program ditampilkan dengan keterangan, seperti misalnya :
Pada saat t = 0. 6 s, bol a ber ada pada ket i nggi an 1. 24
met er .
dengan penulisan jumlah desimal yang sesuai (y hanya akurat sampai
pada centimeter saja). Format penulisan seperti di atas, baris
instruksinya dalam Python adalah:
pr i nt ' Pada saat t =%g s, bol a ber ada pada ket i nggi an %. 2f
met er . ' %( t , y)
Perintah print pada baris instrukti di atas adalah untuk
menampilkan variabel string, semua karakter yang berada di dalam
tanda petik. Tanda petik bisa tunggal, atau dobel. String yang akan
ditampilkan di atas, menggunakan sintaks printf, berarti string
tersebut memiliki beberapa slot, dimulasi dengan karakter %, dalam
contoh di atas adalah %g dan %.2f. Slot-slot tersebut adalah letak
variabel yang akan ditampilkan. Ada dua slot yang disiapkan, berarti
ada dua variabel yang harus ditempatkan dalam slot-slot tersebut.
Variabel pertama, t, masuk ke slot yang pertama. Slot ini memiliki
spesifikasi format %g, karakter % menyatakan letaknya dan karakter
15

berikutnya menyatakan format penulisan. Karakter g berarti bahwa
bilangan real harus dituliskan se-compact mungkin. Variabel
berikutnya, y, masuk ke slot kedua. Format penulisannya adalah .2f
yang berarti bilangan real dituliskan dalam 2 angka di belakang koma.
Karakter f pada spesifikasi format tersebut adalah dari kata float, dari
floating-point number. Program yang lengkap dengan format penulisan
keluaran seperti ditunjukkan berikut ini.
# pr ogr amunt uk menghi t ung t i nggi bol a yang di l empar ke udar a
v0=5 # kecepat an awal
g=9. 8 # per cepat an gr avi t asi
t =0. 6 # wakt u
y=v0*t - 0. 5*g*t **2 # posi si ver t i kal
pr i nt ' Pada saat t =%g s, bol a ber ada pada ket i nggi an %. 2f met er . '
%( t , y)
2.2 Loop dan List
Contoh program yang akan dibuat berikutnya adalah
menampilkan tabel konversi suhu Celcius dan Fahrenheit, dengan
kolom pertama berisi nilai-nilai suhu pada skala Celcius dan kolom
kedua berisi nilai-nilai suhu pada skala Fahrenheit. Persamaan
konversi dari Celcius ke Fahrenheit adalah
9
32
5
F C = + (2.2)
dan tabel yang akan dibuat seperti di bawah ini
- 20 - 4. 0
- 15 5. 0
- 10 14. 0
- 5 23. 0
0 32. 0
5 41. 0
10 50. 0
15 59. 0
20 68. 0
25 77. 0
30 86. 0
35 95. 0
40 104. 0

16

2.2.1 Penyelesian yang sangat sederhana
Nilai skala suhu Fahrenheit dapat langsung dihitung dengan
persamaan 2.2., sehingga tabel konversi dapat diperoleh dengan
menuliskan beberapa baris perhitungan.
C=20; F=9.0/5*C+32; print C,F
C=15; F=9.0/5*C+32; print C,F
C=10; F=9.0/5*C+32; print C,F
C=5; F=9.0/5*C+32; print C,F
C=0; F=9. 0/ 5*C+32; pr i nt C, F
C=5; F=9. 0/ 5*C+32; pr i nt C, F
C=10; F=9. 0/ 5*C+32; pr i nt C, F
C=15; F=9. 0/ 5*C+32; pr i nt C, F
C=20; F=9. 0/ 5*C+32; pr i nt C, F
C=25; F=9. 0/ 5*C+32; pr i nt C, F
C=30; F=9. 0/ 5*C+32; pr i nt C, F
C=35; F=9. 0/ 5*C+32; pr i nt C, F
C=40; F=9. 0/ 5*C+32; pr i nt C, F
Hasil program :
>>>
- 20 - 4. 0
- 15 5. 0
- 10 14. 0
- 5 23. 0
0 32. 0
5 41. 0
10 50. 0
15 59. 0
20 68. 0
25 77. 0
30 86. 0
35 95. 0
40 104. 0
>>>
Diperoleh tabel yang diharapkan dengan format yang tidak rapi,
namun bisa diatasi dengan perintah print yang bisa diatur, yaitu
dengan printf. Hal yang kurang baik dengan cara pemrograman
seperti di atas adalah penulisan statement (perintah) yang diulang-
ulang. Pertama, membosankan, dan yang kedua, manfaat komputer
adalah untuk perhitungan yang berulang (repetition), sehingga setiap
bahasa pemrograman pasti ada cara untuk mengulang perhitungan
secara otomatis. Cara pengulangan dalam pemrograman adalah loops,
dan dalam Python (dan bahasa pemrogaman yang lain) ada dua cara,
yaitu whi l e dan f or .
17

2.2.2 While
Whi l e digunakan untuk mengulang sekumpulan perintah selama
kondisi (syarat) yang diberikan masih berlaku. Nilai suhu dalam
Celcius yang akan dikonversi mulai dari 20 sampai 40 dengan
interval 5, jadi kondisi untuk menjalankan perintah adalah, mulai dari
suhu 20 dan jika suhu Celcius nilainya lebih kecil atau sama dengan
40. Secara matematis, urutan perintahnya adalah :
20
while 40 ulangi perintah berikut
9
32
5
tulis ,
tambahkan 5 ke
C
C
F C
C F
C
=

= +
Dituliskan dalam Python :
C = - 20 # ni l ai awal C
dC = 5 # i nt er val penambahan C
whi l e C <= 40: # kondi si
F = ( 9. 0/ 5) *C + 32 # hi t ung F
pr i nt C, F # t ul i s C dan F
C = C + dC # ubah ni l ai C
Hasil program :
- 20 - 4. 0
- 15 5. 0
- 10 14. 0
- 5 23. 0
0 32. 0
5 41. 0
10 50. 0
15 59. 0
20 68. 0
25 77. 0
30 86. 0
35 95. 0
40 104. 0
Sama dengan hasil sebelumnya. Yang penting (dan harus) adalah
bahwa blok perintah yang akan diulang (dimulai setelah tanda titik
dua, : ) harus dituliskan menjorok (indent), dan Python otomatis
meletakkan indent pada tempat yang seharusnya. Beda dengan C atau
C++ yang menggunakan tanda { } untuk menandai blok perintah.
18

Jika aturan tersebut dilanggar, pada saat dijalankan, akan
muncul peringatan :

Gambar 2.10 Pemberitahuan jika ada kesalahan sintaks pemrograman
Pada jendela editor (IDLE) Python menunjukkan tempat di mana
seharusnya di-indent, ditunjukkan pada Gambar 2.11. Kesalahan
semacam itu mudah diperbaiki, tinggal klik mouse pada awal baris
(pada huruf F), kemudian tekan sekali tombol Tab. Demikian
seterusnya sampai akhir blok.

Gambar 2.11 Kursor yang berada pada lokasi kesalahan program
Ada cara yang lebih singkat untuk menuliskan C = C + dC,
yaitu
C += dC # eki val en dengan C = C + dC
dan yang lain :
C - = dC # eki val en dengan C = C dC
C *= dC # eki val en dengan C = C*dC
C / = dC # eki val en dengan C = C/ dC
2.2.3 Ekspresi Boolean (atau logical)
Pada contoh di atas, digunakan ekspresi booleanC <= 40 yang
memiliki nilai Tr ue dan Fal se. Ekspresi yang lain adalah :
C == 40 # C sama dengan 40
C ! = 40 # C t i dak sama dengan 40
19

C >= 40 # C l ebi h besar at au sama dengan 40
C > 40 # C l ebi h besar dar i 40
C < 40 # C l ebi h keci l dar i 40
Ekspresi boolean tidak hanya untuk angka, tetapi semua ekspresi
yang bisa mempunyai nilai benar (Tr ue) atau salah (Fal se) dapat
digunakan. Bisa juga menggunakan kata not untuk menyatakan tidak
sama dengan. Jika C == 40 bernilai Tr ue, maka not C == 40 bernilai
Fal se.
Ekspresi boolean dapat digabung dengan and dan or . Untuk and,
kondisi gabungan bernilai Tr ue jika kedua kondisi bernilai Tr ue,
sedangkan untuk or , kondisi gabungan bernilai Tr ue jika salah satu
kondisi bernilai Tr ue.
>>> x = 0; y = 1. 2
>>> x >= 0 and y <1
Fal se
>>> x >=0 or y < 1
Tr ue
>>> x > 0 or not y > 1
Fal se
>>> - 1 < x <= 0 # sama dengan : - 1 < x and x <= 0
Tr ue
>>> not ( x > 0 or y > 0)
Fal se
>>>
Pada contoh di atas, not digunakan untuk nilai kondisi gabungan
yang berada di dalam tanda kurung. Kondisi di dalam kurung bernilai
Tr ue karena salah satu bernilai Tr ue, yaitu y > 0, sehingga not
menghasilkan nilai kondisi Fal se.
2.2.4 List
Pada contoh-contoh sebelumnya, sebuah variabel hanya berisi
satu nilai saja. Dalam Python, beberapa nilai dapat digabung ke dalam
satu grup dan disimpan dalam sebuah List. Sebagai contoh, nilai-nilai
suhu Celcius pada tabel konversi Celciuls Fahrenheit.
>>> C = [ - 20, - 15, - 10, - 5, 0, 5, 10, 15, 20, 25, 30, 35,
40]
>>> C[ 0]
- 20
>>> C[ - 1]
40
>>>
20

Anggota grup yang pertama diberi indeks 0. Indeks negatif
menyatakan pengambilan mulai dari indeks terakhir.
Anggota, atau unsur, atau elemen, dari suatu Li st dapat
ditambah dengan perintah append, ditambahkan pada akhir Li st .
>>> C. append( 45)
>>> C
[ - 20, - 15, - 10, - 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
Bisa juga dengan menambahkan isi dari List yang lain.
>>> D = [ 50, 55]
>>> C = C + D # sama dengan C = C + [ 50, 55]
>>> C
[ - 20, - 15, - 10, - 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45,
50, 55]
Untuk menyisipkan satu nilai ke List digunakan perintah insert.
>>> C. i nser t ( 6, 7)
>>> C
[ - 20, - 15, - 10, - 5, 0, 5, 7, 10, 15, 20, 25, 30, 35, 40, 45,
50, 55]
>>>
Perintah di atas adalah untuk menyisipkan nilai 7 pada indeks
ke-6. Untuk menghapus salah satu elemen :
>>> del C[ 6]
>>> C
[ - 20, - 15, - 10, - 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45,
50, 55]
Perintah del C[ 6] adalah menghapus elemen C pada indeks ke-
6. Jumlah elemen dari suatu List diperoleh dengan perintah len.
>>> l en( C)
16
>>>
Untuk mengetahui apakah suatu nilai merupakan elemen dari
suatu List :
>>> 20 i n C
Tr ue
>>> - 20 i n C
Tr ue
>>> 24 i n C
21

Fal se
>>>

2.2.5 For
Jika data-data (angka, string, dsb) sudah tersimpan dalam
sebuah List, langkah pemrograman biasanya adalah melakukan satu
operasi yang sama pada setiap elemen List. Ini bisa dilakukan dengan
For.
suhu = [ 0, 20, 40, 60, 80, 100]
f or C i n suhu:
pr i nt ' el emen dar i suhu : ' , C
pr i nt ' Daf t ar suhu memi l i ki ' , l en( suhu) , ' el emen'
Hasil jalannya program :
>>>==========================RESTART========================
==
>>>
el emen dar i suhu : 0
el emen dar i suhu : 20
el emen dar i suhu : 40
el emen dar i suhu : 60
el emen dar i suhu : 80
el emen dar i suhu : 100
Daf t ar suhu memi l i ki 6 el emen
>>>
Dengan menggunakan List dan For, maka program membuat
tabel konversi suhu CelciusFahrenheit dapat diubah menjadi :
suhuC = [ - 20, - 15, - 10, - 5, 0, 5, 10, 15, 20, 25, 30, 35,
40]
f or C i n suhuC:
F = ( 9. 0/ 5) *C + 32
pr i nt C, F
Hasil jalannya program :
>>>=========================RESTART=========================
=
>>>
- 20 - 4. 0
- 15 5. 0
- 10 14. 0
- 5 23. 0
0 32. 0
22

5 41. 0
10 50. 0
15 59. 0
20 68. 0
25 77. 0
30 86. 0
35 95. 0
40 104. 0
>>>
Daftar tabel masih kurang rapi. Oleh karena itu digunakan
perintah print format (printf).
suhuC = [ - 20, - 15, - 10, - 5, 0, 5, 10, 15, 20, 25, 30, 35,
40]
f or C i n suhuC:
F = ( 9. 0/ 5) *C + 32
pr i nt ' %5d %5. 1f ' %( C, F)
Hasil program :

Gambar 2.12 Hasil program dengan perintah pencetakan yang diatur
formatnya
2.3 Fungsi
Sebuah fungsi, dalam bahasa pemrograman, adalah sekumpulan
perintah yang mempunyai suatu tujuan tertentu, yaitu menghasilkan
satu atau beberapa variabel, atau hanya melakukan suatu tugas tanpa
menghasilkan variabel seperti menampilkan nilai atau
menggambarkan grafik.
23

2.3.1 Fungsi dengan satu variabel
Contoh fungsi dengan satu variabel adalah konversi sakal suhu
dari Celcius ke Fahrenheit, yang perhitungannya telah dilakukan
sebelumnya, yaitu berdasarkan persamaan (2.2)
def F( C) :
r et ur n ( 9. 0/ 5) *C + 32
Semua fungsi dalam Python dimulai dengan def, diikuti dengan
nama fungsi, dan kemudian di dalam kurung adalah
argumen/parameter fungsi. Jika argumen lebih dari satu, antar
argumen dibatasi dengan tanda koma. Pada contoh di atas hanya ada
satu argumen, yaitu C. Baris-baris perintah dalam fungsi harus ditulis
menjorok (indented). Pada akhir fungsi dituliskan r et ur n dan varibel
yang dihasilkan oleh fungsi itu.
Untuk menjalankan sebuah fungsi, kita harus memanggilnya.
Karena fungsi menghasilkan (return) sebuah nilai, kita harus
menyimpan nilai itu untuk penggunaan selanjutnya. Berikut ini
beberapa contoh.
>>> def F( C) :
r et ur n ( 9. 0/ 5) *C + 32

>>> a = 10
>>> F( a)
50. 0
>>> t emp = F( 15. 5)
>>> t emp
59. 900000000000006
>>> sum_t emp = F( 10) + F( 20)
>>> sum_t emp
118. 0
>>>
Pada contoh di atas, fungsi menghasilkan bilangan desimal
(float). Dengan sedikit perubahan, kita dapat menghasilkan variabel
string :
>>> def F2( C) :
ni l ai _F = ( 9. 0/ 5) *C + 32
r et ur n ' %. 1f der aj at Cel ci us sama dengan ' \
' %. 1f der aj at Fahr enhei t ' %( C, ni l ai _F)

>>> s1 = F2( 21)
>>> s1
24

' 21. 0 der aj at Cel ci us sama dengan 69. 8 der aj at
Fahr enhei t '
>>>
2.3.2 Variabel lokal dan variabel gobal
Pada fungsi F2(C), variabel nilai_F adalah variabel lokal, yang
hanya dikenali di dalam lingkup fungsi itu.
>>> c1 = 37. 5
>>> s2 = F2( c1)
>>> ni l ai _F

Tr aceback ( most r ecent cal l l ast ) :
Fi l e " <pyshel l #19>" , l i ne 1, i n <modul e>
ni l ai _F
NameEr r or : name ' ni l ai _F' i s not def i ned
>>>
Demikian juga variabel yang dijadikan argumen fungsi adalah
variabel lokal. Sedangkan variabel global adalah variabel yang dapat
diakses pada keseluruhan program.
>>> def F3( C) :
ni l ai _F = ( 9. 0/ 5) *C + 32
pr i nt ' Var i abel di dal am F3 : C=%s ni l ai _F=%s r =%s' %
( C, ni l ai _F, r )
r et ur n ' %. 1f der aj at Cel ci us sama dengan ' \
' %. 1f der aj at Fahr enhei t ' %( C, ni l ai _F)

>>> C = 60 # membuat var i abel gl obal
>>> r = 21 # var i abel gl obal
>>> s3 = F3( r )
Var i abel di dal amF3 : C=21 ni l ai _F=69. 8 r =21
>>> s3
' 21. 0 der aj at Cel ci us sama dengan 69. 8 der aj at
Fahr enhei t '
>>> C
60
>>> r
21
>>>
Pada contoh di atas, ada dua variabel C, yang satu lingkupnya
global (C = 60) dan yang satunya lokal (C = 21). Variabel r adalah
variabel global yang dikenal di dalam fungsi F3, dan di luar fungsi.
25

2.3.3 Fungsi dengan beberapa variabel (argumen)
Contoh fungsi dengan 2 argumen adalah seperti tertulis pada
persamaan (2.1), yaitu
=
2
0
1
( )
2
y t v t gt
>>> def yf unc( t , v0) :
g = 9. 81
r et ur n v0*t - 0. 5*g*t **2

>>> y = yf unc( 0. 1, 6)
>>> y
0. 55095
>>>
Pada fungsi di atas, variabel float g adalah variabel konstanta
lokal. Variabel t dan v0 juga variabel lokal. Beberapa cara
pemanggilan fungsi ditunjukkan pada perintah berikut.
>>> y = yf unc( 0. 1, v0=6)
>>> y
0. 55095
>>> y1 = yf unc( t =0. 1, v0=6)
>>> y1
0. 55095
>>> y2 = yf unc( v0=6, t =0. 1)
>>> y2
0. 55095
>>>
Semuanya memberikan hasil yang sama. Dengan memberikan
nama variabel dalam argumen fungsi akan memudahkan dalam
pembacaan baris-baris kode.
2.3.4 Variabel keluaran (hasil = return) yang lebih dari satu
Fungsi Python juga dapat menghasilkan lebih dari satu variabel.
Misalkan kita ingin menghitung y dan turunannya terhadap waktu
(kecepatan).
>>> def yf unc( t , v0) :
g = 9. 81
y = v0*t - 0. 5*g*t **2
dydt = v0 - g*t
r et ur n y, dydt

>>> posi si , kecepat an = yf unc( 0. 6, 3)
26

>>> posi si , kecepat an
( 0. 034199999999999786, - 2. 886)
>>>
Jika suatu fungsi menghasilkan dua nilai, kita juga harus
menyiapkan 2 variabel untuk menampung nilai keluaran, sebagai
contoh pada kode di atas, 2 variabel itu adalah : posisi dan kecepatan.
Dengan perintah penulisan berformat, kita dapat membuat tabel
yang rapi, yang menunjukkan tiap langkah perubahan t, posisi, dan
kecepatan.
>>> ni l ai _t = [ 0. 05*i f or i i n r ange( 10) ]
>>> f or t i n ni l ai _t :
posi si , kecepat an = yf unc( t , v0=5)
pr i nt ' t =%- 10g posi si =%- 10g kecepat an=%- 10g' %
( t , posi si , kecepat an)


t =0 posi si =0 kecepat an=5
t =0. 05 posi si =0. 237737 kecepat an=4. 5095
t =0. 1 posi si =0. 45095 kecepat an=4. 019
t =0. 15 posi si =0. 639638 kecepat an=3. 5285
t =0. 2 posi si =0. 8038 kecepat an=3. 038
t =0. 25 posi si =0. 943437 kecepat an=2. 5475
t =0. 3 posi si =1. 05855 kecepat an=2. 057
t =0. 35 posi si =1. 14914 kecepat an=1. 5665
t =0. 4 posi si =1. 2152 kecepat an=1. 076
t =0. 45 posi si =1. 25674 kecepat an=0. 5855
>>>
2.3.5 Fungsi tanpa nilai keluaran
Kadang diperlukan juga suatu fungsi yang hanya menjalankan
baris-baris perintah tanpa menghasilkan nilai keluaran. Misalkan kita
akan membuat tabel nilai pendekatan dan ralatnya dari penjumlahan
:
1
1
( ; )
1
i
n
i
x
L x n
i x
=
| |
=
|
+
\ .

(2.3)
Dapat ditunjukkan bahwa L(x;n) adalah pendekatan dari nilai
ln(1+x) untuk nilai n berhingga dan 1 x . Pendekatan itu menjadi
eksak untuk limit:
ln(1 ) lim ( ; ).
n
x L x n

+ =
Pertama, dibuat dulu fungsi L(x;n) :
f r ommat h i mpor t l og

27

def L( x, n) :
j uml ah = 0
f or i i n r ange( 1, n+1) :
j uml ah += ( 1. 0/ i ) *( x/ ( 1. 0+x) ) **i
ni l ai _j uml ah = j uml ah
suku_per t ama_yg_di abai kan = ( 1. 0/ ( n+1) ) *( x/ ( 1. 0+x) ) **( n+1)
exact _er r or = l og( 1+x) - ni l ai _j uml ah
r et ur n ni l ai _j uml ah, suku_per t ama_yg_di abai kan, exact _er r or
yang menghasilkan tiga variabel keluaran dan memerlukan 2
parameter (argumen) masukan, yaitu x dan n. Fungsi di atas
memerlukan fungsi log dari modul math, sehingga pada awal kode
harus diimport terlebih dahulu.
f r ommat h i mpor t l og
Selanjutnya, fungsi untuk membuat tabelnya adalah :
def t abel ( x) :
pr i nt ' \ nx=%g, l n( 1+x) =%g' %( x, l og( 1+x) )
f or n i n [ 1, 2, 10, 100, 500] :
ni l ai , ber i kut nya, er r or = L( x, n)
pr i nt ' n=%- 4d %- 10g ( suku ber i kut nya : %8. 2e ' \
' er r or : %8. 2e) ' %( n, ni l ai , ber i kut nya, er r or )
Terakhir, untuk memanggil fungsi tabel, dengan nilai x = 10 :
t abel ( 10)
Secara lengkap, keseluruhan programnya adalah sebagai berikut,
yang disimpan dengan nama fungsi.py.
f r ommat h i mpor t l og

def L( x, n) :
j uml ah = 0
f or i i n r ange( 1, n+1) :
j uml ah += ( 1. 0/ i ) *( x/ ( 1. 0+x) ) **i
ni l ai _j uml ah = j uml ah
suku_per t ama_yg_di abai kan =
( 1. 0/ ( n+1) ) *( x/ ( 1. 0+x) ) **( n+1)
exact _er r or = l og( 1+x) - ni l ai _j uml ah
r et ur n ni l ai _j uml ah, suku_per t ama_yg_di abai kan,
exact _er r or

def t abel ( x) :
pr i nt ' \ nx=%g, l n( 1+x) =%g' %( x, l og( 1+x) )
f or n i n [ 1, 2, 10, 100, 500] :
ni l ai , ber i kut nya, er r or = L( x, n)
pr i nt ' n=%- 4d %- 10g ( suku ber i kut nya : %8. 2e ' \
' er r or : %8. 2e) ' % ( n, ni l ai , ber i kut nya,
er r or )
28


t abel ( 10)
Hasil program :
>>>==========================RESTART========================
==
>>>

x=10, l n( 1+x) =2. 3979
n=1 0. 909091 ( suku ber i kut nya : 4. 13e- 01 er r or :
1. 49e+00)
n=2 1. 32231 ( suku ber i kut nya : 2. 50e- 01 er r or :
1. 08e+00)
n=10 2. 17907 ( suku ber i kut nya : 3. 19e- 02 er r or : 2. 19e-
01)
n=100 2. 39789 ( suku ber i kut nya : 6. 53e- 07 er r or : 6. 59e-
06)
n=500 2. 3979 ( suku ber i kut nya : 3. 65e- 24 er r or : 6. 22e-
15)
>>>
3 Regresi linear
Dalam eksperimen fisika, untuk menguji hubungan antara dua
variabel, y dan x, dilakukan dengan mengubah salah satu variabel,
disebut variabel bebas, biasanya x, kemudian mengukur variabel tak
bebas, y, sehingga diperoleh pasangan nilai (xi,yi) sebanyak N, yaitu
jumlah pengukuran yang telah dilakukan. Jika dari teori diketahui
bahwa hubungan antara x dan y adalah linear, maka dapat didekati
dengan persamaan
y = a + bx (3.1)
yang jika digambarkan dalam koordinat-xy akan berbentuk garis
lurus dengan titik potong pada sumbu-y bernilai a dan kemiringan b.
Nilai-nilai a dan byang terbolehjadi diperoleh dari titik-titik data
dengan metode kuadrat terkecil.
3.1 Metode kuadrat terkecil
Data-data hasil pengukuran (xi,yi) terdiri dari pasangan nilai
variabel bebas dan variabel tak bebas. Nilai-nilai a dan b dicari
sedemikian sehingga memperkecil perbedaan antara yi dengan nilai
y(xi) yang dihitung dengan persamaan (3.1). Untuk sembarang nilai a
dan b, dapat dihitung selisih (beda) antara nilai ukur (yi) dengan nilai
hitung (y(xi)) :
29

yi = yi y(xi) = yi a bx (3.2)
Dengan pemilihan parameter yang tepat, maka perbedaan itu
bisa relatif kecil. Jika semua nilai persamaan dijumlahkan, dan
masing-masing beda cukup kecil akan diperoleh hasil penjumlahan
yang kecil pula. Namun demikian, penjumlahan seluruh nilai (3.2)
tidak bisa dijadikan ukuran baik tidaknya pendekatan persamaan
garis lurus terhadap data-data eksperimen, karena bisa saja
perbedaan (3.2) ada yang bernilai positif cukup besar, dan ada yang
bernilai negatif cukup besar, dan jika dijumlahkan saling
menghilangkan. Untuk menghindari hal itu, bisa saja nilai (3.2)
diambil harga mutlaknya, namun penyelesaian analitiknya menjadi
sulit, maka dipilih untuk menjumlahkan (3.2) setelah dikuadratkan
lebih dulu.
Tidak ada satu metode untuk mengoptimalkan parameter yang
dapat berlaku untuk semua masalah, namun ada satu metode
sederhana yang sudah teruji secara eksperimental, yaitu metode
kuadrat terkecil. Metode ini bisa disebut sebagai kasus khusus dari
metode yang lebih umum, method of maximum likelihood, metode
kebolehjadian maksimum.
3.2 Metode kebolehjadian maksimum
Hasil pengukuran terdiri dari distribusi sampel yang dicuplik
dari distribusi induk yang menentukan ukuran kebolehjadian
memperoleh data-data pengukuran itu. Untuk distribusi induk,
didefinisikan parameter-parameter a0 dan b0, yang memberikan
hubungan sesungguhnya antara y dan x dalam bentuk persamaan
y0(x) = a0 + b0x (3.3)
Dengan menganggap bahwa distribusi induk berbentuk
Gaussian, maka kebolehjadian Pi untuk memperoleh nilai ukur yi
dengan deviasi standar i di sekitar nilai sesungguhnya y0(xi)
diberikan oleh persamaan
2
0
( ) 1 1
exp
2
2
i i
i
i
i
y y x
P



(

=
` (

)
(3.4)
Kebolehjadian memperoleh satu set pengukuran yang terdiri dari
sejumlah N nilai yi adalah hasil kali dari kebolehjadian tiap
pengukuran
30

2
0
0 0
1
( ) 1 1
( , ) exp
2
2
N
i i
i
i i
i
y y x
P a b P


=

| |
(

= = |
` (
|
\ .
)

(3.5)
Demikian juga, untuk setiap nilai parameter a dan b,
kebolehjadian memperoleh satu set hasil ukur adalah
2
1
( ) 1 1
( , ) exp
2
2
N
i i
i i
i
y y x
P a b


=

| |
(

= |
` (
|
\ .
)

(3.6)
dengan y(x) dihitung dari persamaan (1).
Karena perkalian dari faktor pertama pada persamaan (3.6)
adalah konstanta, tidak bergantung pada pemilihan a dan b, maka
memaksimumkan kebolehjadian P(a,b) sama dengan meminimumkan
jumlahan pangkat dari e pada persamaan (3.6). Jumlahan itu diberi
simbol
2
(chi kuadrat), yang didefisikan sebagai parameter goodness-
of-fit, ukuran baik-tidaknya fit,
( )
2 2
2
1 1
( ) 1
N N
i i
i i
i i i i
y y x
y a bx

= =
( (
= =
( (


(3.7)
Jadi metode untuk memperoleh nilai parameter a dan b yang
optimum adalah bagaimana meminimumkan jumlahan kuadrat pada
persamaan (3.7) (metode kuadrat terkecil).
3.3 Parameter a dan b
Untuk memperoleh parameter a dan b yang optimum, persamaan
(3.7) didife-rensialkan masing-masing terhadap a dan b kemudian
disamakan dengan nol karena nilai persamaan (3.7) minimum.
Diperoleh dua persamaan simultan dengan dua besaran tidak
diketahui, yang dapat diselesaikan dengan metode determinan,
diperoleh (Bevington, 1980) :
31

2
2 2 2 2
2 2 2 2
2
2
2 2 2
1
1 1
1
i i i i i
i i i i
i i i i
i i i i
i i
i i i
x y x x y
a
x y x y
b
x x



| |
=
|
|

\ .
| |
=
|
|

\ .
| |
=
|
|
\ .



(3.8)
dengan perkiraan ketidakpastian masing-masing sebesar
2
2
2
2
2
1
1 1
i
a
i
b
i
x

(3.9)
3.4 Goodness-of-fit
Metode kuadrat terkecil didasarkan pada hipotesis bahwa fit
(pencocokan data) yang optimum adalah yang meminimumkan
jumlahberbobot dari seluruh besar simpangan datayiterhadap nilai
hasil fity(xi). Besar jumlahan tersebut dicirikan oleh variansi s
2
, yang
merupakan perkiraan terhadap variansi hasil ukur
2
. Untuk fungsi
y(xi) yang linear dalam m parameter dan dicocokkan pada sejumlah N
titik data,
( )
( )
2
2
2
2
1
1
1 1
i i
i
i
y y x
s
N m
N

| |

(
` |

\ . )
=
| |
|
\ .

(3.10)

Jika persamaan (7) disubstitusikan ke persamaan (3.10)
diperoleh
( )
2
2
2
1
1 1
i
s
N m
N

=
| |
|
\ .


yang dapat dituliskan menjadi
32

2 2
2
i
s

=
dengan
2
i
adalah rata-rata berbobot dari variansi individuil,
dan N m = adalah derajat kekebasan dari N data dengan m
parameter.
Nilai
2
2

=
(3.11)

disebut chi-kuadrat tereduksi.
Jika fungsi pencocokan data yang diperoleh merupakan
pendekatan yang baik pada distribusi induk, maka nilai s
2
merupakan
perkiraan yang baik terhadap variansi distribusi induk
2
, dan nilai
chi-kuadrat tereduksi akan mendekati 1. Jadi untuk menguji apakah
hasil fit cocok untuk menggambarkan distribusi data, maka dihitung
chi-kuadrat tereduksi, dan apakah nilainya dekat dengan 1. Hasil fit
yang tidak cocok untuk menggambarkan titik-titik data akan
menyebabkan nilai chi-kuadrat tereduksi yang besar, jauh lebih besar
dari 1. Tetapi nilai chi-kuadrat tereduksi yang kecil dari satu tidak
otomatis menunjukkan kecocokan fit dengan data, namun hanya
merupakan konsekuensi dari kenyataan adanya ketidakpastian dalam
menentukan s
2
, dan nilai chi-kuadrat tereduksi akan berfluktuasi
pada tiap hasil eksperimen.
Jadi selama diperoleh nilai chi-kuadrat tereduksi yang tidak jauh
lebih besar dari 1, ada harapan bahwa fungsi pencocokan data bisa
digunakan, atau sesuai untuk menggambarkan distribusi data hasil
eksperimen. Diperlukan pengujian yang lebih lanjut, yaitu dengan
distribusi kebolehjadian chi-kuadrat tereduksi sebagai fungsi dari
derajat kebebasan. Namun pengujian itu tidak dibahas dalam tulisan
ini. Pembahasan yang memadai dapat dibaca dalam buku yang diacu
(Bevington, 1980).
3.5 Koefisien korelasi
Dengan metode regresi linear diperoleh parameter a dan b yang
merupakan parameter untuk persamaan garis linear y = a + bx
sebagai garis terbaik yang menggambarkan hubungan antara variabel
bebas x dengan variabel tak bebas y. Namun tentu saja kita tidak bisa
33

begitu saja menyimpulkan bahwa hubungan antara x dan y adalah
linear, karena regresi linear bisa diterapkan pada sembarang set hasil
ukur, dan pasti memberikan hasil berupa paramater a dan b. Kita
memerlukan suatu tolok ukur yang lain, yang tidak bergantung pada
hasil regresi linear, namun hanya bergantung pada nilai-nilai variabel
x dan y untuk menguji apakah ada korelasi linear antara keduanya.
Tolok ukur tersebut adalah koefisien korelasi linear. Untuk sebanyak
N set data hasil ukur (xi,yi), didefinisikan koefisien korelasi linear
(Bevington, 1980) :
( ) ( )
1 1
2 2 2 2
2 2
i i i i
i i i i
N x y x y
r
N x x N y y

( (

( (

(3.12)
Nilai r berada pada daerah antara 0 sampai 1. Nilai 0 berarti
tidak ada hubungan linear sama sekali, dan nilai 1 berarti hubungan
antarax dan y adalah linear.
4 Implementasi
4.1 Membaca file data
Data-data hasil eksperimen disimpan dalam file teks yang terdiri
dari beberapa baris yang menyatakan jumlah pengukuran dan terdiri
dari 3 kolom. Kolom pertama untuk data variabel bebas (x), kolom
kedua untuk variabel terukur, atau variabel tak bebas (y) dan kolom
ketiga untuk ketidakpastian pada variabel hasil ukur (y). Ralat, atau
ketidakpastian pada variabel bebas (x) diabaikan.
Sebagai contoh, digunakan data-data pada soal nomor 6.5dari
buku Data Reduction and Error Analysis for Physical Sciences
(Bevington, 1980).
6.5. A student hangs masses on a spring and measures the springs
extension as a function of the applied force in order to find the
spring constant k. Her measurements are :

Mass (kg) 200 300 400 500 600 700 800 900
Extension
(cm)
5.1 5.5 5.9 6.8 7.4 7.5 8.6 9.4

There is an uncertainty of 0.2 in each measurement of extension.
The uncertainty in the masses is negligible. For a perfect spring,
the extension L of the spring will be related to the applied force
by the relation kL = F, where F = mg and L = L L0, and L is
34

the unstretched length of the spring. Use these data and the
method of least squares to fing the spring constant k, and the
unstretched length of the spring L0, and their uncertainties. Find

2
for the fit and the associated probability.
Data-data dalam soal ditulis kembali dengan editor teks
(notepad) dengan format seperti yang diinginkan untuk program yang
akan dibuat, kemudian disimpan dengan nama : data.txt.
200 5. 1 0. 2
300 5. 5 0. 2
400 5. 9 0. 2
500 6. 8 0. 2
600 7. 4 0. 2
700 7. 5 0. 2
800 8. 6 0. 2
900 9. 4 0. 2
Antara kolom-kolom angka dipisahkan dengan sekali ketuk
spacebar. Sebelum menuliskan program, perintah-perintah dicoba
lebih dulu dalam jendela IDLE (Python shell). Dengan cara interaktif
seperti ini, maka sebaiknya file yang berisi data-data eksperimen
disimpan ke dalam folder yang sama dengan IDLE yang digunakan.
Dalam pemrograman ini digunakan Python versi 2.7, maka file
data.txt disimpan dalam folder : C: \ Pyt hon27.
Perintah untuk membuka (menyiapkan) file untuk dibaca (read)
adalah :
>>> f i l edat a = open( ' dat a. t xt ' , ' r ' )
Argumen string pertama adalah nama file jika file berada dalam
folder yang sama dengan IDLE. Jika berada di folder yang lain,
argumen ini berisi path yang lengkap di mana file itu berada.
Argumen string kedua adalah kode operasi terhadap file yang dibuka,
apakah akan dibaca isinya, r ead = ' r ' , atau akan ditulisi, wr i t e =
' w' .
Jika setelah perintah di atas diisikan dan diakhiri dengan Enter,
lalu muncul kesalahan, berarti file yang akan dibuka tidak
diketemukan. Cara yang mudah untuk mengatasinya adalah dengan
cara menyalin file yang akan dibuka ke folder yang sama dengan
IDLE.

Setelah dibuka, isi file dibaca dan ditampilkan baris per baris :
35

>>> f or bar i s i n f i l edat a:
pr i nt bar i s


200 5. 1 0. 2

300 5. 5 0. 2

400 5. 9 0. 2

500 6. 8 0. 2

600 7. 4 0. 2

700 7. 5 0. 2

800 8. 6 0. 2

900 9. 4 0. 2
>>>
Perintah pertama :
>>> f or bar i s i n f i l edat a:
adalah untuk membaca isi file baris per baris dan menyimpannya
ke dalam variabel stringbar i s. Setelah perintah loop for harus
diakhiri dengan titik dua, kemudian tekan Enter, dan dituliskan
perintah yang dijalankan dalam loop : print baris, kemudian Enter 2
kali. Karena Python menggunakan simbol titik (.) untuk menandai
bilangan desimal (float), maka data-data juga disimpan dengan simbol
titik untuk bilangan desimal.
Tiap baris dalam file data terdiri dari tiga kolom yang
menyatakan tiga data, x, y dan e (ralat dalam y). Tiga data ini harus
dipisahkan agar diperoleh masing-masing nilai x, y dan e. Seperti telah
disinggung sebelumnya bahwa isi file data disimpan ke dalam variabel
stringbar i s. Pada perintah yang terakhir, isi variabel ini adalah baris
terakhir dalam file, yaitu ' 900 9. 4 0. 2' .
>>> pr i nt bar i s
900 9. 4 0. 2
>>>
Data-data pada kolom dipecah dengan perintah :
>>> dat anya = bar i s. spl i t ( )
>>>
36

Dengan perintah di atas, maka string baris dipecah dengan
karakter pemisah (whitespace) karakter kosong (spasi = spacebar), dan
disimpan ke dalam variabel dat anya. Tipe dari variabel dat anya
adalah l i st .
>>> t ype( dat anya)
<t ype ' l i st ' >
>>>
Variabel list fungsinya sama dengan array, dengan tiap anggota,
atau elemen ditandai dengan indeks, mulai dari angka 0.
>>> dat anya
[ ' 900' , ' 9. 4' , ' 0. 2' ]
>>> dat anya[ 0]
' 900'
>>> dat anya[ 1]
' 9. 4'
>>> dat anya[ 2]
' 0. 2'
>>>
Dengan demikian data-data x, y dan e sudah terpisah, dengan x
memiliki indeks 0, y dengan indeks 1 dan e dengan indeks 2.
4.2 Memformat dan memplot data
Data-data yang sudah dipisahkan masih bertipe string,
sedangkan untuk dapat diolah harus berupa variabel angka. Jadi tiap
data diubah lebih dulu menjadi variabel angka, dalam hal ini berupa
variabel desimal (float).
>>> x = f l oat ( dat anya[ 0] )
>>> y = f l oat ( dat anya[ 1] )
>>> e = f l oat ( dat anya[ 2] )
>>> x, y, e
( 900. 0, 9. 4, 0. 2)
>>>
Dengan demikian diperoleh data-data x, y dan e yang bisa diolah
dengan operasi-operasi matematik, khususnya persamaan-persamaan
untuk metode kuadrat terkecil untuk garis lurus.
Pada perintah di atas hanya ada satu set data yang diperoleh
dari satu baris dalam file data. Untuk memperoleh seluruh set data
hasil pengukuran, maka perintah dijalankan dalam sebuah loop for
seperti yang telah disinggung di depan. Supaya nilai-nilai data dapat
diolah satu persatu, maka tiap set data, untuk x, y dan e disimpan
37

dalam variabel l i st . Isi dari varibel list, yaitu elemen di dalamnya
dapat ditambah, dengan perintah
nama_var i abel _l i st . append( dat a_bar u) . Jadi, pertama buat
variabel list yang kosong, kemudian tiap iterasi ditambah dengan set
data baru yang dibaca dari file data.
>>> dat ax=[ ] ; dat ay=[ ] ; dat ae=[ ]
>>> f i l edat a = open( ' dat a. t xt ' , ' r ' )
>>> f or bar i s i n f i l edat a:
dat anya = bar i s. spl i t ( )
x = f l oat ( dat anya[ 0] )
dat ax. append( x)
y = f l oat ( dat anya[ 1] )
dat ay. append( y)
e = f l oat ( dat anya[ 2] )
dat ae. append( e)


>>> dat ax
[ 200. 0, 300. 0, 400. 0, 500. 0, 600. 0, 700. 0, 800. 0,
900. 0]
>>> dat ay
[ 5. 1, 5. 5, 5. 9, 6. 8, 7. 4, 7. 5, 8. 6, 9. 4]
>>> dat ae
[ 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 2]
>>>
Pasangan data x, y dan e masing-masing sudah tersimpan dalam
variabel list. Titik-titik data (x,y) dapat digambarkan dengan modul
matplotlib.
>>> i mpor t mat pl ot l i b. pypl ot as pl t
>>> pl t . pl ot ( dat ax, dat ay, ' ko' )
[ <mat pl ot l i b. l i nes. Li ne2D obj ect at 0x022D0970>]
>>>
Jika setelah perintah import muncul peringatan kesalahan,
berarti modul matplotlib belum terinstall, maka harus diinstall lebih
dulu. Parameter ' ko' pada perintah plot adalah untuk
menggambarkan titik data berbentuk lingkaran dengan warna hitam
(black = ' k' ). Setelah perintah plot, gambar belum ditampilkan,
hanya diberikan lokasi memori tempat plot itu disimpan. Untuk
menampilkan gambar diberikan perintah :
>>> pl t . show( )
38


Gambar 3.1 Plot titik-titik data
Gambar 3.1 menampilkan hasil plot. Untuk kembali ke jendela
IDLE, tampilan (jendela) Figure 1 harus ditutup. File yang sedang
dibuka harus ditutup setelah selesai digunakan.
>>> f i l edat a
<open f i l e ' dat a. t xt ' , mode ' r ' at 0x00CA7E38>
>>> f i l edat a. cl ose( )
>>> f i l edat a
<cl osed f i l e ' dat a. t xt ' , mode ' r ' at 0x00CA7E38>
>>>
4.3 Fungsi untuk membuka file, membaca, mengolah dan
memplot data
Untuk keperluan pemrograman, proses membuka file, mambaca
data, mengolah data, menampilkan, memplot data dan menutup file
disatukan dalam sebuah fungsi. Sebuah fungsi memerlukan satu atau
lebih parameter masukan, dan akan menghasilkan satu atau beberapa
variabel. Pada fungsi yang akan dibuat, parameter masukan adalah
nama file data, sedangkan variabel keluaran adalah : datax, datay,
datae, dengan di dalamnya disisipkan perintah untuk menampilkan
(pr i nt ), dan memplot data. Fungsi dibuat pada jendela editor IDLE
yang baru (pada menu IDLE : FileNew Window).
i mpor t mat pl ot l i b. pypl ot as pl t

39

def bacaf i l edat a( dat af i l e) :
f i l edat a = open( dat af i l e, ' r ' )
dat ax = [ ] ; dat ay = [ ] ; dat ae = [ ] ; i = 0
f or bar i s i n f i l edat a:
i +=1
dat anya = bar i s. spl i t ( )
x = f l oat ( dat anya[ 0] )
dat ax. append( x)
y = f l oat ( dat anya[ 1] )
dat ay. append( y)
e = f l oat ( dat anya[ 2] )
dat ae. append( e)
pr i nt ' x = %5. 2f y = %5. 2f e = %5. 2f ' % ( x, y,
e)

f i l edat a. cl ose( )
j uml ahdat a = i
pr i nt ' J uml ah dat a = ' , j uml ahdat a
pl t . gr i d( Tr ue)
pl t . pl ot ( dat ax, dat ay, ' ko' )
pl t . er r or bar ( dat ax, dat ay, xer r =None, yer r =dat ae,
f mt = ' ' )
pl t . show( )
r et ur n j uml ahdat a, dat ax, dat ay, dat ae

j uml ahdat a, dat ax, dat ay, dat ae =
bacaf i l edat a( ' dat a. t xt ' )
Program di atas disimpan dengan nama bacaf i l e. py dalam
folder yang sama dengan file dat a. t xt .
Perintah baris terakhir adalah menjalankan fungsi
bacaf i l edat a dengan paramater masukan ' dat a. t xt ' dan variabel
keluaran j uml ahdat a, dat ax, dat ay, dan dat ae. Selain
menghasilkan variabel-variabel tersebut, juga menampilkan plot data
dengan batang ralatnya.
40


Gambar 3.2 Plot titik data dengan batang ralat
Perintah memplot data juga dapat (sebaiknya) dibuat dalam satu
fungsi yang terpisah, dengan parameter masukan : dat ax, dat ay
dan dat ae, tanpa variabel keluaran.
def gambar ( x, y, e) :
pl t . gr i d( Tr ue)
pl t . pl ot ( x, y, ' ko' )
pl t . er r or bar ( x, y, xer r =None, yer r =e, f mt = ' ' )
pl t . show( )
dan perintah bagian akhir dari program bacafile.py diubah
menjadi :
j uml ahdat a, dat ax, dat ay, dat ae =
bacaf i l edat a( ' dat a. t xt ' )
gambar ( dat ax, dat ay, dat ae)
Variabel-variabel keluaran j uml ahdat a, dat ax, dat ay dan
dat ae akan digunakan dalam perhitungan regresi linear.
41

4.4 Fungsi untuk regresi linear
Fungsi regresi linear yang akan dibuat memerlukan parameter
masukan berupa data-data nilai x, y dan e (simbol pada persamaan 8
dan 9) dan variabel keluaran a, b, a, danb.
Karena banyaknya proses penjumlahan, diperlukan variabel
untuk menampung penjumlahan itu, yang ditunjukkan pada Gambar
berikut.

Fungsi regresilinear :
def r egr esi l i near ( x, y, e) :
sum1=0. 0; sum2=0. 0; sum3=0. 0; sum4=0. 0; sum5=0. 0
f or i i n r ange( 0, j uml ahdat a) :
sum1=sum1+( x[ i ] **2/ e[ i ] **2)
sum2=sum2+( y[ i ] / e[ i ] **2)
sum3=sum3+( x[ i ] / e[ i ] **2)
sum4=sum4+( x[ i ] *y[ i ] ) / e[ i ] **2
sum5=sum5+1/ e[ i ] **2
#hi t ung det er mi nan
det = ( sum5*sum1) - sum3**2
#par amet er a dan b
a = ( ( sum1*sum2) - ( sum3*sum4) ) / det
b = ( ( sum5*sum4) - ( sum3) *( sum2) ) / det
#r al at
si gmaa2 = sum1/ det
si gmab2 = sum5/ det
si gmaa = sqr t ( si gmaa2)
si gmab = sqr t ( si gmab2)

r et ur n a, b, si gmaa, si gmab
Pada fungsi di atas, diperlukan perhitungan akar pangkat dua
(sqrt), pada saat menghitung sigmaa dan sigmab. Fungsi sqrt ini
berada di dalam modul math yang harus diimport lebih dulu sebelum
42

digunakan. Modul math merupakan bawaan Python, sehingga tidak
perlu mencari dan mengunduhnya. Jadi pada baris setelah
mengimport matplotlib, dituliskan :
f r ommat h i mpor t sqr t
Untuk menguji fungsi regresilinear, ditambahkan perintah pada
baris akhir program bukafile.py (pada perintah gambar diberi tanda
komentar, karena tampilan gambar tidak diperlukan untuk saat ini).
j uml ahdat a, dat ax, dat ay, dat ae = bacaf i l edat a( ' dat a. t xt ' )
#gambar ( dat ax, dat ay, dat ae)
a, b, si gmaa, si gmab = r egr esi l i near ( dat ax, dat ay, dat ae)
pr i nt ' a= %8. 6f b= %8. 6f si gmaa= %8. 6f si gmab= %8. 6f ' % ( a,
b, si gmaa, si gmab)
Hasil jalannya program :
x = 200. 00 y = 5. 10 e = 0. 20
x = 300. 00 y = 5. 50 e = 0. 20
x = 400. 00 y = 5. 90 e = 0. 20
x = 500. 00 y = 6. 80 e = 0. 20
x = 600. 00 y = 7. 40 e = 0. 20
x = 700. 00 y = 7. 40 e = 0. 20
x = 800. 00 y = 8. 60 e = 0. 20
x = 900. 00 y = 9. 40 e = 0. 20
J uml ah dat a = 8
a= 3. 692857 b= 0. 006036 si gmaa= 0. 183874 si gmab=
0. 000309
Jadi berhasil diperoleh parameter-parameter regresi linear
bersama dengan ketidakpastiannya masing-masing. Parameter-
parameter tersebut selanjutnya digunakan untuk menggambarkan
grafik hasil fit linear.
4.5 Plot data hasil regresi linear
Fungsi gambar yang telah dibuat hanya untuk menggambarkan
titik-titik data dengan ketidakpastiannya. Setelah diperoleh
parameter-parameter regresi linear, perlu digambarkan garis hasil fit,
yang dianggap sebagai garis terbaik yang melewati titik-titik data.
Oleh karena itu dibuat fungsi untuk menggambarkan grafik hasil fit.
Garis hasil fit tidak lain adalah garis linear dari persamaan (3.1).
Nilai x dipilih dinaikkan dari nilai x minimum (atau mulai dari 0 jika
menginginkan titik potong diperlihatkan) sampai maksimum dengan
interval kenaikan yang dapat dipilih. Kemudian pada tiap nilai itu
43

dihitung nilai y dengan persamaan (3.1) dengan parameter a dan b
hasil regresi linear.
Jadi ditentukan dulu range untuk x, diberi nama xfit :
xf i t = np. ar ange( 0, max( dat ax) +100, 1)
Pada perintah di atas digunakan modul numpy (Numerical
Python) untuk membuat suatu array mulai dari 0 sampai nilai data-x
maksimum dengan interval kenaikan 1. Untuk dapat menggunakan
modul numpy, harus diimport lebih dahulu.
i mpor t numpy as np
Kemudian dibuat fungsi plot hasil regresi linear :
def pl ot r egr esi ( x, a, b) :
f or i i n r ange( 0, l en( x) ) :
y = a + b*x
pl t . pl ot ( x, y)
Pada fungsi di atas memerlukan tiga parameter masukan, yaitu
x, a dan b, dan tanpa variabel keluaran. Fungsinya hanya untuk
menggambarkan garis. Titik-titik data juga ditampilkan dengan
menjalankan fungsi gambar ( x, y, e) . Karena perintah pl t . show( )
sudah dituliskan pada fungsi gambar ( x, y, e) , maka fungsi
pl ot r egr esi ( x, a, b) dijalankan lebih dulu.
xf i t = np. ar ange( 0, max( dat ax) +100, 1)
pl ot r egr esi ( xf i t , a, b)
gambar ( dat ax, dat ay, dat ae)
Hasil jalannya program :
44


Gambar 3.3 Garis hasil fit linear
Langkah berikutnya adalah menggambarkan ketidakpastian
garis, berupa dua garis dengan gradien maksimum dan minimum.
Nilai gradien maksimum diperoleh dari b + b dan gradien minimum
diperoleh dari b b. Untuk garis dengan gradien maksimum, titik
potongnya minimum, a a , sedangkan untuk garis dengan gradien
minimum, titik potongnya maksimum, a + a. Jadi persamaan untuk
garis maksimum adalah
( ) ( )
( )
a b
y x a b x = + +
dan persamaan garis minimum :
( )
( ) ( )
a b
y x a b x = + +
yang dituliskan dalam sebuah fungsi :
def f i t pl ot er r or ( x, a, b) :
f or i i n r ange( 0, l en( x) ) :
y = a + b*x
pl t . pl ot ( x, y, ' g' , l i nest yl e=' - - ' )
45

hampir sama dengan fungsi plotregresi, namun dengan warna
yang beda, gr een = ' g' , dan dengan format garis berupa garis
putus-putus. Parameter masukan juga sama, yaitu x, a, dan b. Untuk
membuat garis yang berbeda, tinggal mengganti a dan b dengan nilai
yang sesuai. Perintahnya adalah :
xf i t = np. ar ange( 0, max( dat ax) +100, 1)
pl ot r egr esi ( xf i t , a, b)
f i t pl ot er r or ( xf i t , a- si gmaa, b+si gmab)
f i t pl ot er r or ( xf i t , a+si gmaa, b- si gmab)
gambar ( dat ax, dat ay, dat ae)
Hasil program :

Gambar 3.4 Garis bantu (ketidakpastian)
4.6 Goodnes-of-fit, chi-kuadrat
Nilai
2
dihitung dengan persamaan (3.7), dan chi-kuadrat
tereduksi dengan persamaan (3.11) yang dituliskan dalam sebuah
fungsi dengan parameter masukan data-data pengukuran xi, yi, ei, a
dan b, dan variabel keluaran
2
(chi 2).
def chi kuadr at ( x, y, e, a, b) :
chi 2 = 0
f or i i n r ange( 0, j uml ahdat a) :
chi 2 +=( ( y[ i ] - a- b*x[ i ] ) / e[ i ] ) **2
chi 2t er eduksi = chi 2/ ( l en( x) - 2)
r et ur n chi 2t er eduksi
46

Perintah untuk menjalankan fungsi chi kuadr at ( x, y, e, a, b) :
chi _kuadr at = chi kuadr at ( dat ax, dat ay, dat ae, a, b)
pr i nt ' chi kuadr at = %. 2f ' %( chi _kuadr at )
Hasil program :
chi kuadr at = 1. 02
Diperoleh nilai chi-kuadrat tereduksi yang mendekati 1, berarti
ada kebolehjadian yang besar bahwa fungsi linear hasil fit cocok untuk
menggambarkan data-data eksperimen. Ulasan yang lengkap terdapat
dalam buku (Bevington, 1980).
4.7 Sedikit dekorasi
Tampilan pada Gambar 3.4 sudah memberikan apa yang
diinginkan, yaitu grafik hasil eksperimen dengan garis terbaik dan
dua garis bantu (cara yang umum dilakukan di Laboratorium Fisika
Dasar). Dengan Gambar itu mahasiswa bisa terbantu untuk membuat
sendiri grafiknya dengan tangan (suatu kemampuan yang diharuskan
dimiliki oleh praktikan).
Namun Gambar tersebut masih kurang lengkap. Belum ada label
untuk sumbu-sumbu, belum ada judul, dan legend. Skala pada sumbu
juga masih otomatis. Beberapa langkah berikut ini menambahkan
label pada tiap sumbu, menambahkan judul dan menambahkan
legenda.
def gambar ( x, y, e) :
pl t . gr i d( Tr ue)
pl t . t i t l e( ' Gr af i k massa beban vs per t ambahan panj ang pegas' )
pl t . xl abel ( ' massa beban ( gr am) ' )
pl t . yl abel ( ' per t ambahan panj ang ( cm) ' )
pl t . l egend( l oc=' upper l ef t ' )
pl t . pl ot ( x, y, ' ko' )
pl t . er r or bar ( x, y, xer r =None, yer r =e, f mt = ' ' )
pl t . show( )
Hasil program :
47


Gambar 3.5 Tampilan grafik dengan label dan judul
4.8 Interaktif
Gambar terakhir yang dihasilkan oleh program sudah lengkap
dengan label pada sumbu, judul grafik dan legenda. Demikian juga,
file data yang dibuka dan digambarkan hanya file yang sama, yaitu
data.txt. Supaya fleksibel, ada interaksi dengan pengguna, maka
nama file, label pada sumbu dan judul grafik diisikan oleh pengguna.
Masukan dari pengguna ditampung dalam sebuah fungsi, yang
diberi nama inisialisasi :
def i ni si al i sasi ( ) :
namaf i l e = r aw_i nput ( ' Fi l e yang akan di baca? ' )
sumbux = r aw_i nput ( ' Nama sumbu X ? ' )
sumbuy = r aw_i nput ( ' Nama sumbu Y ? ' )
j udul = r aw_i nput ( ' J udul gr af i k ? ' )
r et ur n namaf i l e, sumbux, sumbuy, j udul
Fungsi di atas tidak memerlukan argumen, atau parameter
masukan, namun menghasilkan 4 variabel string. Jika dijalankan,
hasil programnya ditunjukkan berikut ini.
48


Gambar 3.6 Tampilan Python Shell (IDLE) saat menjalankan (run)
program bacaf i l e. py
Ada dua tampilan hasil program, yaitu tampilan interaksi dengan
user, angka-angka data dan hasil-hasil perhitungan regresi linear, dan
tampilan grafiknya pada jendela matplotlib.
Grafik yang ditampilkan pada jendela matplotlib dapat disimpan
ke dalam file gambar dengan mengklik ikon disket. Bisa juga langsung
didimpan dengan baris perintah : plt.saveimage(namafile), namun
karena kita ingin memilih grafik tertentu yang ingin disimpan, maka
lebih baik menyimpannya melalui jendela matplotlib.


49


Gambar 3.7 Tampilan grafik
5 Penutup
Sampai dengan hasil program yang terakhir, dapat dikatakan
bahwa telah berhasil dibuat program analisis data eksperimen
(Praktikum Fisika Dasar) menggunakan bahasa pemrograman
Python. Apa yang telah dibuat ini masih bagian yang sangat kecil dari
kemampuan bahasa Python.

50

6. Referensi/Daftar bacaan
Bevington, Philip R., and D. Keith Robinson, 1980, Data Reduction and
Error Analysis for the Physical Sciences, third edition, Mc-Graw
Hill Companies, Inc, New York
Langtangen, Hans P., 2009, A Primer on Scientific Programming With
Python, Springer-Verlag, Berlin

51

7 Lampiran (source kode)
#=================================================================
i mpor t mat pl ot l i b. pypl ot as pl t
f r ommat h i mpor t sqr t
i mpor t numpy as np

def i ni si al i sasi ( ) :
namaf i l e = r aw_i nput ( ' Fi l e yang akan di baca? ' )
sumbux = r aw_i nput ( ' Nama sumbu X ? ' )
sumbuy = r aw_i nput ( ' Nama sumbu Y ? ' )
j udul = r aw_i nput ( ' J udul gr af i k ? ' )
r et ur n namaf i l e, sumbux, sumbuy, j udul

def bacaf i l edat a( dat af i l e) :
f i l edat a = open( dat af i l e, ' r ' )
dat ax = [ ] ; dat ay = [ ] ; dat ae = [ ] ; i = 0
f or bar i s i n f i l edat a:
i +=1
dat anya = bar i s. spl i t ( )
x = f l oat ( dat anya[ 0] )
dat ax. append( x)
y = f l oat ( dat anya[ 1] )
dat ay. append( y)
e = f l oat ( dat anya[ 2] )
dat ae. append( e)
pr i nt ' x = %5. 2f y = %5. 2f e = %5. 2f ' %( x, y, e)

f i l edat a. cl ose( )
j uml ahdat a = i
pr i nt ' J uml ah dat a = ' , j uml ahdat a
r et ur n j uml ahdat a, dat ax, dat ay, dat ae

def gambar ( x, y, e) :
pl t . gr i d( Tr ue)
pl t . t i t l e( j udul )
pl t . xl abel ( sumbux)
pl t . yl abel ( sumbuy)
pl t . l egend( l oc=' upper l ef t ' )
pl t . pl ot ( x, y, ' ko' )
pl t . er r or bar ( x, y, xer r =None, yer r =e, f mt = ' ' )
pl t . show( )

def r egr esi l i near ( x, y, e) :
sum1=0. 0; sum2=0. 0; sum3=0. 0; sum4=0. 0; sum5=0. 0
f or i i n r ange( 0, j uml ahdat a) :
sum1=sum1+( x[ i ] **2/ e[ i ] **2)
sum2=sum2+( y[ i ] / e[ i ] **2)
sum3=sum3+( x[ i ] / e[ i ] **2)
sum4=sum4+( x[ i ] *y[ i ] ) / e[ i ] **2
sum5=sum5+1/ e[ i ] **2
#hi t ung det er mi nan
det = ( sum5*sum1) - sum3**2
#par amet er a dan b
a = ( ( sum1*sum2) - ( sum3*sum4) ) / det
b = ( ( sum5*sum4) - ( sum3) *( sum2) ) / det
52

si gmaa2 = sum1/ det
si gmab2 = sum5/ det
si gmaa = sqr t ( si gmaa2)
si gmab = sqr t ( si gmab2)

r et ur n a, b, si gmaa, si gmab

def pl ot r egr esi ( x, a, b) :
f or i i n r ange( 0, l en( x) ) :
y = a + b*x
pl t . pl ot ( x, y, l abel =' Hasi l f i t ' )

def f i t pl ot er r or ( x, a, b) :
f or i i n r ange( 0, l en( x) ) :
y = a + b*x
pl t . pl ot ( x, y, ' g' , l i nest yl e=' - - ' )

def chi kuadr at ( x, y, e, a, b) :
chi 2 = 0
f or i i n r ange( 0, j uml ahdat a) :
chi 2 +=( ( y[ i ] - a- b*x[ i ] ) / e[ i ] ) **2
chi 2t er eduksi = chi 2/ ( l en( x) - 2)
r et ur n chi 2t er eduksi

def kor el asi ( x, y) :
sum1 = 0; sum2 = 0; sum3 = 0; sum4 = 0; sum5 = 0
f or i i n r ange( 0, l en( x) ) :
sum1 += x[ i ] *y[ i ]
sum2 += x[ i ]
sum3 += y[ i ]
sum4 += x[ i ] **2
sum5 += y[ i ] **2
r 1 = l en( x) *sum1 - sum2*sum3
r 2 = sqr t ( ( l en( x) *sum4 - sum2**2) *( l en( x) *sum5 - sum3**2) )
r = r 1/ r 2
r et ur n r

namaf i l e, sumbux, sumbuy, j udul = i ni si al i sasi ( )

j uml ahdat a, dat ax, dat ay, dat ae = bacaf i l edat a( namaf i l e)

r = kor el asi ( dat ax, dat ay)
pr i nt ' Koef i si en kor el asi = %. 2f ' %( r )

a, b, si gmaa, si gmab = r egr esi l i near ( dat ax, dat ay, dat ae)
pr i nt ' a= %8. 6f b= %8. 6f si gmaa= %8. 6f si gmab= %8. 6f ' % ( a, b,
si gmaa, si gmab)
chi _kuadr at = chi kuadr at ( dat ax, dat ay, dat ae, a, b)
pr i nt ' chi kuadr at = %. 2f ' %( chi _kuadr at )

xf i t = np. ar ange( 0, max( dat ax) +1, 1)
pl ot r egr esi ( xf i t , a, b)
f i t pl ot er r or ( xf i t , a- si gmaa, b+si gmab)
f i t pl ot er r or ( xf i t , a+si gmaa, b- si gmab)
gambar ( dat ax, dat ay, dat ae)
#=================================================================

Anda mungkin juga menyukai