【问题标题】:R : "argument is missing, with no default "R:“参数丢失,没有默认值”
【发布时间】:2017-10-04 18:32:33
【问题描述】:

由于 R 中的 optim(),我正在运行以下代码以最小化函数,但我收到以下消息:“缺少参数“h”,没有默认值”。

我检查了以前的消息,据说括号前通常是逗号,但在我的代码中似乎不是这样。

您能帮我理解该怎么做吗?非常感谢。

代码如下:

A<-function(t,k,h,s){
  out<-exp((h-(s*s/(2*k*k)))*(B(t,k)-t)-(s*s/(4*k))*(B(t,k)^2))
  return(out)
}

B<-function(t, k){
  out<-(1-exp(-k*t))/k
  return(out)
}

P<-function(a, b, r){
  out<-a*exp(-b*r)
  return(out)
}

somme<-function(k,h,s){
  out<-(P(A(1,k,h,s), B(1,k), -0.002)-1.0021)^2+(P(A(2,k,h,s), B(2,k), -0.0016)-1.0036)^2+(P(A(3,k,h,s), B(3,k), -0.001)-1.0038)^2+(P(A(4,k,h,s), B(4,k), -0.0002)-1.002)^2+(P(A(5,k,h,s), B(5,k), 0.00077)-0.9976)^2+(P(A(6,k,h,s), B(6,k), 0.0019)-0.9901)^2+(P(A(7,k,h,s), B(7,k), 0.0031)-0.9796)^2+(P(A(8,k,h,s), B(8,k), 0.0044)-0.9655)^2+(P(A(9,k,h,s), B(9,k), 0.0056)-0.9494)^2+(P(A(10,k,h,s), B(10,k), 0.0067)-0.9317)^2
  return(out)
}

init<-c(k=0,h=0,s=0)
result<-optim(par=init, fn=somme)
result

【问题讨论】:

    标签: r optimization


    【解决方案1】:

    help("optim") 中的文档说(重点由我添加):

    fn
    要最小化(或最大化)的函数,第一个参数是 向量 进行最小化的参数。它 应该返回一个标量结果。

    因此,这是可行的:

    somme <- function(par){
      k <- par[[1]]
      h <- par[[2]]
      s <- par[[3]]
      out <- (P(A(1,k,h,s), B(1,k), -0.002)-1.0021)^2+
        (P(A(2,k,h,s), B(2,k), -0.0016)-1.0036)^2+
        (P(A(3,k,h,s), B(3,k), -0.001)-1.0038)^2+
        (P(A(4,k,h,s), B(4,k), -0.0002)-1.002)^2+
        (P(A(5,k,h,s), B(5,k), 0.00077)-0.9976)^2+
        (P(A(6,k,h,s), B(6,k), 0.0019)-0.9901)^2+
        (P(A(7,k,h,s), B(7,k), 0.0031)-0.9796)^2+
        (P(A(8,k,h,s), B(8,k), 0.0044)-0.9655)^2+
        (P(A(9,k,h,s), B(9,k), 0.0056)-0.9494)^2+
        (P(A(10,k,h,s), B(10,k), 0.0067)-0.9317)^2
      return(out)
    }
    
    init <- c(k = 1, h = 1, s = 1)
    result <- optim(par = init, fn = somme)
    

    PS:你好像是一个喜欢过度打字的受虐狂。

    【讨论】:

    • init&lt;-c(k=0,h=0,s=0) 在这种情况下也不起作用。
    • @setempler 显然。注意B 如何除以k
    • 非常感谢您的解释。我想知道我是更无能还是更受虐狂,也许两者兼而有之……;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2021-09-17
    • 2015-09-27
    • 2021-07-30
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多