r-求解一个超定非线性方程组,同时最大化不同的函数



我在R中尝试实现这一点时遇到了困难。我有一个用户定义的非线性函数,它接受一个向量x,并给出另一个向量F作为输出。此外,我还有第二个函数L,它取向量并给出一个数字作为输出(事实上,这与x的可能性有关,但这与问题无关(。以下是这些函数的样子(我只是举了一个例子(:

F <- function(x) {
c(
exp(x[1]*(1-x[2])) / (exp(x[1]*(1-x[2])) + exp(x[3]*(1-x[4]))) - 0.2,
exp(x[3]*(1-x[4])) / (exp(x[1]*(1-x[2])) + exp(x[3]*(1-x[4]))) - 0.8
)
}
L <- function(x) {
0.5^exp(x[1]*abs(x[4]-x[2]))
}

一方面,我想找到使F最小化的x的值(即,我想求解F(x)=0(,但这还不是全部。首先,系统F(x)=0总是超定的。我想做的是在所有可能的解决方案中找到最大L(x)的解决方案。我想我可以试着最小化像sum(F(x)) + 1/L(x)这样的东西,但我看到了一些问题(例如,FL的尺度可能非常不同,我事先不知道它们(。

如果有人知道如何解决这个问题,那就太棒了。提前感谢!

J

您可以考虑以下方法:

library(DEoptim)
fn_Opt <- function(x, bool_Print = FALSE)
{
term1 <- (exp(x[1] * (1 - x[2])) / (exp(x[1] * (1 - x[2])) + exp(x[3] * (1 - x[4]))) - 0.2) 
term2 <- (exp(x[3] * (1 - x[4])) / (exp(x[1] * (1 - x[2])) + exp(x[3] * (1 - x[4]))) - 0.8) 
term3 <- (0.5 ^ exp(x[1] * abs(x[4] - x[2])))
val_Ret <- term1 + term2 - term3

if(bool_Print == TRUE)
{
print("term1")
print(term1)
print("term2")
print(term2)
print("term3")
print(term3)
}

if(is.nan(val_Ret))
{
return(10 ^ 30)

}else
{
return(val_Ret)
}
}
obj_DEoptim <- DEoptim(fn = fn_Opt, lower = rep(0, 4), upper = rep(1, 4), control = list(itermax = 1000))
fn_Opt(x = obj_DEoptim$optim$bestmem, bool_Print = TRUE)

这个问题似乎有不止一种解决办法。

最新更新