BAB 4 Pemecahan

4.1 Fungsi VS Persamaan

4.1.1 Dari Persamaan Ke Nol Fungsi

Pada komputer, persamaan yang akan diselesaikan dari sebuah permasalahan merupakan fungsi yang akan dibalik. Masalah yang ada dari perhitungan numerik harus dinyatakan sebagaimana berikut ini.

Kita memiliki sebuah fungsi f(x). Bentuk fungsinya berupa f dan nilai keluarannya adalah y untuk beberapa nilai input yang tidak diketahui oleh nilai input x. Lalu kita harus mencari input x diberikan kepada fungsi f dan nilai keluarannya berupa y.

Untuk menyelesaikan masalah ini, kita dapat mencari invers dari f.ย Kita dapat mudah menemukan nol jika kita dapat merencanakan fungsinya f(x) untuk berbagai x. Perhatikan fungsi g() berikut ini.

library(mosaicCalc)
## Loading required package: mosaicCore
## Loading required package: Deriv
## Loading required package: Ryacas
## 
## Attaching package: 'Ryacas'
## The following object is masked from 'package:stats':
## 
##     integrate
## The following objects are masked from 'package:base':
## 
##     %*%, diag, diag<-, lower.tri, upper.tri
## Registered S3 method overwritten by 'mosaic':
##   method                           from   
##   fortify.SpatialPolygonsDataFrame ggplot2
## 
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
## 
##     D
g <- makeFun(sin(x^2)*cos(sqrt(x^4 + 3 )-x^2) - x + 1 ~ x)
slice_plot(g(x) ~ x, domain(x = -3:3)) %>%
  gf_hline(yintercept  = 0, color = "red")

Dapat dilihat fungsi tersebut melintasi sumbu y di suatu tempat antara x = 1 dan x = 2. Untuk mendapatkan lebih banyak detail, kita perbesar solusi perkiraan :

slice_plot(g(x) ~ x, domain(x=1:2)) %>%
  gf_hline(yintercept = 0, color = "red")

Untuk mendapatkan perkiraan yang lebih baik, kita dapat memperbesar lebih jauh saat persimpangannya x ~ 16.

library(mosaic)
## 
## 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
findZeros(g(x) ~ x, xlim = range(1, 2))
##        x
## 1 1.5576

findZeros( ) hanya akan meilhat kedalam interval yang telah diberikan. Hal ini memungkinkan kita untuk melakukan pekerjaan yang lebih tepat jika kita menyatakan intefval dengan cara yang sempit. Contoh :

findZeros(g(x) ~ x, xlim = range(-1000,  1000))
##        x
## 1 1.5576

4.1.2 Beberapa Solusi

Fungsi findZeros( ) akan mencoba menemukan beberapa solusi yang ada. Misalnya persamaan sin x = 0,35 memiliki solusi yang tak terbatas. Contohnya :

library(mosaic)
findZeros( sin(x) - 0.35 ~ x, xlim=range(-20,20) )
##           x
## 1  -12.2088
## 2   -9.7823
## 3   -5.9256
## 4   -3.4991
## 5    0.3576
## 6    2.7840
## 7    6.6407
## 8    9.0672
## 9   12.9239
## 10  15.3504

4.1.3 Menyiapkan Masalah

Dapat dilihat dari namanya, findZeros( ) akan menemukan fungsi nol. Kita dapat mengatur masalah solusi apapun dalam findZeros( ). Taoi, ada aturan untuk findZeros( ). yakni :

g <- makeFun(4 + exp(k*t) - 2^(b*t) ~ b, k=0.00035, t=1)
findZeros( g(b) ~ b , xlim=range(-1000, 1000) )
##       b
## 1 2.322

Fungsi findZeros( ) tidak mengetahui aturan aljabar. Kita dapat mencoba nilai dari t untuk memastikan bahwa t tdiak bermasalah.

findZeros( g(b, t=2) ~ b, xlim=range(-1000,1000) )
##        b
## 1 1.1611