R:“缺少参数,没有默认值”

时间:2017-01-20 12:19:37

标签: r optimization

由于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

1 个答案:

答案 0 :(得分:2)

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:你似乎是一个喜欢过度打字的受虐狂。