Penggunaan maxima

42
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

description

Bagaimana menggunakan maxima

Transcript of Penggunaan maxima

Page 1: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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 + y

2 = 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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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).

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);

(%i5) h_is : rhs(first(soln_h));

L_fcn_r : ratsubst(h_is,h,L);

Page 21: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

Page 24 of 42

Volume yang dihasilkan adalah 10 (3/2) meters3, sekitar 31,6228 meters

3

(%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 meters

3. 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 (meters

2). 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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

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: Penggunaan maxima

Page 40 of 42

f(0). Kita menggunakan f(1e-100) sebagai gantinya. Perintah romberg dapat menangani nilai-

nilai 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: Penggunaan maxima

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: Penggunaan maxima

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))$