10 minute read

Saat kuliah dulu di Matematika, salah satu software yang menjadi andalan saya mengarungi perkuliahan adalah Maple (Mathematical Pleasure).

Courtesy: maplesoft.com

Courtesy: maplesoft.com

Memangnya apa sih kegunaannya?

Apakah kalian tahu layanan Microsoft bernama MathSolver?

Sebelum Microsoft membuat MathSolver, sudah ada Maple yang bisa digunakan untuk menurunkan formula, membuktikan teorema, membuat simulasi, dan membantu menyelesaikan masalah atau model matematika.

Selepas lulus kuliah, otomatis saya tidak pernah menggunakannya lagi sampai suatu ketika di tahun 2016 saya harus menggunakannya kembali karena suatu kasus di kantor. Sayangnya, walau laptop kantor sudah sangat bagus spec-nya, Maple yang saya gunakan waktu itu berjalan sangat lamban.


Beberapa minggu ini saya berkutat kembali dengan kalkulus dan aljabar linear elementer. Mau tidak mau, saya harus belajar kembali mengingat beberapa pembuktian dan penurunan formula. Entah kenapa saya merasa kurang greget menggunakan MathSolver.

Ada yang hilang.

Bagi generasi saya yang terbiasa menuliskan formula dengan format LaTex, mungkin jadi terasa agak janggal. hehe

Setelah googling sana-sini, saya mendapatkan beberapa libraries di R yang bisa saya gunakan untuk belajar kalkulus dan aljabar linear elementer. Mungkin tidak mirip 100% dengan Maple dan MathSolver, tapi beberapa fungsi seperti simplifikasi, faktorisasi, integral, dan diferensial bisa diselesaikan dengan libraries tersebut.

Kalkulus

library(Ryacas)

library(Ryacas) memiliki backbone berupa software Command Line Interface (CLI) bernama YACAS (Yet Another Computer Algebra System). Ternyata YACAS mulai dibuat sejak tahun 2006. Mungkin karena kurang populer jadi jarang yang menggunakan. Padahal menurut saya isinya sangat menjanjikan.

Apa saja sih fiturnya?

Saya berikan contoh ya:

Simplifikasi

Misalkan saya memiliki persamaan linear sebagai berikut:

f(x) = 10x - 3 + 4x - 10

YACAS bisa digunakan untuk melakukan simplifikasi fungsi.

eq = "10*x - 3 + 4*x - 10"

eq %>% y_fn("Simplify") %>% yac_str()
## [1] "14*x-13"

Terlihat fungsinya menjadi lebih sederhana.

Misalkan saya memiliki persamaan berikut:

f(x) = \frac{1}{x^2} + x - x^3

simplifikasinya adalah:

eq = "1/x^2 + x - x^3"

eq %>% y_fn("Simplify") %>% yac_str()
## [1] "(x^3-x^5+1)/x^2"

Nah, jika bentuk tersebut masih rumit dilihat. Kita bisa membuat bentuk tersebut menjadi TEX format:

eq %>% y_fn("Simplify") %>% y_fn("TeXForm") %>% yac_str() 
## [1] "\\frac{x ^{3} - x ^{5} + 1}{x ^{2}} "

Tinggal kita render saja menjadi:

f(x) = \frac{x ^{3} - x ^{5} + 1}{x ^{2}}

Faktorisasi

Hal menarik berikutnya adalah YACAS bisa digunakan untuk mencari faktor dari persamaan kuadrat.

Misal saya memiliki persamaan kuadrat:

f(x) = x^2 - 1

Berapa faktornya?

eq = "x^2 - 1"

eq %>% y_fn("Factor") %>% yac_str()
## [1] "(x+1)*(x-1)"

Misal saya memiliki persamaan kuadrat:

f(x) = x^3 - 1

Berapa faktornya?

eq = "x^3 - 1"

eq %>% y_fn("Factor") %>% yac_str()
## [1] "(x+x^2+1)*(x-1)"

Mencari Akar Kuadrat

Sebenarnya dari faktor di atas, kita bisa menghitung sendiri akar kuadratnya. Tapi jika malas, biarkan YACAS yang melakukannya:

eq %>% y_fn("FindRealRoots") %>% yac_str()
## [1] "{1.}"

Turunan

Kegunaan lainnya adalah menurunkan fungsi.

Misalkan:

f(x) = x^3 + sin(x)

Turunannya adalah:

eq = "x^3 - Sin(x)"

eq %>% y_fn("D(x)") %>% yac_str()
## [1] "3*x^2-Cos(x)"

Integral

Lawannya turunan adalah integral, berikut jika kita integralkan f(x) di atas:

eq %>% y_fn("Integrate(x)") %>% yac_str() 
## [1] "x^4/4+Cos(x)"

Jika kita hendak melakukan:

\int_{0}^{1} x^3 + sin(x) dx

Cukup lakukan:

eq %>% y_fn("Integrate(x,0,1)") %>% yac_str() 
## [1] "1/4+Cos(1)-1"

Limit

Sekarang giliran untuk menghitung limit.

Misalkan:

\lim_{x \to 1} \frac{1}{x-1}

Maka:

eq = "1 / (x-1)"

eq %>% y_fn("Limit(x,1)") %>% yac_str()
## [1] "Undefined"

Deret

Kita juga bisa menghitung jumlah dari suatu deret:

Misalkan:

\sum_{n = 1}^{\infty} \frac{1}{2^n}

yac_str("Sum(n, 1, Infinity, (1/2)^n)")
## [1] "1"

Menyelesaikan Persamaan Diferensial

YACAS juga bisa digunakan untuk menyelesaikan persamaan diferensial.

Misalkan:

y'' + y = 0

Di mana y adalah fungsi dari x, maka:

yac_str("OdeSolve( y' + y == 0 )")
## [1] "C219*Exp(-x)"

Menyelesaikan Persamaan

Misalkan:

x^2 +xy = 10

Kita hendak mencari nilai y, maka:

yac_str("OldSolve(x^2+x*y==10,y)")
## [1] "(10-x^2)/x"

Aljabar Linear Elementer

library(matlib)

Kali ini saya akan membahas library(matlib) untuk keperluan perhitungan matriks.

Salah satu kegunaannya yang saya ingin highlight adalah kemampuannya menyelesaikan sistem persamaan linear.

Contoh:

Selesaikan sistem persamaan linear berikut:

x_1 - x_2  =  2 \\ 
2x_1 + 2x_2  =  1

Bentuk tersebut akan di-input dalam bentuk matriks di R berikut:

A = matrix(c(1, 2, -1, 2), 2, 2)
b = c(2,1)
showEqn(A, b)
## 1*x1 - 1*x2  =  2 
## 2*x1 + 2*x2  =  1

Berikutnya, kita perlu mengecek apakah sistem persamaan ini cukup syaratnya untuk mendapatkan solusi.

c( R(A), R(cbind(A,b)) )          # show ranks
## [1] 2 2
all.equal( R(A), R(cbind(A,b)) )  # consistent?
## [1] TRUE

Kita bisa buatkan grafiknya sebagai berikut:

plotEqn(A,b)
##   x[1] - 1*x[2]  =  2 
## 2*x[1] + 2*x[2]  =  1

Untuk menyelesaikannya, ada dua cara.

Cara Pertama

Langsung melakukan solving sebagai berikut:

Solve(A, b, fractions = TRUE)
## x1    =   5/4 
##   x2  =  -3/4

Cara Kedua

Melakukan operasi baris elementer (OBE) dari matriks yang ada:

echelon(A, b, verbose=TRUE, fractions=TRUE)
## 
## Initial matrix:
##      [,1] [,2] [,3]
## [1,]  1   -1    2  
## [2,]  2    2    1  
## 
## row: 1 
## 
##  exchange rows 1 and 2 
##      [,1] [,2] [,3]
## [1,]  2    2    1  
## [2,]  1   -1    2  
## 
##  multiply row 1 by 1/2 
##      [,1] [,2] [,3]
## [1,]   1    1  1/2 
## [2,]   1   -1    2 
## 
##  subtract row 1 from row 2 
##      [,1] [,2] [,3]
## [1,]   1    1  1/2 
## [2,]   0   -2  3/2 
## 
## row: 2 
## 
##  multiply row 2 by -1/2 
##      [,1] [,2] [,3]
## [1,]    1    1  1/2
## [2,]    0    1 -3/4
## 
##  subtract row 2 from row 1 
##      [,1] [,2] [,3]
## [1,]    1    0  5/4
## [2,]    0    1 -3/4

if you find this article helpful, support this blog by clicking the ads.