From 110d1eeb066eeddaec8bb3d2d8b93431c38786c1 Mon Sep 17 00:00:00 2001 From: Jakub Adamski Date: Wed, 15 Jun 2022 18:51:01 +0200 Subject: [PATCH] clean-files --- .gitignore | 2 + Projekt_2/loss.png | Bin 0 -> 22369 bytes Projekt_2/minimum.png | Bin 0 -> 30087 bytes Projekt_2/projekt-test.R | 143 +++++++++++++++++++++++++++++++++++++++ Projekt_2/projekt.R | 103 ++++------------------------ 5 files changed, 159 insertions(+), 89 deletions(-) create mode 100644 Projekt_2/loss.png create mode 100644 Projekt_2/minimum.png create mode 100644 Projekt_2/projekt-test.R diff --git a/.gitignore b/.gitignore index 5b6a065..2d85dbe 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .Rhistory .RData .Ruserdata + +.DS_Store \ No newline at end of file diff --git a/Projekt_2/loss.png b/Projekt_2/loss.png new file mode 100644 index 0000000000000000000000000000000000000000..083a67682b3161904d7cddd823522c581e43df97 GIT binary patch literal 22369 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 literal 0 HcmV?d00001 diff --git a/Projekt_2/minimum.png b/Projekt_2/minimum.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4dfd925ab46f4a83f99bc6f4aa1440108c98c1 GIT binary patch literal 30087 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 OKUqno+xa)|KmIS+Bqw|T literal 0 HcmV?d00001 diff --git a/Projekt_2/projekt-test.R b/Projekt_2/projekt-test.R new file mode 100644 index 0000000..8e23f12 --- /dev/null +++ b/Projekt_2/projekt-test.R @@ -0,0 +1,143 @@ +library(numDeriv) + +# 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) ) +} + +#grad <- function(x){ +# return() +#} + +startPoint <- -2 + +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") + + +# dodatek ----------------------------------------------------------------- + +#-----all + +# Function to calculate gradient +# @x - vector of values (2) +# nie wiem czemu wczytywanie nie zamiania na int +#k <- as.integer(readline(prompt = "")) +k <- 3 + +#oblicznie warosći x +f <- function(k,x){ + return( x^(k-1) * (x + 3) * (x - 4) * (x - 7)^k ) +} + +# fukcja - wzów +function_formula = expression(x^(k-1) * (x + 3) * (x - 4) * (x - 7)^k) +# pochodna - wzór +derivative_formula <- D(function_formula, 'x') + +x <- seq(-3, 8.5, by=0.1) +y <- f(k,x) +g <- eval(derivative_formula) +zero <- +startPoint <- -2 + + + +# 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.0001, + alpha = 0.00001, + i.max = 1e6, + k = 3){ + #gradient <- grad(x0) # Initialize gradient + x <- x0 + gradient <- eval(function_formula) + x.path <- x0 + loss <- c() + for (i in 1:i.max){ + # tu zmieniłem z "-" na "+" + x.new <- x0 + alpha * gradient # Update + x <- x.new + gradient <- eval(function_formula) # Gradinet in new point + points(x = x.new, y = f(k,x.new), pch = 20, col = 'green', cex = 0.5) + currentLoss <- (f(k, x0) - f(k,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)) +} + + +plot(x, y, type="l", ylim = c(-15000, 30000)) +lines(x, g, col="yellow") +abline(h = 0, col="gray") + +result <- grad.descent() + +round(f(k,result[[1]][1]), 3) # Wartość funkcji w znalezionym punkcie +round(result[[1]], 2) # Znaleziony punkt + +points(x = startPoint, y = f(k,startPoint), pch = 20, col = 'red', cex = 2) # Staring point +points(x = result[[1]], y = f(k,result[[1]]), pch = 20, col = 'blue', cex = 2) + +plot(result[[4]], type="l") + + diff --git a/Projekt_2/projekt.R b/Projekt_2/projekt.R index 8e23f12..a095f88 100644 --- a/Projekt_2/projekt.R +++ b/Projekt_2/projekt.R @@ -1,117 +1,38 @@ library(numDeriv) -# 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) ) -} - -#grad <- function(x){ -# return() -#} - -startPoint <- -2 - -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") - - -# dodatek ----------------------------------------------------------------- - -#-----all - -# Function to calculate gradient -# @x - vector of values (2) -# nie wiem czemu wczytywanie nie zamiania na int -#k <- as.integer(readline(prompt = "")) k <- 3 -#oblicznie warosći x +# obliczenie wartości x f <- function(k,x){ return( x^(k-1) * (x + 3) * (x - 4) * (x - 7)^k ) } -# fukcja - wzów +# funkcja wzór function_formula = expression(x^(k-1) * (x + 3) * (x - 4) * (x - 7)^k) -# pochodna - wzór + +# pochodna wzó derivative_formula <- D(function_formula, 'x') x <- seq(-3, 8.5, by=0.1) y <- f(k,x) g <- eval(derivative_formula) -zero <- startPoint <- -2 - -# 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.0001, alpha = 0.00001, i.max = 1e6, k = 3){ - #gradient <- grad(x0) # Initialize gradient + # gradient x <- x0 gradient <- eval(function_formula) x.path <- x0 loss <- c() for (i in 1:i.max){ - # tu zmieniłem z "-" na "+" x.new <- x0 + alpha * gradient # Update x <- x.new - gradient <- eval(function_formula) # Gradinet in new point + gradient <- eval(function_formula) # Gradient in new point points(x = x.new, y = f(k,x.new), pch = 20, col = 'green', cex = 0.5) currentLoss <- (f(k, x0) - f(k,x.new))^2 print(currentLoss) @@ -130,14 +51,18 @@ plot(x, y, type="l", ylim = c(-15000, 30000)) lines(x, g, col="yellow") abline(h = 0, col="gray") -result <- grad.descent() +result <- grad.descent(k = k) -round(f(k,result[[1]][1]), 3) # Wartość funkcji w znalezionym punkcie -round(result[[1]], 2) # Znaleziony punkt +# Wartość funkcji w znalezionym punkcie +round(f(k,result[[1]][1]), 3) +# Znaleziony punkt +round(result[[1]], 2) -points(x = startPoint, y = f(k,startPoint), pch = 20, col = 'red', cex = 2) # Staring point +# Staring point +points(x = startPoint, y = f(k,startPoint), pch = 20, col = 'red', cex = 2) points(x = result[[1]], y = f(k,result[[1]]), pch = 20, col = 'blue', cex = 2) +# loss plot(result[[4]], type="l")