Seperti judulnya, dalam buku ini kita akan menggunakan bahasa komputer R untuk mengimplementasikan operasi kalkulus bersama dengan operasi terkait seperti pembuatan grafik dan pemecahan.
Topik kalkulus pada dasarnya adalah tentang fungsi matematika dan operasi yang dilakukan padanya. Konsep “fungsi matematika” adalah sebuah ide. Jika kita akan menggunakan bahasa komputer untuk bekerja dengan fungsi matematika, kita perlu menerjemahkannya ke dalam suatu entitas dalam bahasa komputer. Artinya, kita membutuhkan konstruk bahasa untuk merepresentasikan fungsi dan fungsi kuantitas yang diambil sebagai input dan diproduksi sebagai output.
Jika Anda memiliki latar belakang dalam pemrograman, Anda mungkin berpikir bahwa pilihan representasi sudah jelas. Untuk kuantitas, gunakan angka. Untuk fungsi, gunakan fungsi bahasa-R. Memang itulah yang akan kami lakukan, tetapi seperti yang akan Anda lihat, situasinya sedikit lebih rumit dari itu. Sedikit, tapi kerumitan kecil itu perlu ditangani sejak awal.
Kompleksitas yang disebutkan di bagian sebelumnya berasal dari penggunaan dan situasi dunia nyata di mana kita ingin dapat menerapkan ide fungsi matematika. Input yang diambil oleh fungsi dan output yang dihasilkannya tidak harus berupa angka. Seringkali, mereka adalah kuantitas.
Perhatikan contoh besaran berikut: uang, kecepatan, tekanan darah, tinggi badan, volume. Bukankah masing-masing besaran ini adalah angka? Tidak terlalu. Pertimbangkan uang. Kita dapat menghitung, menambah, dan mengurangi uang – sama seperti kita menghitung, menambah, dan mengurangi dengan angka. Tetapi uang memiliki properti tambahan: jenis mata uang. Ada Dollars1, Renminbi, Euro, Rand, Krona dan seterusnya. Uang sebagai ide adalah abstraksi dari jenis yang terkadang disebut dimensi. Dimensi lainnya adalah panjang, waktu, volume, suhu, luas, sudut, luminositas, suku bunga bank, dan sebagainya. Saat kita berhadapan dengan besaran yang memiliki dimensi, tidak cukup hanya memberikan angka untuk mengatakan “berapa banyak” dari dimensi tersebut yang kita miliki. Kita juga perlu memberikan satuan. Banyak dari ini akrab dalam kehidupan sehari-hari. Misalnya, dimensi panjang dikuantifikasi dengan satuan meter, atau inci, atau mil, atau parsec, dan seterusnya. Dimensi uang diukur dengan euro, dolar, renminbi, dan sebagainya. Area sebagai dimensi dikuantifikasi dengan meter persegi, atau kaki persegi, atau hektar, atau hektar, dll.
Sayangnya, sebagian besar teks matematika memperlakukan dimensi dan satuan dengan mengabaikannya. Hal ini menyebabkan kebingungan dan kesalahan ketika upaya dilakukan untuk menerapkan ide-ide matematika ke kuantitas di dunia nyata.
Dalam buku ini kita akan menggunakan fungsi dan kalkulus untuk bekerja dengan besaran dunia nyata. Kita tidak dapat mengabaikan dimensi dan satuan. Sayangnya, bahasa komputer umum seperti R dan Python dan JavaScript tidak menyediakan cara sistematis untuk menangani dimensi dan satuan secara otomatis. Di R, misalnya, kita bisa menulis dengan mudah
library(mosaicCalc)
## Loading required package: mosaic
## Registered S3 method overwritten by 'mosaic':
## method from
## fortify.SpatialPolygonsDataFrame ggplot2
##
## The 'mosaic' package masks several functions from core packages in order to add
## additional features. The original behavior of these functions should not be affected by this.
##
## Attaching package: 'mosaic'
## The following objects are masked from 'package:dplyr':
##
## count, do, tally
## The following object is masked from 'package:Matrix':
##
## mean
## The following object is masked from 'package:ggplot2':
##
## stat
## The following objects are masked from 'package:stats':
##
## binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
## quantile, sd, t.test, var
## The following objects are masked from 'package:base':
##
## max, mean, min, prod, range, sample, sum
## Loading required package: mosaicCore
##
## Attaching package: 'mosaicCore'
## The following objects are masked from 'package:dplyr':
##
## count, tally
##
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
##
## D
x <- 7
yang menyimpan kuantitas dengan nama x. Tapi bahasanya mengganggu sesuatu seperti
Kurangnya notasi komputer yang tepat untuk merepresentasikan besaran berdimensi dengan satuannya, kita memerlukan cara lain untuk melacak berbagai hal.
Inilah yang akan kami lakukan. Saat kita merepresentasikan besaran di komputer, kita akan menggunakan nama besaran untuk mengingatkan kita tentang dimensi dan satuan. Misalkan kita ingin, misalnya, mewakili pendapatan tahunan sebuah keluarga. Pilihan yang masuk akal adalah menggunakan nama seperti income atau income_per_year atau family_income. Kami bahkan mungkin memberikan unit dalam nama, mis. keluarga_pendapatan_euro_per_tahun. Namun biasanya yang kami lakukan adalah mendokumentasikan unit-unit tersebut secara terpisah untuk pembaca manusia.
Gaya penggunaan nama besaran sebagai pengingat dimensi dan satuan besaran ini berada di luar tradisi notasi matematika. Dalam matematika sekolah menengah, Anda menemukan x dan y dan t dan θ. Anda bahkan mungkin pernah melihat subskrip lebih spesifik, misalnya x0. Seseorang yang terlatih dalam fisika akan mengetahui penggunaan huruf secara tradisional dan khas. x kemungkinan posisi, t kemungkinan waktu, dan x0
adalah posisi pada waktu nol.
Di banyak bidang aplikasi, ada banyak besaran berbeda yang harus direpresentasikan. Sebagai ilustrasi, pertimbangkan buku teks tentang aliran turbulen fluida: Aliran Turbulen oleh Stephen B. Pope (ISBN 978-0521598866). Dalam materi pengantar buku, ada bagian sepanjang 14 halaman berjudul “Nomenklatur”. Gambar 1.1 menunjukkan sebagian kecil dari bagian tersebut, hanya simbol yang dimulai dengan huruf kapital R dan S.
R, seperti kebanyakan bahasa komputer, memiliki konstruksi pemrograman untuk merepresentasikan operasi yang mengambil satu atau lebih input dan menghasilkan output. Di R, ini disebut “fungsi.” Di R, semua yang Anda lakukan melibatkan fungsi, baik secara eksplisit maupun implisit.
Mari kita lihat versi R dari fungsi matematika, eksponensial. Fungsinya bernama exp dan kita bisa melihat pemrograman yang dikandungnya
exp
## function (x) .Primitive("exp")
Tidak banyak di sana, kecuali notasi komputer. Di R, fungsi dapat dibuat dengan kata kunci function. Misalnya, untuk membuat fungsi yang menerjemahkan pendapatan tahunan menjadi pendapatan harian, kita dapat menulis:
as_daily_income <- function(yearly_income) {
yearly_income / 365
}
Nama yang dipilih untuk fungsi tersebut, as_daily_income, bersifat arbitrer. Kita bisa menamai fungsi itu apa saja. (Ini adalah praktik yang baik untuk memberi nama fungsi yang mudah dibaca dan ditulis serta mengingatkan Anda tentang fungsinya.)
Setelah fungsi kata kunci, ada sepasang tanda kurung. Di dalam tanda kurung adalah nama yang diberikan ke input ke fungsi. Hanya ada satu input ke as_daily_income yang kami sebut yearly_income hanya untuk membantu mengingatkan kita apa fungsi yang dimaksud. Tapi kita bisa memanggil input apa saja.
Bagian function(yearly_income) menentukan bahwa benda yang dibuat akan menjadi fungsi dan kita memanggil input yearly_income. Setelah bagian ini muncul badan fungsi. Tubuh berisi ekspresi R yang menentukan perhitungan yang harus dilakukan. Dalam hal ini, ungkapannya sangat sederhana: bagi pendapatan_tahunan dengan 365 – (perkiraan) jumlah hari dalam setahun.
Sangat membantu untuk membedakan antara nilai input dan peran yang akan dimainkan oleh input dalam fungsi. Nilai pendapatan tahunan mungkin 61362 (dalam, katakanlah, dolar). Untuk berbicara tentang peran input, kami menggunakan kata argumen. Misalnya, kita mungkin mengatakan sesuatu seperti, “as_yearly_income adalah fungsi yang membutuhkan satu argumen.”
Mengikuti fungsi kata kunci dan tanda kurung tempat argumen didefinisikan, muncul sepasang kurung kurawal { dan } yang berisi beberapa pernyataan R. Pernyataan-pernyataan ini adalah isi dari fungsi dan berisi instruksi untuk perhitungan yang akan mengubah input menjadi output.
Inilah fitur yang mengejutkan dari bahasa komputer seperti R … Nama yang diberikan untuk argumen tidak masalah sama sekali, asalkan digunakan secara konsisten di badan fungsi. Jadi pemrogram mungkin telah menulis fungsi R dengan cara ini:
as_daily_income <- function(x) {
x / 365
}
Atau
as_daily_income <- function(ghskelw) {
ghskelw / 365
}
Ingatlah bahwa nama yang dipilih oleh pemrogram suatu fungsi bersifat arbitrer. Anda akan menggunakan fungsi dengan cara yang persis sama meskipun namanya berbeda. Demikian pula, saat menggunakan fungsi, Anda dapat memilih sendiri ekspresi apa yang akan menjadi nilai argumen.
Misalnya, Anda ingin menghitung 100e−2,5 . Mudah:
100 * exp(-2.5)
## [1] 8.2085
Tapi kemungkinan −2.5
dimaksudkan untuk berdiri untuk sesuatu yang lebih umum. Misalnya, mungkin Anda menghitung berapa banyak obat yang masih ada dalam tubuh sepuluh hari setelah dosis 100 mg diberikan. Akan ada tiga jumlah yang terlibat bahkan dalam perhitungan sederhana ini: dosis, jumlah waktu sejak dosis diminum, dan apa yang disebut “konstanta waktu” untuk eliminasi obat melalui hati atau mekanisme lainnya. (Untuk mengikuti contoh ini, Anda tidak perlu tahu apa itu konstanta waktu. Tetapi jika Anda tertarik, inilah contohnya. Misalkan sebuah obat memiliki konstanta waktu 4 hari. Ini berarti 63% dari obat tersebut akan dihilangkan selama periode 4 hari.)
Dalam menulis perhitungan, sebaiknya jelas dan eksplisit tentang arti setiap besaran yang digunakan dalam perhitungan. Jadi, alih-alih 100 * exp(-2.5), Anda mungkin ingin menulis:
dose <- 100 # mg
duration <- 10 # days
time_constant <- 4 # days
dose * exp(- duration / time_constant)
## [1] 8.2085