如何解决这个 Solver Excel like R 中的问题?

How can solve this Solver Excel like problem in R?

我很难实现以下优化问题,我知道 excel 中提供的解决方案,现在我正尝试在 R 中实现它。

数据为:

Kurt=4
Skew =-0.2

如图所示分别为k和t。

在 R 中找到较低和较高的 omega 很简单:

对于较低的欧米茄:

w1 = c(-Kurt-6,0,3,2,1)
f = polyroot(w1)
w11=max(Re(f));w11
[1] 1.206575
w2 = c(-4-(Skew)^2 ,0,3,1)
g = polyroot(w2);g
w22=max(Re(g));w22
wl = max(w11,w22) ;wl
1] 1.206575

对于上层omega:

wu = (-1+(2*(Kurt+2))^(0.5))^(0.5)
wu
[1] 1.569746

上下欧米伽R与Excel一致。

现在的问题是 excel 求解器发现 omega 值为 1.56425 但我不知道如何在 R 中验证它。

我也尝试了 optimize 上限和下限的功能:

m = function(x){ (4+2*( x^2 - ((Kurt +6) /(x^2+2*x+3) )   ))^(0.5) }
om = function(x){(x-1-m(x) )*(x+2+(m(x) /2))^2 - Skew}
optimize(om,interval = c(wl,wu), maximum = TRUE)

但我不知道如何找到上欧米茄和下欧米茄之间的结果 1.56425,如 photo.It 中所述,在 Excel 中创建求解器,但我不知道如何执行它在 R.

请原谅我的照片,但 stack overflow 没有 latex 无法正确显示它。

有什么帮助吗?我怎样才能在 R 中做到这一点?

excel sheet就是下面这张图:

您需要提供更多 information/explanations 以便人们可以真正复制您的示例。 (例如,什么是m,为什么它是x的函数?为什么在最后一步优化,而不是寻找零?)。

无论如何,验证 Excel 解的一种方法是将其代入方程,看看方程是否成立。

此外,您还可以绘制函数以了解优化可能失败的原因:

plot(x = seq(wl, wu, length.out = 50),
     y = om(seq(wl, wu, length.out = 50)))

更新 感谢您的附加信息。 (您还想 post 描述的来源。)您的函数中似乎至少有两个编码错误。尝试:

m <- function(x){
    (4 + 2*(x^2 - ((Kurt + 6) /(x^2 + 2*x + 3))))^(0.5) - 2
}
om <- function(x){
    (x - 1 - m(x))*(x + 2 + (m(x) /2))^2 - Skew^2
}
uniroot(om, interval = c(wl,wu))
## $root
## [1] 1.56425
## 
## $f.root
## [1] 3.204998e-05
## 
## $iter
## [1] 3
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 6.103516e-05

请注意,我使用 uniroot 是因为您正在寻找一个零(a.k.a。一个根)。