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