public IHttpActionResult Get(Guid? guid) {
if(!guid.HasValue || guid.Value == Guid.Empty)
// return your error here
else
//...
}
我正在使用library(nls2)
# Investigate singular gradient.
# Note that this cannot be done with nls since the singular gradient at
# the initial conditions would stop it with an error.
DF1 <- data.frame(y=1:9, one=rep(1,9))
xx <- nls2(y~(a+2*b)*one, DF1, start = c(a=1, b=1), algorithm = "brute-force")
svd(xx$m$Rmat())[-2]
包,它确定了非线性回归的非线性最小二乘估计。在文档中,其中一个例子(如上所示)指出它正在调查奇异梯度。我看到nls2
是一个xx
对象,没有参数估计值。这是否意味着算法没有收敛?为什么是这样?究竟nls
在做什么?
答案 0 :(得分:1)
蛮力没有收敛的概念。它只是根据给定的起始值或值来计算目标函数,并根据特定的参数返回一个或多个nls对象。有关详细信息,请参阅?nls2
。
通常它用于获取输入到nls或其他优化函数的起始值,用于调查奇异值(因为nls
扼流圈而nls2
没有)或仅仅评估{{1已知值的目标函数。
由于问题中复制的文档中的示例给出了nls2一个起始值,因此它评估了该单个值的目标并返回。参数估计值只是评估它的参数值,即起始值。
nls
> coef(xx)
a b
1 1
是一个矩阵,如果问题在计算点处是奇异的,则其单值向量包含至少一个零。 R函数xx$m$Rmat()
返回一个列表,其中组件d是奇异值的向量,u和v是接下来的两个组件,其中v是特征向量。我们对你不感兴趣所以[-2]被用来省略它。
对于这种特殊情况,我们看到第二个奇异值为零:
svd(...)
并且它对应于特征向量
s <- sv(xx$m$Rmat)
s$d
## [1] 6.708204 0.000000
并且因为特征向量仅被确定为与标量倍数相同:
v2 <- s$v[, 2]; v2
## [1] -0.8944272 0.4472136
这是当前评估点的奇点方向。在这种情况下,添加(-2,1)到(1,1)的任何倍数给出RHS,其值与(1,1)处的RHS相同,因此在该方向上明显是单数。在这种情况下,由于RHS的线性,它比一般情况更简单,但对于非线性目标函数,它相对于切线空间类似地起作用,即无穷小。