Sebuah Panduan wxMaxima untuk Belajar Kalkulus untuk Mahasiswa

advertisement
Page 1 of 42
A wxMaxima Guide for Calculus Students
Diterjemahkan oleh Prof. Syamsul Rizal ([email protected])
dari:
http://www.sze.hu/~molnarka/MAXIMA/CalcTutorial.pdf
Based on:
A Maxima Guide for Calculus Students
c January 2, 2007 by Moses Glasner
e-mail: glasner AT math DOT psu DOT edu
Address:Department of Mathematics
Pennsylvania State University
University Park, PA 16802
Sebuah Panduan wxMaxima untuk Belajar Kalkulus untuk Mahasiswa
1. Kalkulator ilmiah
2. Mencari batas dengan Maxima
2.1 Merencanakan Meskipun asymptotes
2.2 Batas dari Perbedaan Hasil bagi
3. Aturan Perbedaan
3.1 Menyuling dan Memanipulasi Hasil
3.2 Derivatif Fungsi trigonometri
3.3 Aturan Rantai
3.4 Diferensiasi Implisit; Derivatif yang lebih tinggi
3.5 Terkait Tarif
3.6 Perkiraan garis lurus dan batas
3.8 Optimisasi: Mencari Maksimum atau Minimum nilai fungsi tergantung pada
pembatas
3.9 Optimasi dengan Lebih dari Satu Variabel
4. Integrasi
4.1 Teorema Fundamental Kalkulus
4.2 Perintah desolve dan ode2
4.3 Persimpangan dan Daerah Antara Curves
4.4 Volume oleh Mengiris: Menggunakan Trig Simp
5. Beberapa Metode Numerik di Maxima
5.1 Persamaan Solving
5.2 Fungsi Rekursif
5.3 Integrasi Numerik
5.4 Solusi Numerik Odes
Panduan ini merupakan panduan pengunaan Maxima bagi mahasiswa yang sedang belajar
Kalkulus. Rincian terdapat pada akhir dokumen ini. Saya berterima kepada Professsor Glasner
yang telah mengizinkan saya untuk menggunakan materi yang telah dikembangkannya. Saya
Page 2 of 42
bertanggung jawab atas kesalahan atau kekurangan jika bahan di bawah ini menyimpang dari
panduan Profesor Glasner. Silahkan hubungi saya (wmixon at berry dot edu) kalau ada koreksi
atau saran untuk perbaikan.
1. Kalkulator Ilmiah (Scientific Calculator)
Secara default Maxima hadir dengan interface pengguna grafisnya sendiri, yaitu XMaxima.
Orang yang terbiasa dengan Emacs akan lebih nyaman menggunakan Maxima di bawah
perintah pada Maxima-mode Emacs, yang menyediakan untuk lingkungan yang baik untuk
menggabungkan perhitungan dengan dokumen LaTeX. Untuk penggunaan yang sangat singkat
tidak memerlukan interaksi yang luas, Maxima dapat dijalankan dari konsol, seperti Xterm pada
Linux, atau prompt DOS di bawah Windows.
Maxima dapat dijalankan dalam dua lingkungan yang lebih rumit lainnya: TeXmacs dan
wxMaxima. TeXmacs memberikan perintah untuk mengeset output Maxima dan menyediakan
pembangkit otomatis dari sumber LaTeX sedangkan wxMaxima menyediakan menu untuk
penggunaan Maxima. Tutorial ini menggunakan wxMaxima, yang dapat digunakan untuk
mengekspor baik file html dan LaTeX (meskipun file yang diekspor kemungkinan masih
membutuhkan editing sebelum siap untuk dipublikasi).
Kita berasumsi bahwa kita telah menginstal Maxima ke komputer dan dapat menjalankannya
dari wxMaxima. Pastikan bahwa tombol F1 atau menu Help dapat digunakan untuk membuka
manual Maxima. Maxima juga menyediakan bantuan dari baris perintah dalam menanggapi
perintah untuk menjelaskan (sesuatu) atau contoh (sesuatu). Maxima akan mengajukan
pertanyaan tambahan sebelum menanggapi permintaan bantuan tersebut dan respon harus
diakhiri dengan titik koma; dan kemudian menekan tombol ENTER. Jika Kita tidak nyaman
dengan wxMaxima, kita dapat melihat pilihan Bantuan (Help option) pada website
wxMaxima.sourceforge.net/. Secara khusus, bekerja selama "10 Minute (wx)Maxima tutorial"
(kita akan menghabiskan lebih dari 10 menit).
Ketika Maxima siap untuk memproses instruksi ini, akan menampilkan %i diikuti oleh bilangan
bulat pada layar: misalnya, (%i1). Instruksi yang diberikan kepada Maxima diketik di sini. Ini
harus diakhiri dengan titik koma ; atau tanda dolar $ dan diikuti oleh penekanan pada tombol
SHIFT+ENTER.
Maxima adalah kasus sensitif. Kotak bawah ini berisi tiga perintah Maxima, masing-masing
berakhir dengan tanda titik koma. Perintah pertama menghasilkan hasil yang diharapkan. Dalam
dua lainnya kapitalisasi yang tidak tepat menghasilkan perhitungan yang salah. Perintah kedua
berisi perintah Sin yang tidak dikenali. Perintah ketiga berisi perintah untuk menghasilkan sinus
dari kuantitas yang tidak diketahui (%Pi/2). Ketika Maxima tidak bisa menafsirkan perintah,
maka ia hanya mengulangi perintah sebagai outputnya.
Page 3 of 42
Perhatikan bahwa %pi adalah cara Maxima untuk menuliskan π. Masukkan %pi di wxMaxima
menghasilkan huruf Yunani dari nama itu. Masukkan perintah sin(pi/2); dan pastikan bahwa
Maxima tidak mengevaluasinya.
(%i1) sin(%pi/2); Sin(%pi/2); sin(%Pi/2);
Mengakhiri perintah dengan tanda dolar, memberikan perintah yang dilakukan tanpa mencetak
hasil. Dalam kotak di bawah, nilai-nilai 1 dan 2 terikat pada nama a dan b. Kedua perintah
diakhiri dengan tanda dolar sehingga hasilnya tidak dicetak. Perintah ketiga, yang tersebar di
dua baris, berakhir dengan titik koma, sehingga hasilnya dicetak. Maxima mengabaikan spasi
dan pergantian baris.
(%i4) a:1$ b:2$
a+
b;
Kita mungkin menafsirkan dua ekspresi di atas setara dengan a = 1 dan b = 2. Namun Maxima
tidak. Tanda sama disediakan untuk ekspresi yang sementara benar, tetapi pernyataan kesamaan
tidak bertahan tanpa batas waktu. Perhatikan dua ekspresi di bawah ini.
(%i7) c = 5; c;
Kesamaan di bawah dinyatakan dengan tanda sama dengan. Perintah solve diterapkan pada
persamaan, dengan menggunakan simbol % untuk merujuk pada output yang paling baru
dihasilkan. Maxima tidak lagi mengingat setiap ekspresi 2*x + 1 = 7.
(%i9) 2*x + 1 = 7; solve(%, x);
Page 4 of 42
Kita dapat menyimpan ekspresi untuk nama, seperti expr1, dan kemudian kita gunakan expr1 di
tempat ekspresi itu sendiri. Perintah di bawah ini mengikat ungkapan ini ke salah satu nama,
kemudian mengikat solusi ekspresi untuk nama lain, dan akhirnya mengevaluasi ekspresi solusi
yang dihasilkannya.
(%i11) expr1: 2*x + 1 = 7$ solnx: solve(expr1, x); ev(expr1, solnx);
Sebuah penggunaan yang sangat sederhana dari Maxima adalah sebagai kalkulator ilmiah yang
presisi dan tak terbatas. Untuk menggambarkan penggunaan ini, perhatikan berikut ini, di mana
Pilihan bfloat diartikan Maxima sebagai bigfloat, dan fpprintprec:60 menghasilkan floating
presisi titik cetak.
(%i14) fpprec:60$ q : sqrt(2); 1 + q;
bfloat(q); bfloat(1+q);
Cobalah program berikut
(%i17) fpprec:4$ q : sqrt(2); 1 + q;
bfloat(q); bfloat(1+q);
Terlihat bahwa fpprec:4$ berarti menghasilkan presisi 3 desimal sebelum b0.
Ketika Maxima menyelesaikan perhitungan, semua label tetap berguna sampai Maxima
diinstruksikan untuk menyudahi mereka atau pengguna keluar dari Maxima. Jika pengguna tidak
menyadari hal ini ketika memulai penghitungan baru, hasil yang tidak diharapkan dapat terjadi.
Page 5 of 42
Instruksi kill(all) menghilangkan semua informasi, termasuk paket diload. Membebaskan label
dengan instruksi ini mungkin boros jika beberapa objek terpasang atau beberapa paket yang
dimuat, masih dibutuhkan dalam perhitungan selanjutnya. Nilai-nilai dan fungsi instruksi
meminta Maxima untuk menampilkan semua label yang saat ini melekat pada ekspresi2 atau
fungsi2. Dialog berikut menunjukkan prosedur untuk membebaskan label tertentu saja sambil
menjaga sisanya agar tetap utuh dan masih dapat digunakan.
Perhatikan penggunaan f (x): = sebagai cara ketiga untuk menghubungkan ekspresi terhadap
sebuah nama. Dalam hal ini hubungan fungsional ditetapkan.
(%i19) kill(all);
values; functions;
Pada tabel berikut dua hasil dan dua fungsi didefinisikan. Satu hasil dan satu fungsii
dihilangkan dengan kill(a,f); yang tinggal adalah hasil dari fungsi.
(%i3) a:1$ b:2$ f(x) := x^2$ g(x):=x^3 $
kill(a,f);
values; functions; g(b);
2 Menentukan Limit dengan Maxima (Finding Limits with Maxima)
Maxima dapat sangat membantu dalam memeriksa limit dari fungsi. Sebelum kita menentukan
limit, terlebih dahulu, kita perhatikan lebih teliti mengenai notasi fungsi. Ditentukan fungsi f(x)
= sin(x)/(1-x) dan kemudian dievaluasi untuk empat nilai dari . Perhatikan penggunaan daftar
perintah dan kesesuaian daftar nilai-nilai output.
Page 6 of 42
(%i11) kill(all)$
f(x) := sin(x)/(1-x);
[f(0), f(%pi/2), f(1 + h), f(x + h)];
Pemeriksaan f(x) menunjukkan bahwa f(0) tidak didefinisikan. Kita mungkin ingin, namun,
untuk menentukan nilai ke arah mana f(x) cenderung ketika x mendekati nol. Kotak di bawah
menegaskan bahwa f(0) tidak didefinisikan, dan melaporkan bahwa batas f(x) ketika x mendekati
0 adalah "tak terhingga". Ini adalah jawaban tidak memuaskan dan ini adalah cara Maxima untuk
menunjukkan tak terhingga yang kompleks (complex infinity). Maxima menunjukkan infinity
positif dengan inf dan tak terhingga negatif dengan minf. wxMaxima mengubah ini ke simbol
standar seperti yang kita lihat di bawah ini.
(%i3) f(1);
(%i4) limit(f(x), x, 1);
Kesulitan yang menghasilkan respon tak tepat "infinity" di atas dihapus ketika kita katakan
Maxima apakah x mendekati 0 dari atas ("plus") atau dari bawah ("minus").
(%i5) limit(f(x), x, 1, plus); limit(f(x), x, 1, minus);
2.1 Penggambaran Grafik Asimtot (Plotting Despite Asymptotes)
Grafik fungsi ini menyajikan sebuah tantangan, karena f(x) tumbuh tanpa limit ketika x
mendekati 1. Penggunaan skenario draw menarik dan fitur grafik di bawah ini menunjukkan
bagaimana untuk menghindari kesulitan ini. Grafik pertama tidak ada limit pada kisaran f(x),
sehingga nilai-nilai yang digambarkan pada kisaran yang relevan tidak dapat dilihat. Pemaksaan
untuk mempertimbangkan f(x) hanya bernilai antara -1 dan 1 memungkinkan untuk menggambar
grafik yang kita butuhkan. Perintah axes x dan y bersifat opsional.
Page 7 of 42
(%i7) graph1: gr2d( explicit(f(x), x, -4*%pi, 4*%pi) )$
graph2: gr2d( xaxis=true, yaxis = true, yrange= [-1, 1], explicit(f(x), x, -4*%pi, 4*%pi)
)$
wxdraw( graph1, graph2 );
Maxima dapat menangani fungsi yang melibatkan ekspresi logis. Perintah transpose(matrix([ ]))
ini digunakan untuk membuat sebuah tabel dan tidak berhubungan dengan analisis tersebut.
(%i10) g(x) := if x < 2 then x^2 else sqrt(x);
transpose( matrix([g(0), g(2.5), g(4.999), g(5), g(5.0)]) );
Maxima juga dapat digunakan sebagai kalkulator grafik, dan dapat menghitung lebih dari satu
fungsi. Perhatikan bahwa kedua grafik tidak diplot pada kisaran yang sama. Perhatikan
penggunaan String untuk membuat ekspresi fungsional kunci entri.
%i12) wxdraw2d( yrange = [-2, 5], key = string(f(x)), explicit( f(x), x, -5, 10),color = black, key
= string(g(x)) , explicit(g(x), x, -2, 10))$
Page 8 of 42
2.2 Limit dari Perbedaan Pembagian (The Limit of the Difference Quotient)
Mampu menentukan limit dari pengurangan bisa sangat membantu. Ekspresi yang mencirikan
perubahan f(x) per unit perubahan x didefinisikan di bawah ini (h adalah ukuran perubahan x).
Limit dari ekspresi ini ditentukan. Ini adalah ekspresi yang cukup panjang, tapi masih dapat
disederhanakan, seperti yang ditunjukkan. Hasil perintah ratsimp menyederhanakan ekspresi
pembagian.
(%i13) diffratio: (f(x+h) - f(x) )/h;
dr_limit: limit(diffratio, h, 0); ratsimp(%);
Limit dari difference quotient adalah turunan dari fungsi. Kesetaraan ini dikonfirmasi oleh
contoh di bawah ini. Bagian berikutnya membahas notasi untuk perintah diff(derivative).
(%i16) diff(f(x), x); ratsimp(%);
Page 9 of 42
Grafik di bawah ini menunjukkan fungsi f(x) dan turunannya untuk x dari -10 sampai 10. Secara
umum, perhatian harus diberikan pada grafik f(x) dan turunannya, karena seringkali unit y
berbeda untuk keduanya.
(%i18) wxdraw2d( yrange=[-1,10], key = "f(x)",
explicit( f(x), x, -10, 10), line_width = 2, key = "diff",
explicit( diff(f(x), x), x, -10, 10 ) )$
3 Aturan2 Diferensiasi (Differentiation Rules)
Contoh di bawah ini menunjukkan bahwa Maxima dapat menghasilkan suatu ekspresi bagi
turunan dari suatu fungsi tertentu. Bahkan, Maxima dapat melakukan lebih dari itu: Maxima
dapat menunjukkan aturan2 untuk diferensiasi, tak tergantung dari ekspresi tertentu. Kita
memastikan bahwa Maxima memahami ketergantungan2 di f(x) dan g(x), tetapi tidak
menentukan bentuk2 fungsional.
(%i19) kill(all) $ depends(f, x, g, x)$
diff(f + g, x);
diff(f*g, x); diff(f/g, x); ratsimp(%);
Page 10 of 42
Maxima mengetahui aturan2 untuk penjumlahan, perkalian, dan pembagian (dan banyak lagi
lainnya). Aturan pembagian (quotient rule) disimpan dalam bentuk yang agak berbeda. Perintah
depends(f,x) diperlukan, untuk memberitahu Maxima bahwa f adalah fungsi dari x. Kemudian
dapat menangani turunannya secara simbolis. Jika kita tidak menentukan dependensi ini, maka
instruksi diff(f,x) akan membangkitkan respon 0 dari Maxima, karena Maxima akan berpikir
bahwa f dan x hanyalah dua variabel2 independen.
Sel di bawah ini berisi perintah yang sama seperti di atas, tetapi perintah depends telah dipakai
tanda komentar (/* */), sehingga tidak dieksekusi. Karena tidak tahu tentang tentang
dependensi2 ini, Maxima menjawab atau merespons dengan 0.
(%i6) kill(all) $ /* depends(f, x, g, x)$ */
diff(f + g, x);
diff(f*g, x); diff(f/g, x);
3.1 Mengekstrak dan Memanipulasi Hasil (Exracting and Manipulating Results)
Berbagai instruksi mengontrol bentuk akhir dari jawaban yang diberikan Maxima. Jika kita ingin
jawaban menjadi sama penyebutnya sehingga lebih sederhana, misalnya, maka instruksinya
adalah factor.
(%i4) kill(all)$
f(x) := x^(1/2); g(x) := 1 + x^2;
answer: diff(f(x)/g(x), x);
factor(answer);
Untuk mengakses hanya bagian dari jawaban yang diberikan oleh Maxima, meminta Maxima
memberikan label yang dapat mengakses bagian-bagian individu. Instruksi untuk ini adalah
Page 11 of 42
pickapart. Sebagai contoh, jika kita ingin menemukan di mana turunan dalam contoh di atas
adalah sama dengan 0, maka Kita perlu label yang dapat digunakan untuk mengakses pembilang.
Hal ini dicapai dengan berikut ini. Perhatikan bahwa variabel tambahan 2 mengatakan Maxima
pada kedalaman berapa ekspresi harus dipecah menjadi beberapa bagian. Gunakan nilai terkecil
yang mendapat label yang diinginkan.
(%i5) pickapart( factor(answer),2);
Maxima telah terpasang label (%t5) and (%t6) untuk pembilang dan penyebut dari bentuk
faktor dari jawabannya. (Angka-angka ini bervariasi, tergantung pada apakah Maxima telah
menghasilkan label seperti sebelum perintah pickapart ini). Untuk melihat apa yang terjadi jika
tingkat 2 yang digantikan oleh 1, 3, dan sebagainya.
pickapart( factor(answer),1);pickapart( factor(answer),3);
Untuk menemukan nol pada pembilang, lakukan sebagai berikut:
(%i7) soln: solve(%t5,x);
Output yang dihasilkan, bernama soln, adalah daftar dengan dua elemen. (Sebenarnya segala
sesuatu di Maxima adalah daftar karena ditulis dalam bahasa komputer LISP yang didasarkan
pada list processing). Kita dapat mengakses elemen-elemen yang dalam bentuk persamaan x =
sesuatu dengan instruksi pertama kali dan kemudian nilai dari solusi ini dapat diambil dengan
instruksi rhs, atau dengan subscript yang tepat, ditandai dengan tanda kurung siku.
Page 12 of 42
(%i8) the_first_soln: soln[1]; /* or */ first(soln);
Setiap item dalam soln adalah ekspresi. Kita dapat menggunakan perintah rhs (right-hand side
atau sisi kanan) untuk mengekstrak nilai. Hal ini dapat terikat ke salah satu nama.
(%i10) the_first_soln_value : rhs(soln[1]);
3.2 Turunan Fungsi Trigonometri (Derivatives of Trigonometric Functions)
Maxima bisa sangat membantu dalam diferensiasi fungsi trigonometri. Namun, beberapa
perintah khusus untuk fungsi trigonometri diperlukan untuk menginstruksikan Maxima
menerapkan identitas trigonometri dalam penyederhanaan. Misalnya, perhatikan dialog berikut:
(%i11) kill(all)$ diff( sin(x)/(1 + cos(x)),x);
factor(%); trigsimp(%);
Instruksi trigsimp menginstruksikan Maxima untuk membuat penyederhanaan menggunakan
identitas Pythagoras. Instruksi Maxima lainnya adalah trigreduce yang memungkinkan
menggunakan beberapa rumus sudut untuk mengurangi pemangkatan, misalnya:
(%i4) factor(cos(x)^2 + 2*sin(x)^2);trigsimp(cos(x)^2 + 2*sin(x)^2);
trigreduce(cos(x)^2 + 2*sin(x)^2);
Page 13 of 42
Ekspresi yang terakhir mungkin tidak tampak sederhana daripada saat kita mulai. Namun
demikian ini sangat berharga (invaluable), untuk integrasi, proses invers dari diferensiasi (inverse
process of differentiation).
3.3 Aturan Rantai (The Chain Rule)
Sebelum Maxima dapat menerapkan aturan rantai, kita harus tahu bahwa dependencis yang
relevan ada. Pada contoh di bawah ini, f (x): = mendefinisikan hubungan eksplisit antara x dan
f(x). Adanya hubungan antara x dan u menegaskan, tetapi hubungannya tidak terdefinisikan
(%i7) f(x):= x^3;
depends(x,u)$
diff(f(x),u);
Dialog di atas menggunakan notasi fungsional untuk mendefinisikan f dan menggunakan
instruksi tergantung pada informasi Maxima bahwa x adalah fungsi dari u. Bagaimanapun, ini
tidak memberikan formula khusus untuk ketergantungan ini. Kita bisa, menentukan
ketergantungan x pada u sebagai berikut:
(%i10) remove([x,u],dependency)$
x: sin(u); diff(f(x),u);
Cara lainnya, kita dapat menggunakan notasi fungsional untuk kedua fungsi dan mendapatkan
Maxima untuk membedakan komposisi mereka. Perhatikan bahwa dalam kasus ini g(u) dan tidak
x harus dimasukkan sebagai ekspresi untuk didifferensiasi.
Perhatikan bahwa diff(f(x), u) menghasilkan 0, karena Maxima tidak lagi mengingat
ketergantungan x pada u
Page 14 of 42
(%i13) kill(x)$ g(x):= sin(x); diff(f(g(u)),u); diff(f(x), u);
Instruksi kill diperlukan untuk menghapus hubungan2 yang telah ditetapkan. Jika variabel
memiliki beberapa dependensi dan hanya satu dari mereka yang akan dihapus, maka instruksi
remove([u,x],dependency) dapat digunakan.
3.4 Diferensiasi Implisit; Turunan yang lebih tinggi (Implicit Differentiation; Higher
Derivatives)
Maxima dapat dengan mudah menghitung turunan fungsi2 implisit. Perhatikan dialog berikut
yang menginstruksikan Maxima untuk menemukan dy/dx jika diketahui persamaan x2 + y2 = 25.
(%i17) eqn: x^2 + y^2 = 25;
depends(y,x)$
deriv_of_eqn : diff(eqn,x);
solve(deriv_of_eqn,'diff(y,x));
Perhatikan simbol baru yang muncul dalam instruksi solve di atas. Biasanya argumen pertama
solve adalah persamaan atau daftar persamaan2 dan yang kedua adalah variabel dan daftar
variabel2. Disini dy/dx adalah argumen kedua. Perhatikan juga kutipan tunggal di depan
diff(y,x). Kutipan tunggal di depan simbol memberitahu Maxima untuk tidak mengevaluasi
simbol tetapi untuk memperlakukannya sebagai kuantitas yang tidak diketahui. Sebagai contoh,
(%i21) [a, b] : [4, 3]$
[a + b, 'a + b, a + 'b, 'a + 'b, '(a + b) ];
Demikian juga, instruksinya solve(deriv_of_eqn, 'diff(y,x)) memberi tahu Maxima untuk tidak
mencoba mengevaluasi turunan dari y terhadap x secara langsung (yang pada kenyataannya tidak
bisa dilakukan) tetapi Maxima menganggap diff(y,x) sebagai kuantitas yang tidak diketahui dan
memecahkannya sebagai ekspresi yang berbeda, bernama deriv_of_eqn.
Turunan yang lebih tinggi (Higher Derivatives). Instruksi Maxima untuk menemukan turunan
Page 15 of 42
yang lebih tinggi sama dengan untuk menemukan turunan pertama kecuali untuk argumen
ketiga menunjukkan orde. Perintah pertama di bawah ini setara dengan diff(x^n, x, 1).
(Konfirmasi ini.) Yang kedua dalam daftar perintah memanggil untuk turunan keempat. Perintah
ketiga panggilan untuk turunan ke-n. Sampai n ditentukan, ekspresi ini tidak dapat dievaluasi.
Latihan: Konfirmasi bahwa untuk x8, turunan ke-8 samadengan 8!. Apakah ini dapat
digeneralisasikan untuk setiap nilai n? Jelaskan.
(%i23) kill(n)$
[diff(x^n, x), diff(x^n, x, 4), diff(x^n, x, n)];
n:8$
[diff(x^n, x), diff(x^n, x, 4), diff(x^n, x, n)];
3.5 Laju (Perubahan) Terkait (Related Rates)
Maxima dapat membantu dalam memecahkan masalah laju terkait. Misalnya dalam masalah
menemukan laju perubahan luas lingkaran mengingat bahwa laju perubahan radius lingkaran
adalah dr/dt = 60 ketika t = 2 dan r = 120:
(%i27) kill(a, r)$
area: a = %pi*r^2;
depends([a,r],t)$
deriv_of_area: diff(area,t);
subst([diff(r,t)=60, r=120],deriv_of_area);
float(rhs(%));
Perhatikan bahwa Maxima harus diberitahu variabel yang dengan instruksinya tergantung waktu
depends([a list of variables], t). Instruksi subst menginstruksikan Maxima untuk mengganti
daftar persamaan muncul sebagai argumen pertama dari subst, diapit oleh kurung siku, ke
ekspresi muncul pada argumen kedua.
Default Maxima adalah untuk menghasilkan perhitungan yang tepat, bukan pendekatan
numerik. Dengan demikian, da/dt = 14400π. Perintah float(%) memerintahkan Maxima untuk
Page 16 of 42
menyediakan pendekatan floating-point ke nilai yang tepat. Kita mungkin ingin melihat berapa
banyak digit %pi (cara Maxima tentang menunjukkan nomor yang bertentangan dengan huruf
Latin), Maxima dapat menemukan dengan memberikan petunjuk fpprec= 1000$ fpprintprec:5$
bfloat(%pi);. Perintah fpprec dan fpprintprec mengatur presisi floating-point dan presisi cetak
floating-point. Ini tidak perlu memiliki nilai yang sama.
(%i19) fpprec= 1000$ fpprintprec:5$ bfloat(%pi);
3.6 Aproksimasi Linear dan Diferensial (Linear Approximations and Differentials)
Kita bisa menggunakan operasi diff untuk mengekspresikan diferensial dari persamaan sebagai
fungsi linear dari argumen2nya. Sel berikut mendefinisikan f(x) dan persamaan diferensial
didasarkan pada fungsi tersebut. Perintah diff tidak menentukan variabel yang dapat digunakan
untuk dturunkan, jadi Maxima kembali pada dy = (dy/dx) dx, di mana dx dilambangkan del (x).
Ekspresi pickapart untuk digunakan seperti di bawah ini.
(%i33) kill(all)$ f(x) := sin(x);
diff(f(x) );
pickapart(%, 1)$
Untuk membuat persamaan yang menghasilkan garis tangent terhadap f(x) pada nilai x = π/3,
kita mengevaluasi suku dy/dx pada nilai tersebut. Kemudian kita membuat fungsi linier dengan
slope yang melalui titik (π/3, f(π/3)).
(%i5) ev(%t3, x = %pi/3);
f(%pi/3) + %*(x - %pi/3);
float(%); expand(%);
Maxima memiliki alat yang sangat ampuh untuk menemukan pendekatan2 linier pada fungsi
ekspansi Taylor order 1.
Page 17 of 42
(%i9) L: taylor(f(x), x, %pi/3, 1);
Elipsis atau tiga buah titik (...) setelah output menandakan sisa, dan /T/ sebelum output
menunjukkan bahwa suku2 dilaporkan merupakan berupa representasi yang dipotong (truncated
representation) dari polinomial derajat yang lebih tinggi. Kami menggunakan taytorat untuk
mengkonversi ekspansi Taylor untuk ekspresi rasional. Perintah kedua dan ketiga di bawah ini
digunakan untuk mengekspresikan hasil dengan cara yang membuatnya sebanding dengan hasil
di atas. Keduanya sama.
(%i10) L: taytorat(L);
expand(L); float(%);
Grafik di bawah ini menunjukkan pendekatan linier terhadap fungsi, bersama dengan fungsi itu
sendiri. Grafik yang dibuat jelas salah satu aspek penting dari pendekatan linear: itu terbaik dekat
di mana ekspansi Taylor dihitung.
(%i13) wxdraw2d(
explicit(f(x), x, 0, %pi), explicit(L, x, 0, %pi))$
Page 18 of 42
Polinomial Taylor datang dalam semua derajat. Kita akan bekerja dengan polinom2 ini secara
sistematis. Argumen terakhir dalam instruksi Maxima Taylor menentukan derajat.
3.7 3.7 Menemukan Maxima dan Minima(Locating Maxima and Minima)
Maxima dapat sangat membantu dalam memeriksa proses menemukan titik kritis fungsi, seperti
dialog yang ditunjukkan berikut:
(%i14) kill(all)$
f(x):=x^(3/5)*(4-x);
deriv_of_f: diff(f(x),x);
soln: solve(deriv_of_f, x); x_crit: rhs(soln[1]);
f(x_crit) ; float(%);
Pemeriksaan output %o2, fungsi turunan, menunjukkan bahwa df/dx tidak didefinisikan ketika x
= 0. Grafik di bawah ini menunjukkan perilaku f dan df/dx. Derivatif tumbuh tanpa terikat ketika
x mendekati 0 (gunakan perintah limit untuk mengkonfirmasi ini), tetapi f kontinu.
(%i7) fgraph: gr2d( xaxis = true, explicit(f(x), x, -0.25 , 1.5*x_crit),
line_type = dots,
points_joined=true, points( [ [x_crit, 0], [x_crit, f(x_crit) ] ]) )$
diffgraph: gr2d(xaxis = true, yrange=[-5, 10],
explicit(deriv_of_f, x, -.25, 1.5*x_crit),
point_size = 2, points_joined = true, line_type=dots,
points( [[x_crit,-5],[x_crit, 10] ])
)$
wxdraw(fgraph, diffgraph)$
Page 19 of 42
Apakah kita telah menemukan maksimum atau minimum? Kondisi df/dx = 0 adalah syarat atau
kondisi yang diperlukan (necessary condition) untuk nilai f(x) menjadi (lokal) maksimum. Ini
juga merupakan syarat yang diperlukan (necessary conditon) untuk nilai f(x) menjadi (lokal)
minimum. Untuk menentukan yang mana dari yang dua itu, telah ditemukan kita harus meneliti
turunan kedua f terhadap x. Jika derivatif atau turunan kedua ini negatif, maka nilai kritis x
menghasilkan nilai (lokal) maksimum f(x); jika turunan kedua positif, (lokal) minimumlah yang
ditemukan. Dalam kasus kita, hasilnya adalah lokal (dan global, grafik menunjukkan) nilai
maksimum dari f(x).
(%i10) second_deriv: diff(f(x), x, 2);
Pemeriksaan ekspresi di atas menunjukkan bahwa turunan kedua negatif. Kita dapat
menentukan nilai yang tepat dengan menggunakan subst atau ev. Perhatikan cara-cara alternatif
mengubah jawaban yang tepat untuk nilai floating point.
(%i11) ev(second_deriv, x=x_crit)$ float(%);
float( subst(x_crit, x, second_deriv) );
3.8. Optimasi: Mencari Nilai Maksimum atau Minimum dari Fungsi yang Tergantung
Sebuah Kendala (Optimization: Finding Maximum or Minimum Values of
Functions Subject to a Constraint)
Kita menggunakan Maxima untuk memecahkan hal berikut. Sebuah jendela persegi panjang
dibatasi oleh setengah lingkaran (surmounted by a semicircle). Persegi panjang adalah kaca
Page 20 of 42
bening sementara setengah lingkaran adalah kaca berwarna yang mentransmisikan hanya
setengah banyak cahaya per satuan luas dibandingkan kaca bening. Total perimeter (keliling)
adalah tetap. Cari proporsi jendela yang akan menerima kebanyakan cahaya (that will admit the
most light). Abaikan ketebalan frame.
Diketahui r adalah radius setengah lingkaran. Maka 2r adalah dasar persegi panjang. Ketinggian
persegi panjang adalah h. Misalkan P total lingkaranjendela. Jadi P adalah konstanta tetap. Kita
memiliki persamaan2 berikut yang menghubungkan r dan h dan mengekspresikan jumlah
cahaya L dalam hal r dan h, dengan asumsi bahwa L adalah satu untuk setiap unit luas di bagian
persegi panjang dan L adalah 1/2 untuk setiap unit luas di bagian setengah lingkaran dari
jendela. Kami menunjukkan nilai tetap P sebagai P0.
(%i14) kill(all)$
P : 2*r +2*h + %pi*r$ L : 2*r*h + %pi*r^2/4$
print("Perimeter = ", P, ", and Light = ", L)$
soln_h : solve(P = P0,h);
Kita mengambil sisi sebelah kanan dari solusi dan menamakannya h_is. Ekspresi ini
disubstitusikan menjadi ekspresi L, menghasilkan L sebagai fungsi r (ingat bahwa P memiliki
nilai konstan P0).
(%i5) h_is : rhs(first(soln_h));
L_fcn_r : ratsubst(h_is,h,L);
Lakukan turunan dari L_fcn_r dan atur turunan sama dengan nol, menghasilkan ekspresi untuk
r. Ekspresi r ini sebanding dengan P0.
(%i7) deriv_L :diff(L_fcn_r,r);
soln_r:solve(deriv_L = 0,r);
Page 21 of 42
Kita menetapkan sisi kanan dari solusi bernama r_is dan kami mengganti r_is menjadi ekspresi
h_is, menghasilkan ekspresi h_is_now, yang menunjukkan bahwa h, seperti r, sebanding dengan
P.
Bahwa nilai-nilai kritisdari h dan r sebanding dengan P0 menyiratkan bahwa mereka sebanding
satu sama lain.
(%i9) r_is: rhs(soln_r[1]);
h_is_now: subst(r_is, r, h_is), ratsimp;
h_is_now / r_is, ratsimp;
Akhirnya, kita dapat menentukan cahaya maximum, yang dihasilkan di keliling jendela.
(%i12) max_L : subst([r=r_is, h=h_is_now], L)$
ratsimp(%);
Pendekatan alternatif untuk memecahkan masalah seperti ini adalah to differentiate the
constraint equation. Hal ini secara signifikan lebih sederhana daripada memecahkan persamaan
kendala untuk salah satu variabel dalam kasus di mana persamaan kendala rumit atau mungkin
bahkan tidak dapat diselesaikan untuk salah satu variabel.
Dalam masalah di atas kita mendifferensiasi persamaan untuk perimeter terhadap r. Ini
menghasilkan persamaan linear dalam derivatif dh/dr yang tidak diketahui, yang dapat dengan
mudah dipecahkan. Kemudian kita mendifferensiasi rumus untuk L terhadap r dan ini juga akan
melibatkan derivatif dh/dr yang tidak diketahui, yang sekarang dapat dihilangkan. Dan kemudian
Page 22 of 42
kita bisa menentukan hubungan antara r dan h yang menghasilkan titik kritis. Dialog berikut
menunjukkan bagaimana Maxima dapat diinstruksikan untuk melaksanakan perhitungan ini.
(%i14) kill(all)$ depends(h,r)$
P : 2*r +2*h + %pi*r$
L : 2*r*h + %pi*r^2/4$
deriv_P : diff(P-P0,r);
(%i5) solve(deriv_P,
diff(h, r));
deriv_h : rhs(%[1]);
(%i7) deriv_L : diff(L,r);
(%i9) deriv_L_is: ratsubst(deriv_h, 'diff(h,r), deriv_L);
(%i10) solve(deriv_L_is = 0, r);
3.9 Optimasi dengan Lebih dari Satu Variabel (Optimization with More than One Variable)
Misalkan kita ingin membangun sebuah kotak yang memiliki luas permukaan yang diketahui
dalam konfigurasi yang menghasilkan volume maksimal. Pendekatan Lagrangian untuk
memecahkan masalah seperti ini, untuk menciptakan ekspresi tambahan (augmented expression)
dan menggabungkannya dengan kendala. Ekspresi A dalam sel di bawah ini ditambahkan
pengali mu dikali kendala menjadi ekspresi untuk volume. Kendala tersebut dinyatakan dengan
nilai mu (μ) dikalikan nol.
(%i11) kill(all)$
V: L*W*H; S: 2*(L*W + L*H + W*H);
A: V + mu*(S0 - S);
Page 23 of 42
Kita sekarang mengambil semua kemungkinan turunan dari ekspresi yang ditambahkan,
termasuk turunan terhadap μ, yang merupakan kendala. Baris terakhir ditambahkan hanya untuk
membuat output lebih mudah untuk dibaca.
Kita memecahkan sistem persamaan2 untuk derivatif terhadap L, W, dan H. Nilai μ akan tersirat,
seperti yang kita lihat di bawah.
(%i4) A_L
: diff(A, L);
A_W : diff(A, W);
A_H : diff(A, H);
A_mu : diff(A, mu);
soln: solve([A_L, A_W, A_H], [L, W, H]);
transpose( matrix(soln) );
Maxima menghasilkan dua solusi. Yang pertama, L = W = H = 0, menghasilkan minimum.
Dalam hal ini, μ harus sama dengan nol agar S0 - S = 0 agar memenuhi (S0> 0 dan S = 0).
Interpretasinya adalah jika menambah S, tidak lagi menurunkan V; minimum telah tercapai.
Solusi kedua menyediakan kondisi untuk sebuah V yang maksimum. Disini, L = W = H = 4 * μ.
Contoh di bawah ini menggambarkan hasil ini. Misalkan S = 60 meter2. Kemudian 2*(3*L2) =
60, sehingga L = √(10) meter.
(%i10) solnL0: solve(60 - 6*L^2, L);
Page 24 of 42
Volume yang dihasilkan adalah 10 (3/2) meters3, sekitar 31,6228 meters3
(%i11) L0:
rhs(solnL0[2]);
V0: ev(V, L = L0, W = L0, H = L0);
float(%);
Nilai μ adalah sqrt(10)/4, sekitar 0,7906. Oleh karena itu perubahan S dari 60 menjadi 61
meters2, akan meningkatkan V sekitar 0,7906 meters3. Hasil di bawah ini menunjukkan bahwa
peningkatan yang sebenarnya adalah sekitar 0,7939 meters3. Konfirmasi bahwa perbedaan antara
L0/4 = μ dan nilai aktual menurun ketika h berkurang dengan menggunakan nilai-nilai h0 yang
lebih kecil.
Kita dapat mengkonfirmasi bahwa μ memiliki satuan yang sama dengan L, W, dan H: μ adalah
rasio perubahan volume (meters3) terhadap perubahan permukaan (meters2). Dengan demikian,
satuan untuk μ adalah meter, sama dengan L, W, dan H.
(%i14) h0: 1$ S1: 60 + h0$
solnL1 : solve(S1 - 6*L^2, L)$ L1: rhs(solnL1[2])$
V1: ev( V, L = L1, W = L1, H = L1)$ float(%);
float( [(V1 - V0)/h0, L0/4]);
Teknik Lagrangian dapat diterapkan dalam beberapa kendala. Misalkan tinggi kotak diperlukan
samadengan satu-setengah panjang. Kita mendefinisikan fungsi yang baru ditambahkan (new
augmented function) yang menambahkan kendala ini ke fungsi augmented A. Kita kemudian
menghasilkan himpunan derivatif dan memecahkan L, W, H, dan kappa (κ), pengali atau
multiplier baru.
Page 25 of 42
(%i21) A2 : A + kappa*(.50 - H/L);
A2_L : diff(A2, L);
A2_W : diff(A2, W);
A2_H : diff(A2, H);
A2_mu : diff(A2, mu);
A2_kappa: diff(A2, kappa);
soln2: solve([A2_L, A2_W, A2_H, A2_kappa], [L, W, H, kappa])$
transpose( matrix(soln2) );
Sekali lagi, Maxima menghasilkan dua solusi. Yang pertama menunjukkan kondisi untuk
meminimalkan volume, dan yang kedua untuk memaksimalkannya. Sekarang nilai-nilai L, W,
dan H semua berbeda satu sama lain.
Kondisi untuk κ = 24μ2 perlu perhatian. Nilai κ sebanding dengan volume kotak itu (ingat bahwa
μ adalah dalam satuan yang sama dengan L, W, dan H).
(%i29) [L2 : rhs(soln2[2][1]), W2 : rhs(soln2[2][2]), H2 : rhs(soln2[2][3]),
kappa2 : rhs(soln2[2][4])];
soln_mu2 : solve(2*(L2*W2 + L2*H2 + W2*H2)- 60, mu)$ float(%);
Page 26 of 42
Nilai mu dari sekitar 0,7906 menjadi sekitar 0,7454, sehingga volume yang sedikit ditambahkan
untuk setiap unit merubah luas permukaan. Kita evaluasi kembali L2, W2, H2, dan κ2 diberi
nilai positif dari μ - soln_mu2 [2] - dan kemudian menghitung volume baru.
Nilai κ memperkirakan bahwa kenaikan 0,01 unit dalam rasio (dari 0,5 menjadi 0,51) akan
menyebabkan volume naik mendekati 0,0994 meter3. Ganti 0,5 dengan 0,51 di atas dan pastikan
bahwa kenaikan yang sebenarnya adalah sekitar 0,0973.
(%i32) [L2, W2, H2, kappa2] : ev([L2, W2, H2, kappa2], soln_mu2[2])$ float(%);
V2 : L2 * W2 * H2$ float(%);
(%o33) [4.4721,2.9814,2.2361,9.9381]
(%o35) 29.814
Untuk S = 60, luas maksimum sekarang sekitar 29,8142 meters3, turun dari sekitar 32,4166
meters3 ketika hubungan antara L, W, dan H tidak dibatasi.
4 4 Integrasi (Integration)
Sintaks integrasi terbatas menyerupai diferensiasi, dengan mengintegrasikan mengganti diff,
kecuali bahwa beberapa integrasi (multiple integration) membutuhkan beberapa panggilan untuk
mengintegrasikan. Ekspresi umum di bawah ini menunjukkan bahwa Maxima tidak memberikan
konstanta integrasi. Terserah analis untuk melacak.
(%i36) kill(all)$
/* Indefinite integrals */
["Single integral: ", integrate(f(x), x),
" Double integral: ", integrate(integrate(f(x,y), y), x ) ];
/* A definite integral */
["Single definite integral: ", integrate(f(x), x, a, b) ];
Dengan fungsi yang sama f(x, y) = x4/y, kita menemukan integral tak tentu dan tentu (the
indefinite and definite integrals) dari ekspresi terhadap x. Integral tertentu adalah dalam rentang
x = 0 sampai x = 5. Kemudian dilakukan integral terhadap y, dengan integral tertentu dalam
rentang y = 1 dan y = 2.
Page 27 of 42
(%i3) f(x, y) := x^4 / y;
integrate(f(x, y),x ); integrate(%, y);
integrate(f(x, y), x, 0, 5); integrate(%, y, 1, 2); float(%);
Output juga dapat dibangkitkan dalam perintah tunggal. Menetapkan limits sebagai titik float,
yang membuat pernyataan untuk menentukan sebuah substitusi yang dapat membuat Maxima
melakukan operasi. Menambahkan perintah ratprint: false pada baris pertama, akan
menghasilkan output yang diinginkan.
(%i10) ratprint: false$ integrate(integrate(f(x, y), x, 0, 5), y, 1.0, 2.0 );
(%o11) 433.22
Limit dari jumlah Riemann, jika ada, mendefinisikan integral tertentu fungsi pada [a, b].
Evaluasi sebenarnya dari limit dari jumlah2 Riemann terkait dengan fungsi pada interval
membosankan (on an interval is tedious). Maxima dapat membantu. Instruksi Maxima untuk
menjumlahkan seri adalah sum. Perintah sum mengambil empat argumen: ekspresi, indeks, nilai
awal indeks, dan nilai akhir dari indeks.
Seperti sebelumnya, perintah print tidak diperlukan, tapi itu membuat hasilnya lebih mudah
dibaca.
(%i10) kill(R_sum)$
wxdraw2d( explicit(x^4, x, 2, 5) )$
Page 28 of 42
(%i15) print( R_sum: (3/n)*sum((2+3*i/n)^4,i,1,n), " = ", ratsimp(R_sum) )$
Default Maxima adalah tidak melakukan evaluasi dari sum of a series. Instruksi untuk mengubah
ini adalah simpsum : true.
(%i19) simpsum:true$ print( "The Riemann sum of x^4 is ",
R_sum: ratsimp( (3/n)*sum((2+3*i/n)^4,i,1,n) ),
", whose limit is ",
float( limit(R_sum, n, infinity) ) )$
Hasil dari integral tertentu yang sesuai menegaskan bahwa integral sama dengan limit
penjumlahan Riemann (limit of the Riemann sum).
(%i21) float( integrate(x^4, x, 2, 5) );
(%o21) 618.6
4.1 Teorema Fundamental Kalkulus (The Fundamental Theorem of Calculus)
Bahwa Maxima tahu Teorema Fundamental Kalkulus, dapat diilustrasikan di bawah ini.
Ekstensi, berlabel "Chain rule illustrations", menunjukkan fleksibilitas fungsi lambda.
Perhatikan penggunaan operator kutipan tunggal untuk menghilangkan (suppress) evaluasi.
(%i16) kill(all)$
Page 29 of 42
assume(x>0)$
S : lambda( [x], integrate(a*log(t),t,0,x));
answr:diff(S(x),x);
["Chain rule illustrations: ", 'diff(S(x^3),x), " = ", diff(S(x^3),x) ] ;
[ 'diff(S((1/x)),x) , " = ", diff(S((1/x)),x)];
Tanpa perintah assume(x > 0) Maxima akan meminta user untuk mendeklarasi tanda dari x.
Nama variabel dummy t dalam definisi S tidak dapat dipilih untuk menjadi x meskipun itu dapat
diterima secara sempurna dalam komunikasi matematika.
4.2 Perintah desolve dan ode2 (The Commands desolve and ode2)
Instruksi Maxima integrate menyajikan salah satu dari dua tujuan, tergantung pada jumlah
argumen yang dilewatkan ke sana. Hal ini digunakan untuk memberitahu Maxima untuk
menemukan baik integral tak tentu atau tentu (indefinite or definite integral). Jika dua argumen
dipakai maka Maxima menemukan integral tak tentu dari fungsi dalam argumen pertama yang
mempertimbangkan variabel di kedua. Jika empat argumen yang dipakai, maka Maxima
menemukan integral tertentu dalam interval dimulai bagian ketiga dan berakhir di bagian
keempat.
Instruksi lain yang dapat digunakan untuk mencapai tujuan yang sama adalah ode2. Hal ini dapat
digunakan untuk menginstruksikan Maxima untuk memecahkan persamaan dy/dx = f (x), atau dy
= f(x) dx untuk y. Ini adalah instruksi yang sangat ampuh. Berikut ini menunjukkan bagaimana
hal ini dapat dilakukan. Perintah ode2 mengikuti perintah akrab integrate
(%i6) eqn: 'diff(y,x) = sqrt(1/x^2-1/x^3);
integrate(rhs(eqn), x);
ode2(eqn,y,x);
Page 30 of 42
Setiap kali Maxima diserahkan ekspresi secara otomatis mencoba untuk mengevaluasinya. Oleh
karena itu kutipan sebelum diff memberitahu Maxima tidak membuang-buang waktu mencoba
untuk mengevaluasi dy/dx. Maxima diberitahu apa derivatif ini dan instruksi berikutnya meminta
untuk memecahkan y. Perhatikan bahwa ketika kita menggunakan ode2 Maxima termasuk
konstanta sembarang yaitu %c dalam tanggapannya.
Berikut ode singkatan ordinary differential equation atau persamaan diferensial biasa. Dari
Maxima Manual: "Fungsi ode2 memecahkan persamaan diferensial biasa (ODE) dari
ordepertama atau kedua". Perintah Maxima lain, desolve, dapat digunakan untuk memecahkan
sistem satu atau lebih dari persamaan2 diferensial biasa.
4.3 Perpotongan dan Luas Daerah antara Kurva (Intersections and Areas Between Curves)
Maxima dapat sangat membantu dalam menemukan titik perpotongan dari kurva. Sel bawah
menunjukkan bagaimana menjalankannya.
Maxima tidak mengintegrasikan nilai absolut. Jadi untuk mendapatkan Maxima untuk melakukan
masalah di mana tidak ada grafik tetap di atas yang lain pada seluruh selang, pertama-tama kita
menemukan titik perpotongan dan kemudian menginstruksikan Maxima untuk menjumlahkan
integral dari fungsi atas minus fungsi yang lebih rendah pada interval yang relevan.
Perintah draw2d bawah ini memiliki lebih detail dari yang dibutuhkan untuk memecahkan
masalah ini, tapi detail tersebut dapat berguna. Maxima Manual (Bab 48) berisi informasi lebih
lanjut mengenai pilihan untuk perintah draw.
Page 31 of 42
(%i9) kill(all)$
[f1, f2] : [x^2 + 10, -2*x^2 + 25*x]$
wxdraw2d(title = "Region bounded by two functions",
fill_color = gray, filled_func = f2,
explicit(f1,x,0,10), filled_func = false,
line_width = 2, key = concat("f1: ", string(f1) ),
color = red, explicit(f1,x,0,10),
key = concat("f2: ", string(f2) ), color = blue,
explicit(f2,x,0,10) );
Gunakan solve untuk menentukan kisaran yang f2> f1.
(%i3) soln : solve(f1=f2, x)$ float(%);
Luas yang akan ditentukan adalah integral dari f2 - f1 pada interval ini.
(%i5) x1 : rhs(soln[1])$ x2: rhs(soln[2])$
float( integrate(f2 - f1, x, x1, x2) );
4.4 Volume oleh Irisan: Menggunakan Trigsimp (Volumes by Slicing: Using Trigsimp)
Maxima tidak bisa membantu dengan mencari formula untuk daerah penampang potong khas
A(x) tapi itu sangat membantu dalam memeriksa integrasi berikutnya.
Page 32 of 42
Sebagai contoh, carilah volume yang dihasilkan oleh daerah berputar di bawah y = sec (x), di
atas y = 1 dan x = 1 antara dan x = -1. Ini membutuhkan mengevaluasi integral dari ekspresi V =
sec2 (x) - 1 pada rentang yang ditunjukkan.
Perintah trigsimp (singkatan dari trigonometric simplification) digunakan untuk ekspresi
trigonometri seperti ratsimp yang digunakan untuk ekspresi rasional.
(%i8) A : (sec(x))^2 - 1;
B : trigsimp(A);
integrate(A, x, -1, 1);
integrate(B, x, -1, 1); float(%);
Output menunjukkan, Maxima bisa menemukan integral tanpa instruksi trigsimp, tetapi kita
harus menyadari bahwa itu tersedia. Instruksi ini menyebabkan Maxima untuk menggunakan
identitas Pythagoras untuk menyederhanakan ekspresi. Instruksi seperti ratsimp akan tidak
berpengaruh di sini. Unit pada Maxima adalah radian, sehingga tan (1) bersinggungan ketika x =
1 radian, atau π/180 derajat.
Perhatikan "Nilai Utama" ("Principal Value") menunjukkan bagaimana Maxima mendekati
masalah ini. "Nilai Utama" mengacu pada nilai utama Cauchy, yang merupakan integral terbatas
dari fungsi sekitar titik c, dalam rentang integrasi. Ini adalah limit dari fungsi yang ditampilkan
di bawah ini sebagai epsilon yang mendekati nol dari atas.
(%i1) kill(f)$
limit('integrate(f(x), x, a, c - %epsilon)) + 'integrate(f(x), x, c + %epsilon, b);
Page 33 of 42
4.5 4.5 Volume dengan Shells Silinder; Menggunakan Trigreduce dan Trigexpand
(Volumes by Cylindrical Shells; Using Trigreduce and Trigexpand)
Sekarang kita menentukan volume padat yang dihasilkan oleh daerah berputar antara y = cos x, y
= 0 dan garis x = 0, x = π / 2 pada sumbu x. Dengan menggunakan metode shell, integral dapat
dihitung sebagai berikut:
(%i13) A : x*cos(x)^-1;
B: trigreduce(z);
integrate(z, x, 0, %pi/2);
integrate(x*cos(x)^-1, x, 0, %pi/2);
Ini adalah integral yang sulit yang membutuhkan integrasi secara parsial. Metode disk
menghasilkan integral yang dapat dievaluasi:
(%i7) [%pi*'integrate(cos(x)^2, x, 0, %pi/2), " = ",
%pi*integrate(cos(x)^2, x, 0, %pi/2)] ;
Jika Kita bekerja masalah seperti ini sebagai latihan, Kita akan perlu untuk mengingat formula
sudut ganda/setengah. Maxima dapat membantu.
Page 34 of 42
(%i8) halfangles: true$
A: cos(x)^2;
B: trigreduce(A);
C: trigexpand(B);
D: trigsimp(C);
Dialog ini menunjukkan bahwa trigreduce memberitahu Maxima menggunakan rumus2 setengah
sudut untuk menyederhanakan ekspresi dan trigexpand memberitahu Maxima menggunakan
rumus ganda sudut.
5 Beberapa Metode Numerik di Maxima (Some Numerical Methods in Maxima)
Dalam banyak kasus kita tidak dapat menemukan solusi analitis untuk sebuah masalah. Maxima
menawarkan berbagai metode numerik untuk menemukan nilai-nilai perkiraan dalam kasus
tersebut.
5.1 5.1 Menyelesaikan Persamaan (Solving Equations)
Mencari solusi untuk persamaan atau sistem persamaan adalah aplikasi penting dari analisis
numerik. Perhatikan persamaan di bawah ini, yang menggunakan solve tidak mempunyai solusi
analitis.
(%i13) f(x, a, b) := x^a - b*log(x);
[a0, b0] : [0.8, 5]$
solve(f(x, a0, b0), x);
Page 35 of 42
Bila menggunakan metode numerik untuk menemukan akar2, kita harus menggambar grafik dari
ekspresi(s) yang diselesaikan. Grafik dapat menunjukkan apakah beberapa akar diharapkan pada
rentang yang relevan. Hal ini juga dapat membantu pemilihan tebakan untuk menduga nilai-nilai
sebagai awal untuk metode pencarian berulang (iterative search methods).
Grafik di bawah menunjukkan bahwa akar terjadi di sekitar x = 0 dan untuk sekitar x = 40.
Fungsi tidak didefinisikan untuk x = 0. Mengapa?
(%i16) wxdraw2d( xaxis = true, yaxis = true,
explicit(f(x, a0, b0), x, -10, 50))$
Perintah find_root digunakan pertama. Perintah ini membutuhkan ekspresi yang akan dievaluasi,
argumen ekspresi, dan titik akhir interval. Jika tanda f(x) adalah sama pada kedua titik akhir,
hasilnya meriupakan pesan kesalahan.
(%i17) find_root(f(x, a0, b0), x, 1, 50);
Page 36 of 42
Mempersingkat interval menjadi [.0001, 10]. (Mengapa tidak [0, 10]?). Akar pertama sekitar x =
1,2750. f(x, a0, b0), hasilnya hampir nol. Perbedaan ini mencerminkan kesalahan dalam proses
pencarian (error in the search process)..
(%i18) find_root(f(x, a0, b0), x, 0.001, 10);
f(%, a0, b0);
Akar kedua sekitar x = 1,2749, ditemukan dengan cara yang sama. Sekali lagi, f(x, a0, b0) yang
dihasilkan adalah sekitar 0; 0.0 adalah pendekatan floating-point dari 0.
(%i20) find_root(f(x, a0, b0), x, 30, 50);
f(%, a0, b0);
Pendekatan alternatif adalah dengan menggunakan proses pencarian Newton (Newton search
process). Melakukan hal memerlukan loading modul newton. Ini adalah modul untuk
menerapkan proses Newton terhadap satu persamaan. Perintah newton sedikit berbeda dari
find_root. Hal ini membutuhkan ekspresi, argumen ekspresi, dugaan nilai awal, dan tingkat
toleransi (It requires the expression, the expression's argument, an initial guess of the value, and
a tolerance level). Proses ini bekerja lebih baik jika menebak dekat dengan akar, dan grafik dapat
memberikan panduan.
(%i22) load(newton1)$
newton(f(x, a0, b0), x, 1, .0000000001);
newton(f(x, a0, b0), x, 40, .0000000001);
Metode Newton dapat diperluas untuk beberapa persamaan. Selama jumlah persamaan (dan tidak
diketahui) kurang dari 4, grafik masih dapat digunakan untuk memandu proses pencarian.
Tinjaulah dua persamaan di bawah ini. Untuk menghindari grafik tiga dimensi, kita
menggunakan perintah implicit dalam draw2d. Grafik menunjukkan x, y pasangan x, y untuk f(x,
y) = 0 dan g(x, y) = 0. Karena f (0, y) tidak didefinisikan, fungsi implisit terputus atau
discontinuous di x = 0.
Page 37 of 42
Grafik menunjukkan bahwa f(x, y) = g(x, y) = 0 pada dua nilai2 x: lebih dari -1.0, dan lebih dari
1,0.
(%i1) kill(all)$
f(x,y) := 2*(3^x) - y/x - 5; g(x,y) := x + 2^y - 4;
wxdraw2d(
key = "f(x, y)", implicit(f(x,y), x, -2, 5, y, -2, 5),
color = green, key = "g(x, y)",
implicit(g(x,y), x, -2, 5, y, -2, 5) )$
Untuk menentukan akar untuk multiple expressions, kita akan memuat modul mnewton dan
masukkan perintah mnewton. Argumen perintah yang ini terdiri dari tiga daftar: daftar ekspresi,
daftar variabel, dan daftar tebakan. Tingkat toleransi harus diatur secara eksplisit jika seseorang
ingin menggunakan nilai selain default.
Karena grafik mengidentifikasi dua pasangan x, y yang merupakan akar2 untuk kedua
persamaan2, kita menjalankan mnewton dua kali.
(%i4) load(mnewton)$
soln1: mnewton( [f(x, y), g(x, y)], [x, y], [-1, 2] );
soln2: mnewton( [f(x, y), g(x, y)], [x, y], [1, 1.5] );
Page 38 of 42
Kita mengekstrak nilai kritis atas dan memeriksa nilai2 fungsi. Solusi2 dinyatakan sebagai
daftar, sehingga dengan mengekstrak nilai-nilai ini membutuhkan indeks ganda (meskipun daftar
top-level hanya satu item).
(%i7) [x1, y1] : [rhs(soln1[1][1]), rhs( soln1[1][2]) ];
[x2, y2]: [rhs(soln2[1][1]), rhs( soln2[1][2]) ];
[ f(x1, y1), g(x1, y1) ];
[f(x2, y2), g(x2, y2)] ;
5.2 Fungsi Rekursif (Recursive Functions)
Ini menjadi latihan yang baik untuk mendefinisikan fungsi Maxima sendiri yang
mengimplementasikan metode Newton. Melakukan hal ini menunjukkan cara untuk berurusan
dengan fungsi rekursif di Maxima.
(%i11) kill(all)$
my_newt(f,guess,prec):= block([f_x,der_x,x_new],
f_x : f(guess),
der_x : subst(guess,x, diff(f(x),x)),
x_new : guess - f_x/der_x,
if abs(x_new - guess) < prec then return(guess)
else my_newt(f,x_new,prec))$
g: lambda([x],x^2 -2);
my_newt(g,1.5,.0001);
Page 39 of 42
Definisi my_newt bersifat rekursif. Artinya, definisi fungsi memanggil fungsi itu sendiri sampai
presisi yang diinginkan tercapai. Dari sudut pandang kejelasan program ini adalah metode
pilihan. Saat memanggil my_newt, definisi lambda fungsi harus digunakan karena nama fungsi f
dipakai my_newt.
5.3 Integrasi Numerik (Numerical Integration)
Maxima menyediakan satu set opsi2 untuk melakukan integrasi numerik. Untuk menggambarkan
dua dari opsi2 ini, kita menggunakan fungsi di bawah ini. Hal ini dapat diintegrasikan, sehingga
pendekatan numerik tidak perlu diambil, tapi kita menggunakannya sebagai dasar untuk
perbandingan.
(%i1) kill(all)$ f(x) := x^(1/2)*log(1/x)$
wxdraw2d( explicit(f(x), x, 0, 1) )$
integrate(f(x), x, 0, 1);
float(%);
(%o3) 4/9
(%i4)
(%o4) 0.44444444444444
Sebuah metode yang relatif sederhana untuk menerapkannya adalah metode Romberg. Perintah
Maxima romberg memiliki sintaks yang sama dengan perintah integrate. Untuk fungsi di atas,
romberg tidak dapat mengevaluasi integral pada seluruh rentang karena tidak dapat menangani
Page 40 of 42
f(0). Kita menggunakan f(1e-100) sebagai gantinya. Perintah romberg dapat menangani nilainilai sekecil f(1e-320). Untuk fungsi ini perintah romberg menghasilkan solusi dengan kesalahan
setelah desimal keempat. Konfirmasi perpindahan nilai awal mendekati nol dengan
menggunakan 1e-300 tidak mengubah hasilnya secara signifikan.
%i5) romberg(f(x), x, 1e-100 , 1 );romberg(f(x), x, 1e-300 , 1 );
Sebuah metode yang lebih canggih (set metode, sebenarnya) tersedia di QUADPACK. Kita
tinjau salah satu contoh, menggunakan perintah quad_qag. Perintah ini mengandung setidaknya
lima argumen. (Manual Maxima mendiskusikan argumen opsional.) Empat pertama adalah sama
dengan integrate dan romberg. Argumen kelima adalah kunci yang menentukan rincian metode
pencarian dan tergantung pada pengetahuan user dari karakteristik fungsi itu.
Dalam contoh ini quad_qag menyediakan pendekatan lebih dekat dengan nilai yang benar
daripada romberg. Tiga bagian lain dari output ini: kesalahan estimasi metode (cukup kecil di
sini), jumlah iterasi yang dilakukan, dan kode kesalahan (0 berarti tidak ada kesalahan).
(%i7) quad_qag (f(x), x, 0, 1, 3);
Teknik Romberg dapat diterapkan untuk integrasi multidimensi, seperti dalam contoh ini.
Perintah assume(x > 0) dimasukkan untuk menghindari berurusan dengan dialog. Hapus baris ini
dan tentukan nilai sekali lagi.
(%i7) g(x, y) := x*y / (x + y);
estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
assume(x > 0)$
integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3); float(%);
Page 41 of 42
5.4 Solusi Numerik Odes (Numerical Solution of ODEs)
Beberapa persamaan diferensial biasa atau ordinary differential equations (ODEs), atau sistem
ODEs, tidak dapat diselesaikan secara analitis. Solusi numerik dari sistem ini dapat memberikan
wawasan yang sebaliknya, sehingga bisa diselesaikan. Sebuah contoh klasik adalah persamaan
Lorenz yang digunakan untuk mewakili gerakan konvektif dari sel fluida yang dihangatkan dari
bawah dan didinginkan dari atas. Set yang sama dari persamaan ini dapat diterapkan pada
analisis dinamo dan sinar laser. Banyak buku menganalisis sifat sistem ini, yang paling terkenal
adalah James Gleck's Chaos.
Persamaan yang terdiri dari sistem ini diberi nama dxdt (for dx/dt), dydt, and dzdt.Variabel t
adalah waktu. Parameter a, b, dan c semuanya positif: a disebut bilangan Prandtl, b disebut
bilangan Rayleigh, dan c adalah faktor proporsionalitas.
Nilai-nilai x, y, dan z bukanlah koordinat2 dalam ruang fisik. Sebaliknya nilai x sebanding
dengan intensitas gerak konvektif, dan y sebanding dengan perbedaan suhu antara naik dan
turunnya arus. Akhirnya, z adalah propotional dengan distorsi profil temperatur vertikal dari
linearitas. Tentu saja, x, y, dan z memiliki interpretasi berbeda dalam aplikasi lain dari himpunan
persamaan2 ini.
(%i13) kill(all)$ a: 10$ b: 28$ c: 2.667$
dxdt : a*(y - x); dydt: x*(b - z) - y; dzdt : x*y - c*z;
Sel di bawah ini menunjukkan bagaimana Maxima menggunakan metode Runge-Kutte (rk)
untuk memberikan solusi numerik untuk nilai-nilai x, y, dan z pada titik-titik dalam waktu. Hasil
dari 1000 solusi rk ditempatkan ke dalam daftar nama. Perintah rk memiliki argumen ini: nama
(s) dari ekspresi (s), nama (s) atau variabel (s), nilai awal (s) atau variabel (s), dan domain tempat
solusinya terjadi. Domain itu sendiri memiliki empat unsur: nama variabel independen (waktu, di
sini), nilai awal variabel itu, nilai akhir, dan penambahan atau increment. Dalam contoh di bawah
waktu berkisar dari t = 0 sampai t = 100, dengan penambahan sebesar 0,01, sehingga Maxima
menghasilkan daftar 10.000 set nilai-nilai.
Pertama, kedua, ke-9999, dan daftar ke-10000 nilai muncul sebagai output. Masing-masing dari
keempat item menunjukkan waktu, nilai x, nilai y, dan nilai z.
Page 42 of 42
(%i7) fpprintprec:5$
data: rk([dxdt, dydt, dzdt],[x,y,z],[-15,20,-5],[t,0,100,0.01])$
matrix( ["time", "x", "y", "z"], data[1], data[2], ["...", "...","...","..."],
data[length(data) - 1], data[length(data)] );
Di bawah ini, kita membuat daftar dari 10.000 nilai-nilai variabel x, y, dan z dan menunjukkan
interaksi mereka. Grafik menunjukkan bahwa sistem tidak cenderung ke arah satu titik,
melainkan berosilasi sekitar dua titik. Titik2 ini disebut atraktor2 aneh (strange attractors).
Sumbu y diberi label; posisi label x dan z dapat dideduksi. Grafik dibuat dengan titik2 opsi.
Latihan yang disarankan: mengubah salah satu nilai awal dalam perintah rk dan melacak
dampak2 perubahan itu. Membuat perubahan kecil. Sebagai contoh, jika nilai awal baru x
menjadi 15,1 atau 14,9 dan bukan 15.
Sangat instruktif untuk menghapus wx dari perintah draw dan menjalankan perintah lagi. Ini
menghasilkan jendela gnuplot yang memungkinkan kita memutar grafik. Jendela ini harus
ditutup sebelum wxMaxima dapat melanjutkan ke perintah selanjutnya.
(%i10) uL: makelist([data[i][2],data[i][3],data[i][4]],i,1,length(data))$
wxdraw3d(view = [36, 336], ylabel = "y", xaxis=true, yaxis=true, points(uL))$
Download