| Dosen : Prof. Dr. Suhartono, M.Kom |
| Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang |
| Fakultas : Sains dan Teknologi |
| Jurusan : Teknik Informatika |
Fungsi R/mosaik D() mengambil rumus suatu fungsi dan menghasilkan turunannya. Ini menggunakan jenis ekspresi tilde yang sama yang digunakan oleh makeFun() atau contour_plot() atau alat R/mosaik lainnya. Contohnya,
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
## The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
## which was just loaded, were retired in October 2023.
## Please refer to R-spatial evolution reports for details, especially
## https://r-spatial.org/r/2023/05/15/evolution4.html.
## It may be desirable to make the sf package available;
## package maintainers should consider adding sf to Suggests:.
##
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
##
## D
D(t * sin(t) ~ t)
## function (t)
## sin(t) + t * cos(t)
Jika mau, Anda dapat menggunakannya makeFun() untuk mendefinisikan suatu fungsi, lalu menyerahkan fungsi tersebut D() untuk diferensiasi.
myf <- makeFun(sqrt(y * pnorm(1 + x^2, mean=2, sd=3)) ~ x & y)
dx_myf <- D(myf(x, y) ~ x, y=3)
dx_myf
## function (x, y = 3)
## {
## .e1 <- 1 + x^2
## x * y * dnorm(.e1, 2, 3)/sqrt(y * pnorm(.e1, mean = 2, sd = 3))
## }
Di sisi kanan ekspresi tilde diserahkan ke D() nama yang berkaitan dengan masukan. Hal ini mirip dengan ekspresi tilde yang digunakan dalam pembuatan plot, yang memberi nama masukan yang membentuk domain grafis. Namun hal ini berbeda dengan ekspresi gelombang di makeFun(), yang mana sisi kanan menentukan urutan kemunculan input yang Anda inginkan.
Tentu saja, D() ia mengetahui aturan turunan fungsi buku pola. Contohnya,
D(sin(t) ~ t)
## function (t)
## cos(t)
D(log(x) ~ x)
## function (x)
## 1/x
D(exp(x) ~ x)
## function (x)
## exp(x)
D(x^2 ~ x)
## function (x)
## 2 * x
Kapan pun Anda memiliki rumus yang dapat digunakan untuk membangun turunan simbolik, itulah yang harus Anda gunakan. Turunan selisih hingga berguna dalam situasi di mana Anda tidak memiliki rumus seperti itu. Perhitungannya sederhana namun memiliki kelemahan yang menunjukkan kelebihan dari evanescent- mendekati.
Untuk suatu fungsi dan angka “kecil” yang bukan nol , selisih hingga mendekati turunannya dengan rumus ini:
Untuk mendemonstrasikannya, mari kita buat pendekatan perbedaan hingga . Karena kita sudah mengetahui turunan simboliknya—itulah —Tidak ada tujuan praktis dari demonstrasi ini. Namun, hal ini dapat berfungsi untuk menegaskan aturan simbolis.
Kami akan memanggil pendekatan perbedaan hingga fq_sin() dan menggunakannya makeFun() untuk membangunnya:
fq_sin <- makeFun((sin(x+h)- sin(x-h))/(2*h) ~ x, h=0.01)
Perhatikan bahwa fq_sin() memiliki parameter, hyang nilai defaultnya disetel ke 0.01. Apakah 0,01 “kecil” atau tidak bergantung pada konteksnya. Secara operasional, kita mendefinisikan “kecil” sebagai nilai yang secara praktis memberikan hasil yang sama meskipun diperkecil dengan faktor 2 atau 10.
Sebagai demonstrasi itu fq_sin() dengan mendekati yang asli , kami mengeksploitasi pengetahuan kami itu . Gambar 1 memplot perbedaan antara perkiraan dan turunan asli.
slice_plot(fq_sin(x, h=0.01) - cos(x) ~ x, bounds(x=-10:10)) %>%
slice_plot(fq_sin(x, h=0.001) - cos(x) ~ x, color="magenta") %>%
gf_labs(y="Error from true value.")
Gambar 1: Membandingkan fq_sin() dengan untuk dua nilai .
Anda perlu memperhatikan dengan cermat skala sumbu vertikal pada Gambar 1 untuk melihat apa yang terjadi. Untuk , fq_sin() tidak persis sama dengan cos(), namun hampir sama, selalu berada dalam $-$0,00017. Untuk banyak tujuan, ini sudah cukup akurat. Namun tidak untuk semua tujuan. Kita dapat membuat perkiraan menjadi lebih baik dengan menggunakan yang lebih kecil . Misalnya saja versi fq_sin() akurat hingga $-$0,0000017.
Dalam penggunaan praktisnya, seseorang menggunakan metode beda hingga dalam kasus di mana seseorang belum mengetahui fungsi turunan eksaknya. Misalnya saja jika fungsinya adalah gelombang suara yang direkam dalam bentuk file audio MP3.
Dalam situasi seperti ini, cara praktis untuk menentukan apa yang kecil adalah memilih satu berdasarkan pemahaman Anda tentang situasinya. Misalnya, sebagian besar persepsi kita tentang suara melibatkan campuran sinusoidal dengan periode yang lebih lama dari satu per dua ribu detik, jadi Anda bisa memulainya dengan dari 0,002 detik. Gunakan tebakan ini untuk membangun calon perkiraan perbedaan hingga. Kemudian, buat kandidat lain menggunakan waktu yang lebih kecil h, katakanlah, 0,0002 detik. Jika kedua kandidat tersebut sangat cocok satu sama lain, maka Anda telah mengonfirmasi pilihan Anda memadai.
Sangat menggoda untuk berpikir bahwa perkiraannya menjadi lebih baik dan lebih baik lagi ketika h dibuat lebih kecil. Namun hal tersebut belum tentu berlaku untuk perhitungan komputer. Alasannya adalah besaran-besaran di komputer hanya mempunyai ketelitian yang terbatas: sekitar 15 digit. Sebagai ilustrasi, mari kita hitung besaran sederhana, . Secara matematis, besaran ini tepat nol. Namun di komputer, ini belum sepenuhnya nol:
sqrt(3)^2 - 3
## [1] -4.440892e-16
Kita dapat melihat hilangnya presisi ini jika kita membuat hpendekatan perbedaan hingga menjadi sangat kecil . Pada Gambar 2 kita menggunakan h = 0.000000000001. Hasilnya tidak memuaskan.
slice_plot( fq_sin(x, h=0.000000000001) - cos(x) ~ x,
bounds(x=-10:10)) %>%
slice_plot(fq_sin(x, h=0.0000000000001) - cos(x) ~ x,
color="magenta") %>%
gf_labs(y="Error from true value.")
Gambar 2: Dalam perhitungan komputer, penggunaan nilai yang terlalu kecil h menyebabkan hilangnya akurasi dalam pendekatan perbedaan hingga.
Banyak penerapan yang memerlukan diferensiasi suatu turunan atau bahkan membedakan turunan dari suatu turunan. Dalam bahasa Inggris, frasa seperti itu sulit dibaca. Mereka lebih sederhana menggunakan notasi matematika.
sebuah fungsi
turunan dari
, turunan kedua dari , biasanya ditulis lebih ringkas seperti .
Ada turunan orde ketiga, orde keempat, dan seterusnya, meskipun tidak sering digunakan.
Untuk menghitung turunan orde kedua , bedakan dulu untuk menghasilkan . Kemudian, masih menggunakan teknik yang dijelaskan sebelumnya dalam bab ini, bedakan .
Ada jalan pintas untuk membuat turunan tingkat tinggi dengan menggunakan D() satu langkah. Di sisi kanan ekspresi tilde, cantumkan nama yang berkaitan secara berulang-ulang. Contohnya:
D(sin(x) ~ x & x)
## function (x)
## -sin(x)
D(log(x) ~ x & x & x)
## function (x)
## 2/x^3
EXSAMPLE
Siswa fisika mempelajari rumus kedudukan suatu benda saat jatuh bebas yang dijatuhkan dari ketinggian dan pada kecepatan awal :
Percepatan benda merupakan turunan kedua . Gunakan D() untuk mencari percepatan benda.
Turunan kedua dari dengan hormat adalah:
D(0.5*g*t^2 + v0*t + x0 ~ t & t)
## function (t, g, v0, x0)
## g
Akselerasinya tidak bergantung pada ; itu adalah konstanta . Tidak heran disebut “percepatan gravitasi”.