Sistem teknik — suspensi kendaraan, filter listrik, lengan robot — hampir semuanya bisa diringkas menjadi satu pola: inersia yang menolak perubahan, disipasi yang melucuti energi, dan elemen pemulih yang menarik kembali ke posisi seimbang. Chapter ini membangun model massa-pegas-damper dari pola itu, mensimulasikannya lewat ode45 seperti pada Chapter Simulasi Sistem, lalu memanfaatkan fakta yang menghemat banyak pekerjaan: rangkaian RLC menuruti persamaan yang identik, sehingga satu model dipakai di dua domain. Cakupan kita:

  • respons step untuk tiga regime damping: underdamped, critically damped, overdamped
  • tabel padanan mekanik–listrik (dualitas elektro-mekanik)
  • respons frekuensi lewat sapuan sinus dan letak resonansi

Sistem Massa-Pegas-Damper #

Aturannya satu persamaan: m*x'' + c*x' + k*x = F(t). Massa m (kg) menyimpan energi kinetik, damper c (N·s/m) menyerap energi sebanding kecepatan, dan pegas k (N/m) mendorong balik sebanding simpangan. Dua angka menentukan watak sistem: frekuensi natural wn = sqrt(k/m) dan damping kritis cKritis = 2*sqrt(k*m); rasio zeta = c/cKritis membagi perilaku sistem menjadi tiga regime. Mekanisme di balik layar sama seperti Chapter Simulasi Sistem: ode45 tidak menerima persamaan orde dua, jadi kita menurunkannya menjadi sistem dua orde satu dengan state [x; x'], lalu menyerahkan function handle yang mengembalikan turunannya.

matlab
m  = 1;      % massa (kg)
k  = 100;    % konstanta pegas (N/m)
F0 = 100;    % besar gaya step (N)

wn      = sqrt(k/m);     % frekuensi natural (rad/s)
cKritis = 2*sqrt(k*m);   % damping kritis (N.s/m)
fprintf('Frekuensi natural : wn = %.2f rad/s = %.3f Hz\n', wn, wn/(2*pi));
fprintf('Damping kritis    : c  = %.1f N.s/m\n\n', cKritis);

cKasus = [2, 20, 40];    % underdamped, kritis, overdamped
nama   = {'underdamped', 'critically damped', 'overdamped'};
fprintf('%-18s %5s %6s %9s %9s\n', 'kasus', 'c', 'zeta', 'x_max', 'x_akhir');
for i = 1:3
    c    = cKasus(i);
    zeta = c / (2*sqrt(k*m));
    sistem = @(t, x) [x(2); (F0 - c*x(2) - k*x(1))/m];
    [t, x] = ode45(sistem, [0, 5], [0; 0]);   % respons step dari kondisi awal nol
    fprintf('%-18s %5.1f %6.2f %9.4f %9.4f\n', nama{i}, c, zeta, max(x(:,1)), x(end,1));
end

Output yang Dihasilkan:

text
Frekuensi natural : wn = 10.00 rad/s = 1.592 Hz
Damping kritis    : c  = 20.0 N.s/m

kasus                  c   zeta     x_max   x_akhir
underdamped          2.0   0.10    1.7277    0.9945
critically damped   20.0   1.00    1.0000    1.0000
overdamped          40.0   2.00    1.0000    1.0000

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-3 (m = 1; k = 100; F0 = 100): parameter sistem dan gaya step — gaya konstan F0 dinyalakan pada t = 0, sehingga posisi akhir yang diharapkan adalah simpangan statik F0/k = 1 m.
  2. Baris 5-6 (wn, cKritis): dua karakter sistem. wn = sqrt(k/m) adalah frekuensi osilasi bebas; cKritis = 2*sqrt(k*m) adalah nilai c yang memisahkan osilasi dari tanpa-osilasi.
  3. Baris 10-11 (cKasus, nama): tiga nilai c — 2 (ζ = 0.1), 20 (ζ = 1), 40 (ζ = 2) — mewakili tiga regime.
  4. Baris 16 (sistem = @(t, x) ...): anonymous function mengembalikan [x'; x'']; baris kedua adalah persamaan gerak yang diolah menjadi x'' = (F0 - c*x' - k*x)/m, dengan gaya step masuk sebagai konstanta F0.
  5. Baris 17 (ode45(sistem, [0, 5], [0; 0])): integrasi 5 detik dari posisi dan kecepatan nol; hasil x berisi dua kolom — posisi (kolom 1) dan kecepatan (kolom 2).
  6. Baris 18 (fprintf ...): max(x(:,1)) mencatat puncak osilasi pertama, x(end,1) posisi akhir — dua statistik yang membedakan ketiga regime dalam satu tabel.

Pembacaan hasilnya: sistem underdamped melampaui target hingga 1.7277 — overshoot sekitar 73% dari posisi akhir 1 m — lalu berosilasi menuju 0.9945 pada t = 5 s (masih meluruh). Sistem kritis dan overdamped tidak pernah melampaui 1; kritis mencapainya paling cepat, overdamped mendekat paling lambat. Ketiganya diringkas dalam tabel berikut:

Regimeζ = c/2√(km)Perilaku respons stepAplikasi khas
underdampedζ < 1melampaui target, osilasi meluruhsuspensi mobil penumpang
critically dampedζ = 1tercepat tanpa osilasipintu penutup otomatis
overdampedζ > 1lambat, tanpa osilasisuspensi kendaraan berat

Dualitas Elektro-Mekanik: Rangkaian RLC #

Aturan listriknya: hukum tegangan Kirchhoff pada rangkaian RLC seri menghasilkan L*q'' + R*q' + q/C = V(t), dengan q muatan kapasitor (C), q' arus (A), L induktansi (H), R resistansi (Ω), dan C kapasitansi (F). Struktur persamaan ini identik dengan massa-pegas-damper — bukan kebetulan, melainkan dualitas elektro-mekanik: induktor menyimpan energi medan seperti massa menyimpan energi kinetik, resistor melucuti energi seperti damper, dan kapasitor menarik muatan kembali seperti pegas menarik posisi.

MekanikListrik (RLC seri)Peran bersama
m (kg)L (H)inersia — menolak perubahan laju
c (N·s/m)R (Ω)disipasi — melucuti energi
k (N/m)1/C (1/F)pemulih — menarik kembali ke setimbang
F(t) (N)V(t) (V)sumber penggerak
x (m)q (C)variabel respons
wn = √(k/m)ω0 = 1/√(L·C)frekuensi natural

Diagram di atas memetakan kedua sisi persamaan: tiga komponen mekanik pada blok kiri memiliki pasangan eksak di blok kanan, dan tanda penghubung menyatakan peran fisis yang sama. Konsekuensi praktisnya menguntungkan: kode ode45 dari bagian sebelumnya bisa dipakai ulang untuk RLC hanya dengan mengganti nama variabel. Kita verifikasi padanan angkanya:

matlab
L = 1;      % induktansi (H)
C = 0.01;   % kapasitansi (F)
R = 20;     % resistansi (Ohm)
fprintf('\nRLC seri: L = %.2f H, C = %.3f F, R = %.1f Ohm\n', L, C, R);
fprintf('Frekuensi natural : 1/sqrt(L*C) = %.2f rad/s\n', 1/sqrt(L*C));
fprintf('Resistansi kritis : 2*sqrt(L/C) = %.1f Ohm\n', 2*sqrt(L/C));

Output yang Dihasilkan:

text
RLC seri: L = 1.00 H, C = 0.010 F, R = 20.0 Ohm
Frekuensi natural : 1/sqrt(L*C) = 10.00 rad/s
Resistansi kritis : 2*sqrt(L/C) = 20.0 Ohm

Baris pertama memilih L = 1 dan C = 0.01 sebagai kembaran listrik dari m = 1 dan k = 100 (karena 1/C = 100), dan R = 20 sebagai kembaran c = 20. Hasilnya persis: frekuensi natural 10 rad/s dan resistansi kritis 2*sqrt(L/C) = 20 Ω — padanan cKritis = 20 N·s/m. Rangkaian ini berperilaku critically damped terhadap tegangan step.

Respons Frekuensi: Sapuan Sinus #

Aturan berikutnya: gantikan gaya step dengan paksaan harmonik F(t) = F0*sin(w*t). Setelah transien padam, sistem berosilasi pada frekuensi paksaan w dengan amplitudo steady-state yang bisa dihitung tertutup: X(w) = F0 / sqrt((k - m*w^2)^2 + (c*w)^2) — hasil substitusi sinus ke persamaan gerak. Menyapu beberapa frekuensi memberi kurva respons frekuensi tanpa perlu mensimulasikan ulang tiap titik:

matlab
c = 2;
w = [5, 8, 9, 9.9, 10, 12, 15];              % frekuensi paksa (rad/s)
X = F0 ./ sqrt((k - m*w.^2).^2 + (c*w).^2);  % amplitudo steady-state (m)
fprintf('\nSapuan sinus (amplitudo steady-state):\n');
fprintf('%7s %8s\n', 'omega', 'X (m)');
for i = 1:numel(w)
    fprintf('%7.2f %8.4f\n', w(i), X(i));
end

Output yang Dihasilkan:

text
Sapuan sinus (amplitudo steady-state):
  omega    X (m)
   5.00   1.3216
   8.00   2.5384
   9.00   3.8208
   9.90   5.0252
  10.00   5.0000
  12.00   1.9952
   15.00   0.7779

Baris ketiga memakai operasi per elemen (.^, .* implisit lewat c*w skalar) sehingga seluruh tujuh frekuensi dihitung sekaligus. Pembacaannya: pada w = 5 amplitudo hanya 1.32 m, nyaris sama dengan simpangan statik 1 m; menjelang w = 10 amplitudo melonjak ke 5 m; di w = 15 sistem nyaris diam karena paksaan terlalu cepat diikuti inersia.

Resonansi #

Lonjakan di atas adalah resonansi: ketika frekuensi paksaan mendekati frekuensi natural wn = sqrt(k/m) = 10 rad/s, suku (k - m*w^2) menuju nol dan tinggal damping c*w yang membatasi amplitudo. Makanya puncak sebenarnya bergeser sedikit ke wn*sqrt(1 - 2*zeta^2):

matlab
wGrid = 5:0.001:15;
XGrid = F0 ./ sqrt((k - m*wGrid.^2).^2 + (c*wGrid).^2);
[Xpuncak, ip] = max(XGrid);
fprintf('\nPuncak resonansi : omega = %.3f rad/s, X = %.3f m\n', wGrid(ip), Xpuncak);
fprintf('Amplifikasi     : X_puncak / X_statik = %.2f kali\n', Xpuncak/(F0/k));

Output yang Dihasilkan:

text
Puncak resonansi : omega = 9.899 rad/s, X = 5.025 m
Amplifikasi     : X_puncak / X_statik = 5.03 kali

Grid frekuensi 5:0.001:15 dihitung vektoris penuh, lalu [Xpuncak, ip] = max(XGrid) mengambil nilai dan indeks puncaknya — teknik sweep yang sama dipakai spectrum analyzer. Dengan ζ = 0.1, puncak 9.899 rad/s berjarak 1% dari wn, dan amplitudo teramplifikasi 5 kali simpangan statik. Menaikkan c menurunkan puncak secara kasar sebanding 1/(2*zeta) — inilah alasan damper dan resistor diciptakan.

Ringkasan #

Persamaan m*x'' + c*x' + k*x = F(t) dan RLC seri L*q'' + R*q' + q/C = V(t) adalah satu model dengan dua kostum — dualitas m↔L, c↔R, k↔1/C membuat kode ode45 dipakai ulang lintas domain. Rasio damping ζ membagi respons step menjadi underdamped (overshoot 73% pada ζ = 0.1), critically damped (tercepat tanpa overshoot), dan overdamped. Respons frekuensi X(w) = F0/sqrt((k - m*w^2)^2 + (c*w)^2) melonjak dekat frekuensi natural sqrt(k/m) — resonansi yang teramplifikasi 5 kali pada contoh kita dan dikendalikan oleh damping. Berkas contoh.m pada bagian bawah halaman menjalankan seluruh rantai ini dalam satu script.