projekt2
This commit is contained in:
parent
92a76194f8
commit
89cbcf7b9a
13
Projekt_2/Projekt_2.Rproj
Normal file
13
Projekt_2/Projekt_2.Rproj
Normal file
@ -0,0 +1,13 @@
|
||||
Version: 1.0
|
||||
|
||||
RestoreWorkspace: Default
|
||||
SaveWorkspace: Default
|
||||
AlwaysSaveHistory: Default
|
||||
|
||||
EnableCodeIndexing: Yes
|
||||
UseSpacesForTab: Yes
|
||||
NumSpacesForTab: 2
|
||||
Encoding: UTF-8
|
||||
|
||||
RnwWeave: Sweave
|
||||
LaTeX: pdfLaTeX
|
0
Projekt_2/README.md
Normal file
0
Projekt_2/README.md
Normal file
59
Projekt_2/projekt.R
Normal file
59
Projekt_2/projekt.R
Normal file
@ -0,0 +1,59 @@
|
||||
# Function to calculate gradient
|
||||
# @x - vector of values (2)
|
||||
grad <- function(x){
|
||||
return( (x - 7)^2 * x * (7*x^3 - 34*x^2 - 39*x + 168) )
|
||||
}
|
||||
|
||||
startPoint <- 3
|
||||
|
||||
f <- function(x){
|
||||
return( x^2 * (x + 3) * (x - 4) * (x - 7)^3 )
|
||||
}
|
||||
|
||||
# Function to minimize function
|
||||
# @x0 - starting point
|
||||
# @epsilon - maximum error
|
||||
# @alpha - learning rate
|
||||
# @i.max - maximum number of iterations
|
||||
grad.descent <- function(x0 = startPoint,
|
||||
epsilon = 0.01,
|
||||
alpha = 0.00001,
|
||||
i.max = 1e6){
|
||||
gradient <- grad(x0) # Initialize gradient
|
||||
x.path <- x0
|
||||
loss <- c()
|
||||
for (i in 1:i.max){
|
||||
x.new <- x0 - alpha * gradient # Update
|
||||
gradient <- grad(x.new) # Gradinet in new point
|
||||
points(x = x.new, y = f(x.new), pch = 20, col = 'green', cex = 0.5)
|
||||
currentLoss <- (f(x0) - f(x.new))^2
|
||||
print(currentLoss)
|
||||
loss <- append(loss, currentLoss )
|
||||
if (currentLoss < epsilon){ # STOP
|
||||
break
|
||||
}
|
||||
x0 <- x.new
|
||||
x.path <- rbind(x.path, x.new)
|
||||
}
|
||||
return(list(x.new, x.path, i, loss))
|
||||
}
|
||||
|
||||
x <- seq(-3, 8.5, by=0.1)
|
||||
y <- f(x)
|
||||
g <- grad(x)
|
||||
zero <-
|
||||
|
||||
plot(x, y, type="l", ylim = c(-15000, 30000))
|
||||
lines(x, g, col="yellow")
|
||||
abline(h = 0, col="gray")
|
||||
|
||||
result <- grad.descent()
|
||||
round(f(result[[1]][1]), 3) # Wartość funkcji w znalezionym punkcie
|
||||
round(result[[1]], 2) # Znaleziony punkt
|
||||
|
||||
points(x = startPoint, y = f(startPoint), pch = 20, col = 'red', cex = 2) # Staring point
|
||||
points(x = result[[1]], y = f(result[[1]]), pch = 20, col = 'blue', cex = 2)
|
||||
|
||||
plot(result[[4]], type="l")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user