【发布时间】:2019-03-12 19:48:05
【问题描述】:
我正在尝试使用抛物线插值找到给定函数的最小值。
目标:
使用函数 'g(x)' 找到另一个函数 'f(x)' 的最小值
- 用于估计的函数 -> g(x) = a0+a1*x + a2*x^2
- 需要找到最小值的函数 -> f(x) = -x(1-x)
- 对于三个给定的 x1、x2 和 x3,找到参数 a0、a1、a2 使得 f(x0)=g(x0)、f(x1)=g(x1)、f(x2)=g(x2)。
约束:
- x0,x1,x2 属于 (0,1) 范围
剧情:
理论结果:
- 从图中可以清楚地看出,函数 (f(x)) 的最小值为 0.5
- 如果 a0=0,a1=-1,a2=1 我们基本上得到 g(x)=f(x)
结果由代码提供:
- a0
- a1
- a2
关键问题:
- 我对这种方法的理解是正确的还是我的问题 代码?
尝试的解决方案:
我做了以下,但我的价值观没有意义
# Actual function to estimate the minimum value of
actual <- function(x){
result <- -x *(1-x)
return(result)
}
# The estimation function whose parameters a0,a1,a2 are unknown
parabola <- function(par,x){
a0 <- par[1]
a1 <- par[2]
a2 <- par[3]
result <- a0+a1*x+a2*x^2
return(result)
}
# finding the difference between the functions for three given values (x0,x1,x2)
difference_function <- function(par,x){
x0 <- par[4]
x1 <- par[5]
x2 <- par[6]
result <- sum(actual(x0),actual(x1),actual(x2)) - sum(parabola(par,x0),parabola(par,x1),parabola(par,x2))
return(result)
}
find_parameters <- function(){
temp <- optim(par=c(0,-1,1,0.4,0.55,0.6), fn=difference_function)
a0 <- temp$par[1]
a1 <- temp$par[2]
a2 <- temp$par[3]
return(list=c(a0=a0,a1=a1,a2=a2))
}
find_parameters()
【问题讨论】:
标签: r optimization