Topik ini membahas matematika simbolik di MATLAB, yaitu mode perhitungan yang memanipulasi bentuk aljabar secara eksak alih-alih menghasilkan nilai numerik yang terbulatkan. Pembaca akan mendeklarasikan variabel simbolik dengan syms, menurunkan dan mengintegralkan bentuk dengan diff dan int, serta menyelesaikan persamaan dengan solve. Bentuk dirapikan dengan simplify dan expand, lalu hasil simbolik dijembatani kembali ke numerik melalui subs, double, dan matlabFunction. Seluruh kemampuan tersebut berasal dari Symbolic Math Toolbox pada MATLAB, sedangkan GNU Octave menyediakan padanannya melalui paket symbolic yang berbasis pustaka SymPy.
Bentuk simbolik dan bentuk numerik#
Perhitungan numerik menyimpan hasil sebagai bilangan pecahan presisi ganda bertipe double. Representasi tersebut terbatas, sehingga pecahan seperti 1/3 hanya dapat dinyatakan secara hampiran dan kesalahan pembulatan dapat menyebar pada perhitungan yang panjang. Matematika simbolik menghindari pembulatan itu dengan menyimpan bentuk aljabar itu sendiri sebagai objek bertipe sym. Objek sym menampung variabel, pecahan rasional, akar, dan pangkat dalam bentuk eksak. Bentuk tersebut baru dihitung menjadi angka ketika konversi diminta.
Variabel simbolik dibuat dengan perintah syms. Kata kunci real pada deklarasi menandakan variabel bernilai riil, sehingga penyederhanaan dapat memanfaatkan sifat tersebut, misalnya akar kuadrat dari dirapikan menjadi nilai mutlak . Contoh berikut mendeklarasikan x sebagai variabel simbolik riil, membentuk sebuah ekspresi linier, lalu membandingkan tipenya dengan variabel numerik biasa.
pkg load symbolic;
sympref quiet on;
syms x real
f = 2*x + 3
class(f)
angka = 0.5
class(angka)f = (sym) 2⋅x + 3
ans = sym
angka = 0.5000
ans = doubleFungsi class melaporkan f bertipe sym sedangkan angka bertipe double. Penanda (sym) pada gema keluaran menandai nilai simbolik, dan perkalian ditampilkan sebagai ⋅. Perbedaan tipe terasa paling langsung pada pecahan. Bentuk simbolik menjumlahkan menjadi tanpa pembulatan, sedangkan penjumlahan numerik langsung menghasilkan desimal hampiran.
pkg load symbolic;
sympref quiet on;
syms x real
hasil_simbolik = x/2 + x/3
hasil_numerik = 1/2 + 1/3hasil_simbolik = (sym)
5⋅x
───
6
hasil_numerik = 0.8333Hasil simbolik tampil sebagai pecahan 5⋅x/6 dalam tata letak unicode milik Octave, sedangkan hasil numerik tampil 0.8333 karena format tampilan bawaan membatasi jumlah angka penting. Nilai yang tersimpan di hasil_simbolik tetap eksak dan siap dipakai pada penurunan rumus, sedangkan nilai di hasil_numerik sudah membawa pembulatan sejak awal.
Turunan dan integral eksak#
Fungsi diff menghitung turunan analitis dari sebuah bentuk simbolik, sedangkan int menghitung integral tentu maupun tak tentu. Keduanya menerapkan aturan kalkulus langsung pada bentuknya, bukan mendekati lewat beda hingga. Integral tentu dikerjakan dengan memberikan batas sebagai dua argumen terakhir, dan hasilnya diberikan dalam bentuk eksak seperti berikut.
pkg load symbolic;
sympref quiet on;
syms x real
f = x^2 + x;
turunan = diff(f, x)
integral = int(f, x, 0, 2)turunan = (sym) 2⋅x + 1
integral = (sym) 14/3Turunan dan nilai integral keluar tanpa desimal. Perhitungan numerik pada tipe double hanya mampu menyimpan hampiran dari , sedangkan bentuk simbolik mempertahankan pecahan rasionalnya sampai konversi ke angka diminta. Sifat eksak inilah alasan utama matematika simbolik dipakai untuk menurunkan rumus: hasil antara bebas kesalahan pembulatan, sehingga rumus akhir benar secara analitis dan tinggal dikonversi sekali di ujung.
Menyelesaikan persamaan dengan solve#
Fungsi solve mencari akar persamaan secara analitis. Persamaan ditulis sebagai bentuk simbolik, dan operator == dipakai untuk menyatakan kesamaan karena satu tanda = berarti penugasan. Untuk polinomial, solve mengembalikan seluruh akarnya sebagai vektor kolom bertipe sym, bukan sebagai daftar angka numerik.
Sistem persamaan diselesaikan dengan memberikan daftar persamaan dan daftar variabel. Keluarannya berupa struct yang memuat satu medan untuk tiap variabel, sehingga nilainya diakses lewat medan bersangkutan. Contoh berikut menyelesaikan satu persamaan kuadrat dan satu sistem dua variabel.
pkg load symbolic;
sympref quiet on;
syms x real
akar = solve(x^2 - 5*x + 6, x)
syms a b real
sistem = solve([2*a + b == 8, a - b == 1], [a b]);
nilai_a = sistem.a
nilai_b = sistem.bakar = (sym 2×1 matrix)
⎡2⎤
⎢ ⎥
⎣3⎦
nilai_a = (sym) 3
nilai_b = (sym) 2Akar dari keluar sebagai matriks kolom berukuran 2×1 yang memuat 2 dan 3, sesuai faktorisasi . Sistem dan memberikan serta lewat medan struct. Bentuk tanpa == seperti x^2 - 5*x + 6 juga diterima oleh solve karena ditafsirkan sebagai persamaan yang sama dengan nol. Kebiasaan menulis == tetap menjaga makna konsisten ketika ruas kanan bukan nol.
Menyederhanakan bentuk dan mengatur presisi#
Fungsi simplify merapikan bentuk simbolik dengan menerapkan aturan aljabar dan identitas sampai diperoleh bentuk paling sederhana yang dapat ditemukannya. Fungsi expand bekerja ke arah sebaliknya, yaitu mengalikan tanda kurung dan menjumlahkan suku sejenis sehingga polinomial tampil dalam bentuk terbuka. Keduanya berguna untuk membandingkan dua bentuk yang tampak berbeda tetapi sebenarnya sama.
pkg load symbolic;
sympref quiet on;
syms x real
identitas = simplify(sin(x)^2 + cos(x)^2)
bentang = expand((x + 1)*(x + 2))identitas = (sym) 1
bentang = (sym)
2
x + 3⋅x + 2Identitas trigonometri runtuh menjadi 1. Hasil kali terbuka menjadi . Penyederhanaan semacam ini menjadi pemeriksa silang yang murah bagi hasil turunan panjang dari diff: bentuk dirapikan lebih dahulu dengan simplify, baru disubstitusi atau dibandingkan dengan hasil numerik.
Aritmetika presisi variabel menyediakan lebih banyak angka penting daripada muatan tipe double. Fungsi vpa menghitung nilai hampiran dengan jumlah digit yang diminta, misalnya vpa(pi, 30) menghasilkan tiga puluh digit konstanta pi. Hasilnya tetap bertipe sym, bukan double, sehingga konversi eksplisit tetap diperlukan sebelum dipakai pada perhitungan numerik.
pkg load symbolic;
sympref quiet on;
hampiran = vpa(pi, 30)
kembali = double(hampiran)hampiran = (sym) 3.14159265358979323846264338328
kembali = 3.1416Keluaran memperlihatkan tiga puluh digit pi, lalu double mengubahnya kembali menjadi nilai presisi ganda yang tampil lima angka penting pada format bawaan. Presisi tinggi hanya berguna selama perhitungan masih berlangsung di ranah simbolik, karena angka yang keluar dari ranah itu selalu terpotong oleh muatan double.
Jembatan dari simbolik ke numerik#
Hasil simbolik akhirnya perlu diubah menjadi angka ketika laporan, plot, atau perhitungan lanjutan menuntut nilai numerik. Fungsi subs mengganti variabel simbolik dengan nilai atau bentuk lain, double mengonversi nilai konstan menjadi numerik, dan matlabFunction membungkus bentuk menjadi fungsi anonim yang dapat dipanggil seperti fungsi biasa. Ketiganya membentuk jembatan dari ranah simbolik menuju ranah numerik.
pkg load symbolic;
sympref quiet on;
syms x real
f = x^2 + x;
nilai = subs(f, x, 7)
double(nilai)nilai = (sym) 56
ans = 56Substitusi pada memberikan nilai 56 yang masih bertipe sym. Fungsi double kemudian mengubah nilai tersebut menjadi numerik. Nilai substitusi yang berupa angka dihitung secara eksak lebih dahulu, sehingga pecahan tidak sempat kehilangan ketelitian sebelum konversi dilakukan.
pkg load symbolic;
sympref quiet on;
syms x real
f = x^2 + x;
fungsi_f = matlabFunction(f);
fungsi_f(7)
class(fungsi_f)ans = 56
ans = function_handleFungsi matlabFunction menghasilkan fungsi anonim bertipe function_handle dari bentuk simbolik. Evaluasi berulang pada fungsi tersebut berlangsung murni numerik, tanpa menyentuh mesin aljabar. Pola ini cocok untuk kurva hasil derivasi simbolik yang perlu dievaluasi pada banyak titik, misalnya saat menggambar plot.
Rangkaian lengkapnya dirangkum pada berkas berikut, yang menganalisis polinomial mulai dari deklarasi variabel sampai nilai numerik di satu titik.
pkg load symbolic;
sympref quiet on;
% analisis simbolik polinomial p(x) = x^2 - 5*x + 6
syms x real
p = x^2 - 5*x + 6;
turunan = diff(p, x)
akar = solve(p, x)
nilai_di_4 = double(subs(p, x, 4))turunan = (sym) 2⋅x - 5
akar = (sym 2×1 matrix)
⎡2⎤
⎢ ⎥
⎣3⎦
nilai_di_4 = 2Berkas itu menghitung turunan , akar 2 dan 3, serta nilai numerik dalam satu alur. Dua baris pertamanya spesifik Octave, sedangkan seluruh isi analisisnya identik dengan kode yang berjalan pada MATLAB.
Kesalahan umum#
- Mengindeks ekspresi simbolik seperti fungsi. Penyebabnya adalah kebiasaan menulis
f(7)untuk menghitung nilai, padahalfadalah objeksymberukuran 1×1 sehingga angka 7 ditafsirkan sebagai indeks dan eksekusi berakhir dengan error keluar batas. Perbaikannya adalah memakaisubs(f, x, 7)atau membungkus bentuk denganmatlabFunctionterlebih dahulu. - Mencampur hasil simbolik ke perhitungan numerik tanpa konversi. Penyebabnya adalah nilai simbolik yang tampak seperti angka biasa di layar. Kenyataannya, operasi aritmetika campuran otomatis menghasilkan bentuk simbolik, misalnya
x + 0.5menjadix + 1/2, sehingga tipesymmenjalar diam-diam dan fungsi yang menuntut masukan numerik murni akhirnya gagal. Perbaikannya adalah menutup tiap tahap dengansubsataudoublesebelum nilai dipakai di ranah numerik. - Lupa memuat paket symbolic pada Octave. Penyebabnya adalah sesi baru yang belum memuat paket, sehingga
symsdilaporkan sebagai fungsi yang tidak dikenal. Perbaikannya adalah menjalankanpkg load symbolic;pada awal sesi atau awal skrip, dan memastikan Symbolic Math Toolbox terpasang bila bekerja di MATLAB.
Ringkasan#
- Objek bertipe
symmenyimpan bentuk aljabar eksak, sehingga pecahan, akar, dan hasildiff,int, sertasolvebebas pembulatan sampai konversi diminta. - Fungsi
solvemengembalikan akar polinomial sebagai vektor kolom dan solusi sistem sebagai struct bermedan variabel. - Fungsi
vpamenyediakan presisi digit arbitrer yang tetap bertipesym, sedangkandouble,subs, danmatlabFunctionmenjadi jembatan menuju ranah numerik. - Jalur simbolik paling tepat dipakai untuk menurunkan rumus, lalu hasilnya dikonversi sekali menjadi fungsi numerik untuk evaluasi berulang.
Referensi#
- Symbolic Math Toolbox — MathWorks — halaman produk resmi yang memperkenalkan cakupan Symbolic Math Toolbox untuk aljabar, kalkulus, dan penyelesaian persamaan.
- Symbolic package — Octave Forge — halaman paket symbolic milik GNU Octave yang berbasis SymPy dan menjadi lingkungan verifikasi contoh pada topik ini.
- syms — MathWorks
— halaman dokumentasi resmi untuk deklarasi variabel simbolik
symsbeserta opsinya.