请修改R代码为最陡爬升

  • 本文关键字:修改 代码 r
  • 更新时间 :
  • 英文 :


我用R写了以下代码,用于最陡爬坡

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(1.3,1.9,2.4,2.5,2.4,2.5,2.6,2.7,2.7,2.7)
del <-0.01
tol <- 0.00001
b1 <- 2
b2 <- 2.5
sum1 = 0
sum2 = 0
sum3 = 0
sum4 = 0
accept= FALSE 
post <- function(b1,b2){
for (i in 1:10) {
sum1 = sum1 + (y[i]*exp(1-exp(-x[i]/b2)))
sum2 = sum2 + exp(2-2*exp(-x[i]/b2))
sum3 = sum3 + y[i]*x[i]*exp(1-(x[i]/b2))-exp(-x[i]/b2)
sum4 = sum4 + x[i]*exp(2-(x[i]/b2)-2*exp(-x[i]/b2))
}
f = function(b1,b2){ 
(-0.01*(b1+b2))+(100*b1*sum1)-(50* sum2*(b1)^2) 
}
db1 = function(b1,b2){
-0.01+(100*sum1)-(100*b1*sum2)
}
db2 = function(b1,b2){ 
-0.01+(100*(b1/b2)^2*sum4)-(100*(b1/(b2)^2)*sum3)
}
while (accept==FALSE){
b1_new = del*db1(b1,b2) + b1
b2_new = del*db2(b1,b2) + b2
db1_new = db1(b1_new,b2_new)
db2_new = db2(b1_new,b2_new)
}
if(abs(db1_new) > abs(db1(b1,b2)) & abs(db2_new) < abs(db2(b1,b2))){
accept=TRUE
del = del/2
db1_new = db1(b1_new,b2_new)
db2_new = db2(b1_new,b2_new)
new_point = c(db1(b1_new,b2_new),db2(b1_new,b2_new))
}
}  
print(c(b1,b2))

这段代码没有更新我的值,我不确定代码有什么问题。任何帮助都是感激的

我已经尝试多次更改此代码,但似乎总是得到一个错误或值不更新。我希望在代码

之后打印新值

首先,在代码的任何地方都不调用函数。您可能想呼叫new_point <- post(b1, b2)

其次,你的函数接受参数b1b2,但是当你在代码中使用变量时,它们是局部的。这意味着在函数中改变b1和b2不会改变全局变量。

b <- 10
modb <- function(b) {
b <- 20
}
modb()
print(b)

…将打印10

第三:你正在计算代码中称为db1_newdb2_new的变量,但你没有返回它们。这并不意味着代码根本不返回任何内容,它会返回:它返回最后计算的表达式的值(可能是new_point),但这可能不是您想要的。您应该显式地指定返回值,例如使用return(c(db1_new, db2_new))

第四,语句while(accept == FALSE) { ... }永远不会结束,因为您没有在循环中更改accept的值。希望对你有帮助。

最新更新