一组函数 r 的最小化
minimization of a set of functions r
我需要找到一种有效的方法来找到一组齐次函数中的最小值。
我正在使用函数stats::optimize
如果我用一个函数来做,没问题。但是,我需要更改从数据框中获取的函数参数,但我找不到让优化处理我的函数集的方法。请参阅下面的代码
myfun <- function (x) {
sqrt((x-3)^2 + (x-4)^2 + (x-5)^2)
}
optimize(myfun, c(0,10)
这里没问题。
但是我需要用数据框的每一行替换这些数字,例如
df <- data.frame(matrix(c(2,7,8,4,9,10,5,4,2), nrow = 3, ncol =3))
类似于:
v <-df[1, ]
myfun2 <- function (v) {
function(x) sqrt((x-v[1])^2 + (x-v[2])^2 + (x-v[3])^2)
}
optimize(myfun2, c(0,10))
Error in optimize(myfun2, c(0, 10)) :
invalid function value in 'optimize'
optimize(myfun2(df[1, ]), c(0,10))
Error in optimize(myfun2(df[1, ]), c(0, 10)) :
invalid function value in 'optimize'
对于单个案例,最终将以覆盖数据框每一行的 for 循环结束
但是如果我通过 myfun2 优化 returns 一个错误。
很抱歉,如果这是一个简单的问题,但我真的找不到解决它的正确方法,我们将不胜感激。
我也试过了
m <- matrix(c(2,7,8,4,9,10,5,4,2), nrow = 3, ncol =3)
myfun2 <- function (v) {
function(x) sqrt((x-m[1,1])^2 + (x-m[1,2])^2 + (x-m[1,3])^2)
}
optimize(myfun2, c(0,10))
Error in optimize(myfun2, c(0, 10)) :
invalid function value in 'optimize'
必须使用的函数是原来的myfun
,数字被v[1]
、v[2]
和v[3]
代替,在[=15中调用=]循环。
myfun <- function (x, v) {
sqrt((x - v[1])^2 + (x - v[2])^2 + (x - v[3])^2)
}
df <- data.frame(matrix(c(2,7,8,4,9,10,5,4,2), nrow = 3, ncol =3))
res <- apply(df, 1, function(.v) optimize(myfun, c(0,10), v = .v))
do.call(rbind, res)
# minimum objective
#[1,] 3.666648 2.160247
#[2,] 6.666666 3.559026
#[3,] 6.666667 5.887841
我需要找到一种有效的方法来找到一组齐次函数中的最小值。
我正在使用函数stats::optimize
如果我用一个函数来做,没问题。但是,我需要更改从数据框中获取的函数参数,但我找不到让优化处理我的函数集的方法。请参阅下面的代码
myfun <- function (x) {
sqrt((x-3)^2 + (x-4)^2 + (x-5)^2)
}
optimize(myfun, c(0,10)
这里没问题。
但是我需要用数据框的每一行替换这些数字,例如
df <- data.frame(matrix(c(2,7,8,4,9,10,5,4,2), nrow = 3, ncol =3))
类似于:
v <-df[1, ]
myfun2 <- function (v) {
function(x) sqrt((x-v[1])^2 + (x-v[2])^2 + (x-v[3])^2)
}
optimize(myfun2, c(0,10))
Error in optimize(myfun2, c(0, 10)) :
invalid function value in 'optimize'
optimize(myfun2(df[1, ]), c(0,10))
Error in optimize(myfun2(df[1, ]), c(0, 10)) :
invalid function value in 'optimize'
对于单个案例,最终将以覆盖数据框每一行的 for 循环结束
但是如果我通过 myfun2 优化 returns 一个错误。
很抱歉,如果这是一个简单的问题,但我真的找不到解决它的正确方法,我们将不胜感激。
我也试过了
m <- matrix(c(2,7,8,4,9,10,5,4,2), nrow = 3, ncol =3)
myfun2 <- function (v) {
function(x) sqrt((x-m[1,1])^2 + (x-m[1,2])^2 + (x-m[1,3])^2)
}
optimize(myfun2, c(0,10))
Error in optimize(myfun2, c(0, 10)) :
invalid function value in 'optimize'
必须使用的函数是原来的myfun
,数字被v[1]
、v[2]
和v[3]
代替,在[=15中调用=]循环。
myfun <- function (x, v) {
sqrt((x - v[1])^2 + (x - v[2])^2 + (x - v[3])^2)
}
df <- data.frame(matrix(c(2,7,8,4,9,10,5,4,2), nrow = 3, ncol =3))
res <- apply(df, 1, function(.v) optimize(myfun, c(0,10), v = .v))
do.call(rbind, res)
# minimum objective
#[1,] 3.666648 2.160247
#[2,] 6.666666 3.559026
#[3,] 6.666667 5.887841