Topik kalkulus pada dasarnya adalah tentang fungsi matematika dan operasi yang dilakukan pada mereka. Konsep “fungsi matematika” adalah sebuah ide. Jika kita akan menggunakan bahasa komputer untuk bekerja dengan fungsi matematika, kita perlu menerjemahkannya ke dalam beberapa entitas dalam bahasa komputer. Artinya, kita memerlukan konstruksi bahasa untuk merepresentasikan fungsi dan kuantitas yang diambil fungsi sebagai input dan dihasilkan sebagai output.
Jika Anda kebetulan memiliki latar belakang pemrograman, Anda mungkin berpikir bahwa pilihan representasi sudah jelas. Untuk jumlah, gunakan angka. Untuk fungsi, gunakan fungsi bahasa R. Memang itulah yang akan kita lakukan, tetapi seperti yang akan Anda lihat, situasinya sedikit lebih rumit dari itu. Sedikit, tetapi kerumitan kecil itu perlu ditangani sejak awal.
1.1 Angka, besaran, dan nama
Kompleksitas yang disebutkan di bagian sebelumnya berasal dari penggunaan dan situasi dunia nyata di mana kita ingin dapat menerapkan ide matematis fungsi. Input yang diambil oleh fungsi dan output yang dihasilkannya belum tentu berupa angka. Seringkali, mereka adalah kuantitas .
Perhatikan contoh besaran berikut: uang, kecepatan, tekanan darah, tinggi, volume. Bukankah masing-masing besaran ini adalah bilangan? 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 Dolar 1 , Renminbi, Euro, Rand, Krona dan sebagainya. Uang sebagai ide adalah abstraksi dari jenis yang kadang-kadang disebut dimensi . Dimensi lainnya adalah panjang, waktu, volume, suhu, luas, sudut, luminositas, suku bunga bank, dan sebagainya. Ketika kita berhadapan dengan suatu besaran yang memiliki dimensi, tidak cukup memberikan angka untuk mengatakan “berapa” dari dimensi yang kita miliki. Kita juga perlu memberikan unit. Banyak dari ini akrab dalam kehidupan sehari-hari. Misalnya, dimensi panjang diukur dengan satuan meter, atau inci, atau mil, atau parsec, dan seterusnya. Dimensi uang diukur dengan euro, dolar, renminbi, dan sebagainya. Area sebagai dimensi diukur dengan meter persegi, atau kaki persegi, atau hektar, atau ekar, 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 kuantitas dunia nyata. Kita tidak bisa mengabaikan dimensi dan satuan. Sayangnya, bahasa komputer utama seperti R dan Python dan JavaScript tidak menyediakan cara sistematis untuk menangani dimensi dan unit secara otomatis. Di R, misalnya, kita dapat dengan mudah menulis
x <- 7
yang menyimpan kuantitas dengan nama x. Tapi bahasanya
mengacungkan sesuatu seperti
y <- 12
## Error: <text>:1:9: unexpected symbol
## 1: y <- 12 meters
##
Kurangnya notasi komputer yang tepat untuk mewakili kuantitas berdimensi dengan satuannya, kita memerlukan beberapa cara lain untuk melacak berbagai hal.
Berikut adalah apa yang akan kita lakukan. Saat kita
merepresentasikan besaran di komputer, kita akan menggunakan
nama besaran untuk mengingatkan kita apa dimensi dan
satuannya. Misalkan kita ingin, misalnya, untuk mewakili pendapatan
tahunan keluarga. Pilihan yang masuk akal adalah menggunakan nama
seperti incomeatau income_per_yearatau
family_income. Kami bahkan mungkin memberikan unit dalam
nama, misalnya family_income_euros_per_year. Tetapi
biasanya yang kami lakukan adalah mendokumentasikan unit 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 menemukanxxdankamukamudanttdanθθ. Anda bahkan mungkin pernah melihat subskrip dulu lebih spesifik, misalnyax0x0. Seseorang yang terlatih dalam fisika akan mengetahui penggunaan huruf secara tradisional dan tipikal.xxkemungkinan adalah posisi,ttkemungkinan adalah waktu, danx0x0adalah posisi pada waktu nol.
Di banyak bidang aplikasi, ada banyak kuantitas berbeda yang akan direpresentasikan. Sebagai ilustrasi, pertimbangkan buku teks tentang aliran turbulen fluida: Aliran Turbulen oleh Stephen B. Pope (ISBN 978-0521598866). Dalam materi pendahuluan 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.
1.2 Fungsi bahasa R
R, seperti kebanyakan bahasa komputer, memiliki konstruksi pemrograman untuk mewakili 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. Fungsi
diberi nama expdan kita dapat melihat pemrograman yang
dikandungnya
exp
## function (x) .Primitive("exp")
## function (x) .Primitive("exp")
Tidak banyak di sana, kecuali notasi komputer. Dalam 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, as_daily_income, adalah
arbitrer. Kita bisa saja menamai fungsi itu apa saja. (Ini adalah
praktik yang baik untuk memberikan nama fungsi yang mudah dibaca dan
ditulis dan mengingatkan Anda tentang fungsi tersebut.)
Setelah kata kunci function, ada sepasang tanda kurung.
Di dalam tanda kurung adalah nama yang diberikan ke input ke fungsi.
Hanya ada satu masukan as_daily_incomeyang kami panggil
yearly_incomehanya untuk membantu mengingatkan kami apa
fungsi yang dimaksudkan untuk dilakukan. Tapi kita bisa memanggil input
apa saja.
Bagian tersebut function(yearly_income)menentukan bahwa
hal yang sedang dibuat akan menjadi a functiondan kita
memanggil input yearly_income. Setelah bagian ini muncul
badan fungsi. Tubuh berisi ekspresi R yang
menentukan perhitungan yang akan dilakukan. Dalam hal ini, ekspresinya
sangat sederhana: bagi yearly_incomedengan 365 – jumlah
(perkiraan) hari dalam setahun.
Sangat membantu untuk membedakan antara nilai input dan
peran yang akan dimainkan input dalam fungsi. Nilai pendapatan
tahunan mungkin 61362(dalam, katakanlah, dolar). Untuk
berbicara tentang peran yang dimainkan input, kami menggunakan kata
argument . Misalnya, kita mungkin mengatakan
sesuatu seperti, ” as_yearly_incomeadalah fungsi yang
membutuhkan satu argumen.”
Setelah kata kunci functiondan tanda kurung di mana
argumen didefinisikan datang sepasang kurung kurawal {dan
}berisi beberapa pernyataan R. Pernyataan-pernyataan ini
adalah badan fungsi dan berisi instruksi untuk perhitungan yang akan
mengubah input menjadi output.
Inilah fitur mengejutkan dari bahasa komputer seperti R ... Nama yang diberikan untuk argumen tidak masalah sama sekali, asalkan digunakan secara konsisten di badan fungsi. Jadi programmer mungkin telah menulis fungsi R dengan cara ini:
as_daily_income <- function(x) {
x / 365
}
atau bahkan
as_daily_income <- function(ghskelw) {
ghskelw / 365
}
Semua versi as_daily_income()wasiat yang berbeda ini
melakukan hal yang persis sama dan digunakan dengan cara yang persis
sama, terlepas dari nama yang diberikan untuk argumen tersebut. 2
Seperti ini:
as_daily_income(61362)
## [1] 168.1151
## [1] 168.1151
Seringkali, fungsi memiliki lebih dari satu argumen. Nama-nama
argumen dicantumkan di antara tanda kurung setelah kata kunci
function, seperti ini:
as_daily_income <- function(yearly_income) {
yearly_income / 365
}
Dalam kasus seperti itu, untuk menggunakan fungsi kita harus
menyediakan semua argumen. Jadi, dengan definisi dua argumen
terbaru dari as_daily_income(), penggunaan berikut
menghasilkan pesan kesalahan:
as_daily_income(61362)
## [1] 168.1151
## Error in as_daily_income(61362): argument "duration" is missing, with no default
{1] 168.1151}
Satu lagi aspek argumen fungsi di R … Argumen apa pun dapat diberi nilai default . Sangat mudah untuk melihat cara kerjanya dengan sebuah contoh:
as_daily_income <- function(yearly_income, duration = 365) {
yearly_income / duration
}
Dengan nilai default untuk durationfungsi dapat
digunakan dengan satu atau dua argumen:
as_daily_income(61362)
## [1] 168.1151
## [1] 168.1151
as_daily_income(61362, duration = 366)
## [1] 167.6557
## [1] 167.6557
Baris kedua adalah perhitungan yang tepat untuk tahun kabisat.
Untuk menutup, mari kembali ke expfungsi, yang merupakan
bawaan dari R. Argumen tunggal untuk expdiberi nama
xdan isi fungsi agak samar:
.Primitive("exp").
Akan sering terjadi bahwa fungsi yang kita buat akan memiliki tubuh yang tidak melibatkan ekspresi matematika tradisional sepertix/dx/d. Seperti yang akan Anda lihat di bab-bab selanjutnya, di dunia modern banyak fungsi matematika yang terlalu rumit untuk diwakili oleh notasi aljabar.
Jangan ditunda oleh badan fungsi non-aljabar seperti itu. Pada akhirnya, apa yang perlu Anda ketahui tentang suatu fungsi untuk menggunakannya hanyalah tiga hal:
Apa argumen untuk fungsi dan apa yang mereka perjuangkan.
Apa jenis hal yang sedang diproduksi oleh fungsi.
Bahwa fungsinya berfungsi seperti yang diiklankan, misalnya menghitung apa yang akan kita tulis secara aljabar sebagaiexex.
1.3 Literasi penggunaan argumen
Ingatlah bahwa nama-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 menghitung100e−2.5100e−2.5. Mudah:
100 * exp(-2.5)
## [1] 8.2085
## [1] 8.2085
Tapi kemungkinan besar itu−2.5−2.5dimaksudkan untuk mewakili sesuatu yang lebih umum. Misalnya, mungkin Anda menghitung berapa banyak obat yang masih ada di dalam tubuh sepuluh hari setelah dosis 100 mg diberikan. Akan ada tiga kuantitas yang terlibat bahkan dalam perhitungan sederhana ini: dosis, jumlah waktu sejak dosis diambil, dan apa yang disebut “konstanta waktu” untuk eliminasi obat melalui hati atau mekanisme lain. (Untuk mengikuti contoh ini, Anda tidak perlu mengetahui apa itu konstanta waktu. Tetapi jika Anda tertarik, berikut ini contohnya. Misalkan suatu obat memiliki konstanta waktu 4 hari. Ini berarti bahwa 63% obat akan dieliminasi selama periode 4 hari.)
Dalam menulis perhitungan, ada baiknya untuk memperjelas dan
menjelaskan arti dari 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
## [1] 8.2085
Lebih baik lagi, Anda bisa mendefinisikan fungsi yang melakukan perhitungan untuk Anda:
drug_remaining <- function(dose, duration, time_constant) {
dose * exp(- duration / time_constant)
}
Kemudian, melakukan perhitungan untuk situasi tertentu yang dijelaskan di atas adalah masalah penggunaan fungsi:
drug_remaining(dose = 100, duration = 10, time_constant = 4)
## [1] 8.2085
## [1] 8.2085
Dengan menggunakan nama deskriptif yang baik dan secara eksplisit melabeli argumen yang mana, Anda menghasilkan dokumentasi yang jelas dan terpelajar tentang apa yang ingin Anda lakukan dan bagaimana orang lain, termasuk “Anda di masa depan”, harus mengubah hal-hal untuk mewakili situasi baru.
1.4 Sehubungan dengan …
Kami telah menggunakan fungsi R untuk mewakili perhitungan jumlah dari input seperti dosis dan konstanta waktu obat.
Tetapi fungsi R memainkan peran yang jauh lebih besar dari itu. Fungsi digunakan untuk hampir semua hal, mulai dari membaca file data hingga menggambar grafik hingga mengetahui jenis komputer apa yang digunakan. Yang menarik bagi kami di sini adalah penggunaan fungsi untuk mewakili dan mengimplementasikan operasi kalkulus. Operasi ini memiliki nama yang mungkin atau mungkin belum Anda kenal: diferensiasi, integrasi, dll.
Ketika kalkulus atau operasi matematika serupa sedang dilakukan, Anda
biasanya harus menentukan variabel atau
variabel mana yang sedang dilakukan operasi “sehubungan dengan.” Untuk
mengilustrasikannya, pertimbangkan operasi sederhana secara konseptual
untuk menggambar grafik suatu fungsi. Lebih khusus, mari kita menggambar
grafik berapa banyak obat yang tersisa dalam tubuh sebagai fungsi waktu
sejak dosis diberikan. Farmakokinetik dasar dari proses ini dikemas
dalam drug_remaining()fungsi. Jadi yang ingin kita lakukan
adalah menggambar grafik drug_remaining().
Ingat bahwa drug_remaining()memiliki tiga argumen:
dose, duration, dan
time_constant. Grafik tertentu yang akan kita gambar
menunjukkan sisa obat sebagai fungsi durasi. Artinya, operasi grafik
akan sehubungan denganduration . Kami akan
mempertimbangkan, katakanlah, dosis 100 mg obat dengan konstanta waktu 4
hari, mungkin dengan melihat interval durasi dari 0 hari hingga 20
hari.
Dalam buku ini, kita akan menggunakan operasi yang disediakan oleh
paket mosaicand mosaicCalcuntuk R. Operasi
dari paket ini memiliki notasi yang sangat spesifik untuk diekspresikan
sehubungan dengan . Notasi tersebut menggunakan karakter tilde,
~. Berikut cara menggambar grafik yang kita inginkan,
menggunakan slice_plot()operasi paket:
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
slice_plot(
drug_remaining(dose = 100, time_constant = 4, duration = t) ~ t,
domain(t = 0:20))