Home > Enterprise >  How do I optimize a function in R for all values of y?
How do I optimize a function in R for all values of y?

Time:09-30

So I'm trying to plot a function into a graph and ultimately I landed on the easiest option being to give alpha-values and optimize velocity for the x_position values. The problem is, I'm doing something wrong with the optimization.

Here's what I've got thus far:

y <- seq(0, 55, 0.1)
x_position <- function(alpha,velo)
    {velo*cos(alpha)*((velo*sin(alpha) sqrt((velo^2*sin(alpha))^2 2*16.5*9.81)/9.81))}
x <- optimize(x_position,c(1,1000),alpha=y,maximum=TRUE)$objective

Basically, I'm trying to make "y" a vector for the angle and "x" a vector of maximum function value for each angle value so that I could then plot the x,y vector for the function. The problem is, I can't get the x-vector right. For whatever reason it just keeps telling me "invalid function value in 'optimize'". Changing the optimization interval doesn't seem to accomplish anything and I'm out of ideas. The function seems to work just fine when I tested it with e.g. alpha 55 and velocity 10.

CodePudding user response:

y <- seq(0, 55, 0.1)

x_position <- function(velo,alpha){
  velo*cos(alpha)*((velo*sin(alpha) sqrt((velo^2*sin(alpha))^2 2*16.5*9.81)/9.81))
}

optimize(f = x_position, interval = c(1,1000), maximum=TRUE, alpha = y[1])
#> $maximum
#> [1] 999.9999
#> 
#> $objective
#> [1] 1834.098

a <- sapply(y, function(y) optimize(f = x_position, interval = c(1,1000), maximum=TRUE, alpha = y)$objective)
head(a)
#> [1]     1834.098 10225190.493 20042734.667 29061238.316 36921162.118
#> [6] 43309155.705
Created on 2021-09-29 by the reprex package (v2.0.1)
  • Related