You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言非线性最小二乘拟合代码中限制参数a和m

给非线性最小二乘拟合的参数a和m添加约束限制

gsl_nls函数支持通过lower和upper参数直接设置参数的上下界约束,以此限制a和m的取值范围。下面是修改后的完整代码(示例中设置a>0,m在0到5之间,你可根据实际需求调整约束范围):

set.seed(1)

pacman::p_load(gslnls, dplyr)

n <- 50 

Datos <- data.frame(
            theta = (1:n) / n,
            Xb_exp = 2.5 * exp(-1.5 * (1:n) / n) + rnorm(n, sd = 0.1))

plot(Datos$theta,Datos$Xb_exp)

# 添加参数约束:通过lower和upper指定参数范围
Ajuste <- gsl_nls(
  fn = y ~ 1 - exp(-a * ((x - (-2))/length(Xb_exp))^(m + 1)),
  data = data.frame(y = Datos$Xb_exp, x = Datos$theta),
  start = c(a = 1, m = 1),
  algorithm = "lmaccel",
  control = gsl_nls_control(scale = "levenberg", avmax = 0.75),
  trace = TRUE,
  # 自定义约束:a下限为0(无上限),m下限0、上限5
  lower = c(a = 0, m = 0),
  upper = c(a = Inf, m = 5)
)

summary(Ajuste)

a <- predict(Ajuste, interval="prediction", level=0.99)
a <- a[, -c(2,3)]

Datos <- mutate(Datos, Xb_mod = a)
plot(Datos$theta, Datos$Xb_mod)

关键说明

  • lower定义参数的最小允许值,upper定义最大允许值,用Inf/-Inf表示无边界
  • 约束范围需根据模型逻辑调整,比如若要避免m+1为0/负数,可将m的下限设为-0.99(避开-1)
  • 带约束的拟合会自动在指定范围内寻找最小二乘最优解,gsl_nls的算法会适配约束条件完成参数优化

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:36:10