Anda di halaman 1dari 9

2 GERAKAN PENDULUM SEDERHANA

Praktik ini memperkenalkan yang berikut:

• Persamaan gerak bandul sederhana.


• Solusi numerik dari persamaan diferensial menggunakan metode Runge-Kutta .
• Menulis data keluaran ke file dalam pemrograman C.
• Menggunakan GNUPLOT untuk membuat grafik dari file data.

2.1 Pendulum Sederhana

s
L singgung
θ
mg

Persamaan gerak (hukum kedua Newton) untuk pendulum adalah

d 2 dtk d 2θ
dt 2 = L dt 2 = - g sinθ (1)
di mana bob bergerak pada busur lingkaran berjari-jari L, s sejajar dengan
garis singgung busur ini ketika perpindahan sudut bob dari posisi
kesetimbangannya adalah θ, dan −g sin θ adalah komponen percepatan
karena gravitasi ke arah s. (NB Arah s positif dipilih untuk menjauhi posisi
kesetimbangan, ke arah yang membuat θ meningkat.)

Untuk sudut kecil sin θ ≈ θ, dan persamaan (1) dapat didekati dengan

d 2θ g
2
dt =- Lθ (2)

Ini adalah versi linear dari persamaan (1), karena ruas kanan linier pada
θ sedangkan sinθ pada persamaan (1) non linier. Persamaan (2) dapat
diselesaikan secara analitik, memberikan solusi periodik yang biasa:
dθ g
θ = a sin (β t + φ), dt = a ω cos (β t + φ), β= L (3)

di mana a adalah amplitudo dan φ adalah fase awal (konstan).

Untuk menyelesaikan persamaan diferensial orde dua secara numerik,


kita perkenalkan variabel baru dan mengubah soal orde dua menjadi dua
soal orde satu. Perkenalkan variabel ω = dθ / dt yang merupakan
kecepatan sudut bob, dan tulislah

1
dθ dω
dt = ω , dt = f (θ, ω, t ) (4)

di mana f ( ω, θ, t) = −β 2 sin θ untuk persamaan pendulum (1), dan f ( ω, θ ,


t) = −β 2 θ untuk persamaan linearisasi (2) . Dalam kasus pendulum
teredam, dengan gaya redaman - mk ω, fungsi f bergantung pada ω dan
juga θ. Jika pendulum juga dipaksa oleh gaya tergantung waktu eksternal
mA cos (Ω t ) fungsi di sisi kanan (4) menjadi fungsi dari tiga variabel θ, ω
dan t :

f (θ, ω, t ) = −β 2 sinθ - k ω + A cos (Ω t ) (5)

Untuk menyelesaikan perlu memilih nilai awal untuk θ dan ω


persamaan-persamaan ini secara dan kemudian = 1, 2, 3,… Kami
numerik kita menghitung melangkah maju dalam waktu
serangkaian nilai untuk (θ n , ω n menggunakan Taylor
), n ekspansi deret untuk θ dan
ω.

θ ( t + Δ t ) = θ ( t ) + d θ ( t ) Δ t + d θ ( t ) Δ t 2+ O (Δ t ) 3
2

 
dt   dt 2 2!  

θ ( t + Δ t ) = θ ( t ) + ω ( t ) Δ t + f (θ ( t ), ω (2 t ),
Δt
t) +
O (Δ t ) 3
2!
θ n +1 = θ n + ω n Δ t + O (Δ t ) 2
ω n +1 = ω n - θ n Δ t + O (Δ t ) 2

Ini adalah metode Euler sederhana untuk mengintegrasikan persamaan


diferensial pendulum sederhana. Notasi O (Δ t ) 2 berarti bahwa ada suku
kesalahan dari orde Δ t kuadrat dan lebih tinggi. Persamaan untuk
memperbarui frekuensi sudut diperoleh dengan menggunakan ekspansi
Taylor dengan cara yang sama seperti persamaan untuk memperbarui
sudut diperoleh.

The Aturan trapesium membuat perkiraan ditingkatkan untuk


memperbarui frekuensi sudut dan sudut.

Trapesium
Sederhana
Euler

dθ( dθ(t+Δt)
t) dt
dt

t t+Δt   

d θ ( t ) d θ ( t + Δ t ) 
   
dt  
+ dt
Luas di bawah trapesium = ( t + Δ t - t )    
   
t+ Δ
 

2 ≅ ∫
t
2

Δt⎛dθ(t) d θ ( t + Δ t ) ⎞ 
θ  n +1 ≅ θ    
 
 
n   
+        
  ⎜              
 
 
  +                
 
 
 
 
  ⎟   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
  
  
                                              
                2⎝ dt              dt      ⎠                  

d θ ( t + Δ t )  = d θ ( t ) + d θ ( t ) Δ t + O (Δ t ) 2
      
2
                    
              
2
    
dt            
dt            
dt                               
d θ ( t + Δ t )
        ≅ ω n + f (θ n , ω n , t ) Δ t = ω n + k 1 b
              
                 
     dt                                                      
Δt
θ + ≅θ    + ( ω   + ( ω       + f (θ   , ω     , t ) ) Δ t ) = θ   + k 1 a + k 2 a    
   n 1   n             n            n         n   n          n       
  2                2       
k 1 a = ω n Δ t     k2a = ( ω n   + f (θ n , ω n , t ) Δ t ) Δ t             
Δt⎛dω(t) d ω ( t + Δ t ) ⎞
ω n +1 ≅ ω n +     ⎜                         +             
        ⎟
          
   
   
   
   
   
 
 
 
   
   
   
  
  
  
                2 ⎝   dt                   dt           ⎠                 

Δt
ω + ≅ ω  + ( f (θ   , ω     , t ) + f (θ +   , ω   + k 1 b , t + ) ) = ω   + k 1 b + k 2 b
   n 1   n1     n1
      
  n     
         2                   n                 n           
 
 
           
n  
         
n
  2
k 2 b = Δ t f (θ n +1 , ω n + k 1 b , t n +1 )

2.2 Sebuah program untuk menyelesaikan persamaan pendulum


Program pendulum.c (disediakan secara elektronik dan di halaman 4)
menyelesaikan pasangan persamaan (4) menggunakan aturan
Trapesium:

• Program ini menghitung θ sudut dan kecepatan sudut ω di n + 1 instants


waktu, mulai dari t = 0 dan meningkat dalam langkah-langkah dengan
ukuran yang sama h sampai t = nh . Outputnya adalah tabel 3 kolom ,
dengan nilai t di kolom pertama, θ di kolom kedua dan ω di kolom ketiga.
h digunakan sebagai pengganti Δ t dalam program sebenarnya.
• Fungsi f ( ω, θ, t) dihitung dalam fungsi C terpisah, sehingga mudah
untuk diubah sesuai kebutuhan.
• Pada setiap langkah integrasi dua persamaan orde pertama dilakukan
dengan menggunakan aturan trapesium. Variabel k1a adalah h dikalikan
dengan nilai turunan θ pada t , awal langkah. k2a adalah h kali
pendekatan orde pertama ke turunan dari θ pada t + h . Aturan trapesium
kemudian memberikan θ (t + h) = θ (t) + (k1a + k2a) / 2 . Demikian pula k1b
dan k2b adalah h kali nilai turunan ω pada setiap ujung langkah, dan
nilai ω pada t + h dihitung menggunakan aturan trapesium.
• Untuk memudahkan dalam menampilkan hasil secara grafis, output
ditulis ke file data serta ke layar. File data kemudian dapat digunakan
dengan GNUPLOT untuk menampilkan grafik θ dan ω terhadap t.

2.3 Menulis ke file di C


Periksa program pendulum.c untuk melihat bagaimana data dikirim ke file.
Selain pernyataan yang memerintahkan komputer untuk menulis ke file,
file tersebut harus dideklarasikan, dibuka sebelum digunakan dan ditutup
setelah digunakan. (Pemrograman di C bagian 5). Masing-masing perintah
ini dibahas di bawah ini:

2.3.1 Pernyataan fprintf

Bandingkan pernyataan tersebut printf ("% lf \ t% lf \ t% lf \ n", t, theta, omega);


dan f printf (Oscp, "% lf \ t% lf \ t% lf \ n", t, theta, omega);
Yang pertama akan dicetak di layar
3

• bilangan floating point presisi ganda yang mengambil nilai t saat ini,
• ruang tab,
• bilangan floating point presisi ganda yang mengambil nilai arus theta,
• ruang tab lain,
• bilangan floating point presisi ganda yang mengambil nilai omega,
• carriage return (tentu saja tidak terlihat).
Perintah kedua mencetak hal yang persis sama ke file yang alamatnya di
memori komputer adalah Oscp.
Secara umum, perintah untuk mencetak ke file berbentuk:

f printf (alamat file, "string kontrol", parameter lain) (6)

2.3.2 Deklarasi file

Ingatlah bahwa saat mendeklarasikan variabel, tipenya (int, double, char


dll.) Harus dinyatakan. File adalah objek baru dari tipe FILE . (Perhatikan ibu
kota). Komputer harus diberi tahu di mana dalam memorinya file tersebut
disimpan, jadi deklarasi tersebut tidak berisi nama file, tetapi alamatnya.
Misalnya, deklarasi untuk file dengan alamat Oscp adalah FILE * Oscp .
Alamat tersebut diawali dengan tanda bintang untuk menunjukkan bahwa
ini adalah penunjuk ke area memori, bukan nama. Deklarasi untuk file
adalah dalam bentuk umum

FILE * filepointer (7)

(Untuk detail lebih lanjut tentang petunjuk lihat Pemrograman di C bagian 8.)

2.3.3 Pembukaan dan penutupan file


Sebelum data dapat ditulis ke file, data harus dibuka. Pernyataan file
terbuka harus mengaitkan nama file (seperti yang muncul saat Anda
melihat isi direktori di mana ia berada) dengan alamat penyimpanannya.
Pernyataan

Oscp = fopen ("pendulum.dat", "w")

membuka file bernama pendulum.dat. "W" berarti file ini sedang dibuka
sehingga dapat ditulis. Jika Anda ingin membuka file dan membacanya,
Anda harus menggunakan "r", dan jika itu adalah file yang sudah berisi
data dan Anda ingin menambahkan lebih banyak data ke dalamnya, Anda
akan menggunakan "a". Jika file belum ada, perintah buka membuatnya.

Pernyataan pembukaan file di pendulum.c lebih rumit. Pertama, ia meminta


nama file untuk file data tersebut. (Ini memudahkan untuk memastikan
bahwa setiap kali Anda menjalankan program, Anda menyimpan data ke file
yang berbeda). Nama tersebut dibaca ke dalam variabel yang diajukan
sebagai string karakter. Deklarasi variabel ini adalah char diajukanat [20];
yang mengidentifikasi input sebagai string karakter dengan panjang
maksimum 20 karakter. Jadi dalam pernyataan pembukaan file variabel
diajukanat muncul sebagai ganti " nama file ". Untuk digunakan dengan
GNUPLOT, nama file data harus memiliki ekstensi .dat . (mis. name.dat ).

Kedua program memeriksa apakah mungkin untuk membuka file, dan


keluar dengan pesan kesalahan jika tidak. Ini adalah gaya pemrograman
yang bagus. Pernyataan pembukaan file adalah dalam bentuk umum
berikut:

if ((* filepointer = fopen ("filename", "w")) = =


NULL) {printf ("\ nTidak dapat membuka
file \ n");
keluar (1); } (8)
Untuk menggunakan fungsi keluar Anda perlu menyertakan file header stdlib.h.

Setelah Anda selesai menggunakan file, Anda harus menutupnya dengan pernyataan
formulir

fclose (filepointer);  
(9)
   

/ * pendulum.c Solusi persamaan pendulum menggunakan perbaikan Euler


metode */      

# sertakan <stdio.h>
# sertakan <stdlib.h> / * diperlukan untuk fungsi kesalahan * /
# sertakan <math.h>    

double f (double theta, double omega, double t); / * prototipe fungsi * /


utama()      
{      
int i, n;      
ganda h, k1a, k1b, k2a, k2b, theta, omega, t;  
FILE * Oscp;   / * nyatakan file * /  

char diajukanat [20];   / * mendeklarasikan string karakter untuk nama file * /


h = 0,1;  
/ * atur langkah waktu * /  
n = 100;  
/ * setel jumlah langkah * /  
theta = 0;  
/ * setel sudut awal * /  
omega = 1;  
/ * setel kecepatan sudut awal * /
t = 0;  
/ * atur waktu awal * /  

/ * Masukkan nama file data , dan buka untuk


menulis * / printf ("Masukkan nama file data yang
akan ditulis \ n");
scanf ("% s", Filedat);
if ((Oscp = fopen (diajukanat, "w")) == NULL)
{
fprintf (stderr, "Kesalahan membuka file%
s", Filedat); keluar (1);
}
printf ("% lf \ t% lf \ t% lf \ n", t, theta,
omega); fprintf (Oscp, "% lf \ t% lf \ t% lf \ n",
t, theta, omega);
/ * Terapkan algoritma : *
/ for (i = 1; i <= n; i ++) {
k1a = h * omega;
k1b = h * f (theta, omega, t);
k2a = h * (omega + k1b);
k2b = h * f (theta + k1a, omega + k1b, t + h);
theta = theta + (k1a + k2a) / 2;
omega = omega + (k1b + k2b)
/ 2; t = t + h;
printf ("% lf \ t% lf \ t% lf \ n", t, theta,
omega); fprintf (Oscp, "% lf \ t% lf \ t% lf \ n",
t, theta, omega);
}
fclose (Oscp); / * tutup file * /
}
double f (double theta, double omega, double t) / * header fungsi * /
{
turunan
ganda; deriv
= -theta;

return deriv;
}

LATIHAN 1

Selidiki gerakan pendulum sederhana dalam kasus-kasus tertentu yang


tercantum di bawah ini. Dalam setiap kasus, tulis data ke file data, dan
gunakan GNUPLOT untuk memplot grafik data.

Untuk memplot file data, buka GNUPLOT. Ketik plot saat diminta, dan tarik
menu PLOT dari bilah atas. Klik pada nama file Data… dan kotak dialog
akan memungkinkan Anda untuk menemukan file data yang telah Anda
simpan. Klik pada file yang Anda inginkan dan namanya akan muncul
setelah plot . Sekarang ketik menggunakan 1: 2 dan tekan <RETURN>.
GNUPLOT akan menggunakan kolom pertama dari datafile Anda untuk
sumbu horizontal, dan kolom kedua untuk sumbu vertikal. Untuk memplot
kolom ketiga dan bukan yang kedua, ganti 1: 2 dengan 1: 3. Jika Anda
menggunakan GNUPLOT dengan file pendulum.dat untuk memplot sudut
dan kecepatan sudut sebagai fungsi waktu pada grafik yang sama, baris
perintahnya adalah gnuplot> plot 'pendulum.dat' menggunakan 1: 2,
'pendulum.dat' menggunakan 1: 3

1. Jalankan pendulum.c sebagaimana berdiri untuk menyelesaikan


persamaan linier dengan β 2 = 1 dan nilai awal θ = 0 dan ω = 1. Jalankan
program lagi dengan bandul pada awalnya diam dan set posisi awal
berikut: θ (0) = 0,2 rad, 1,0 rad dan 3,124 rad. (Nilai terakhir kira-kira
sama dengan 179 o ). Dalam setiap kasus grafik plot θ dan ω terhadap t.
Jelaskan apa yang dilakukan pendulum dalam masing-masing kasus ini.

2. Gantikan fungsi sinus sehingga program menyelesaikan persamaan


nonlinier (1) untuk himpunan nilai awal yang sama seperti dalam
pertanyaan 1. Bandingkan hasil dengan pertanyaan 1. Untuk melihat
perbedaannya seiring dengan bertambahnya perpindahan bandul , plot
sudut yang dihitung dalam pertanyaan ini dan yang ditemukan di
pertanyaan 1 sebagai fungsi waktu pada grafik yang sama.

2.4 The Runge-Kutta metode

Metode trapesium akurat untuk 2 nd urutan timestep h, yang tidak cukup


untuk mengintegrasikan persamaan untuk pendulum didorong teredam, di
mana fungsi untuk turunan dari ω diberikan oleh persamaan (5). Metode
Runge-Kutta urutan kedua diturunkan di bawah ini dan algoritma
Runge-Kutta urutan ke- 4 diberikan untuk digunakan dalam program Anda.
Metode Runge-Kutta orde kedua didasarkan pada perluasan fungsi deret
Taylor yang akan diintegrasikan tentang titik tengah langkah waktu.

dθ( Δt)
dt
d θ (0) ⎛Δt⎞
θd ⎜ ⎟ ⎝ 2

dt ⎠
dt

       
Δ t   
2 Δt                      
d θ ( t )     d θ ( 2 )  d θ ( 2 )   Δ t ⎞ Δ t    2  
+          2      ⎜⎛t -     ⎟ + O (     )     
       
 
 
 
=     
     
  dt     dt         dt   ⎝   2 ⎠   2          

Δt
d θ ( t )    dθ( Δ t ⎞    d θ (
t  )       d 2   θ ( Δ2t  )  ⎛
Δt
  Δ Δ2t )  
∫ dt ≅   2 Δ t +    2     ∫ ⎜ t - ⎟ =
       
 
  
Δt+0
0 dt        
dt        
dt       0 ⎝ 2 ⎠    dt  
Suku kedua dalam rangkaian di atas sama dengan nol ketika kita memilih
titik tengah dari langkah waktu untuk ekspansi Taylor. Untuk menggunakan
algoritma ini kita membutuhkan nilai perkiraan untuk θ dan ω pada titik
tengah langkah waktu yang dihasilkan menggunakan metode Simple Euler.
Δ t
θ n +1 - θ n ≅ ω n + 1/2 Δ t + O ( )2
2
Δ t Δ t
ω n + 1/2 ≅ ω n + f (θ n , ω n , t n ) +O( )2
2 2
⎛ Δt⎞
θ + ≅ θ        + ⎜ω       + f (θ    , ω    , t    )     ⎟Δ t
 
n1
   
n
 
⎝ n
    n 
n
  
n 2
   

ω + - ω   ≅ f (θ + , ω +    
,t +
 
) Δ t + O (Δ t) 2
  n1       n        n 1/2     n 1/2   n 1/2  
                                     2 
θ ≅θ +ω Δt                         
n + 1/2 2                     
n n
           Δ t    
ω n + 1/2 ≅ ω n + f (θ n , ω n , t n )
2

ω n +1 ≅ ω n + f (θ n + 1/2 , ω n + 1/2 , t n + 1/2 ) Δ t

Algoritme untuk integrasi Runge-Kutta orde dua telah diturunkan; Rumus


untuk metode Runge-Kutta orde 4 diberikan di bawah ini.

k 1a = h ω k 1b= hf (θ, ω, t)
k 2a = h (ω + k 1b / 2)k 2b= hf (θ + k 1a / 2, ω + k 1b / 2, t + h / 2)
k 3a = h (ω + k 2b / 2)k 3b= hf (θ + k 2a / 2, ω + k 2b / 2, t + h / 2)
k 4a = h (ω + k 3b ) k 4b= hf (θ + k 3a , ω + k 3b , t + h)
θ (t + h) = θ (t) + (k 1a + 2 k 2a + 2 k 3a
+ k 4a ) / 6 ω (t + h) = ω (t) + (k 1b + 2
k 2b + 2 k 3b + k 4b ) / 6

LATIHAN 2
1. Edit pendulum.c sehingga menggunakan algoritma Runge-Kutta urutan ke- 4 di
loop for .
2. Periksa program Anda dengan menjalankannya untuk kasus
persamaan nonlinier (1), dengan beberapa nilai awal θ dan ω
yang berbeda, dan bandingkan hasilnya dengan yang diperoleh
pada pertanyaan 2 pada latihan 1.

3. Periksa perilaku bandul teredam, persamaan (5), menggunakan β 2 =


1, k = 0,5, A = 0 dan rentang posisi dan kecepatan awal. Plot grafik θ
terhadap t untuk membandingkan kasus nonlinier dengan versi
linier. Grafik Anda harus menunjukkan bahwa pendekatan linier
menjadi sangat baik setelah waktu yang cukup lama. Jelaskan
mengapa.

4. Ubah fungsi dalam program Anda untuk menyelesaikan


persamaan untuk pendulum berpenggerak teredam,
menggunakan β 2 = 1, k = 0,5, Ω = 0,6667, dan rentang amplitudo
penggerak:
A = 0,90, 1,07, 1,35, 1,47 dan 1,5. Cara terbaik untuk memahami
perilaku bandul adalah dengan memplot grafik ω terhadap θ, dan
membatasi θ ke kisaran [-π, π]:
• Untuk membatasi kisaran θ, tambahkan pernyataan if
berikut ini di loop for di mana theta dihitung:

if (fabs (theta)> PI)


{
theta = theta - 2 * PI * fabs (theta) / theta;
}

• Untuk menggunakan PI daripada harus mengetikkan nilai


numerik, tentukan di bagian paling atas program Anda dengan
pernyataan # define PI 3.14159265 (NB tidak ada titik koma di
bagian akhir).
• Akan lebih mudah untuk membagi 'periode berkendara' 2π / Ω
menjadi bilangan bulat langkah N (misalnya N = 1000), dan
menghitung nilai θ dan ω pada masing-masing waktu ini selama
sejumlah kecil siklus penggerak (misalnya 5 ).
• Kira-kira 500 titik iterasi pertama mewakili lintasan transien awal
sebelum gerakan berhenti. Jangan plot 500 poin pertama
(sertakan pernyataan dalam program Anda untuk mencegah
penulisan 500 poin awal ke datafile).

Plot ω terhadap θ untuk posisi dan kecepatan awal dalam rentang -3.0 <θ (0) <- 1.0,
-0,5 <ω (0) <0,5. Untuk A = 0,90 Anda harus dapat melihat bahwa
gerakan itu periodik, sedangkan untuk A = 1,07 ini adalah kombinasi
osilasi pada dua periode berbeda - telah terjadi penggandaan
periode . Untuk A = 1,5, gerakannya kacau.
8

Anda mungkin juga menyukai