如何将R中的函数正确定义为有限和?当我尝试将函数定义为有限和时,我从R得到不一致的行为,如下所示。该函数正确评估但不会在不返回错误的情况下绘制或查找最大值或最小值。见下面的M!WE。
m = 1:3
y <- seq(-1 , 1 , by =0.01 )
data <- as.vector( c(-pi , exp(1) , 0.1 ) )
g <- function(y){
ifelse( abs(y)==0.5 | y==0 , sum(data[m]) , sum(data[m]*( sin(2 *pi *y - pi * (m-2)) / ( 2 *pi *y - pi *(m-2) ) ) ) )
}
g(0)
# [1] -0.3233108
g(0)==g(-0.5)
# [1] TRUE
g(-1/sqrt(2))
# [1] -2.904101
plot(g,y)
Warning messages:
1: In 2 * pi * y - pi * (m - 2) :
longer object length is not a multiple of shorter object length
2: In 2 * pi * y - pi * (m - 2) :
longer object length is not a multiple of shorter object length
3: In data[m] * (sin(2 * pi * y - pi * (m - 2))/(2 * pi * y - pi * :
longer object length is not a multiple of shorter object length
max(g(y))
# [1] NaN
问题在于图表存在并且表现良好,并且最大(和最小值)都存在且甚至是唯一的。更令人困惑的是,错误消息在数学上是错误的。序列y的长度绝对是向量m的长度的倍数(实际上恰好是100的因子)。
我尝试了以下事情但无济于事。
y
包含在as.numeric()
中,希望它能够正确地强制使用向量m-2,就像m和-2一样,但这没有任何帮助。y
中的序列包含在as.vector()
中,希望R最终能够实现这两个长度相关的100倍。再次,这并没有帮助。我知道我必须在这里做一些根本性的错误,但我不清楚缺乏经验,并且对于函数如何为其域中的每个元素返回实数而感到困惑,但不能成为作图。而且,我意识到可能有一些软件包可以通过改写输入来消除所有麻烦,但是我的数学家不能让这些令人费解的矛盾无法解释。
答案 0 :(得分:2)