我试着从一个未知的积分中模拟出数值(以创建一个气候学预报器
我的函数是:$int_{x = 0}^{x = 0.25}。4*y^(-1x) dx$。
通常情况下,人们会输入变量 y
并得到一个值作为输出。但是,我想输入这个积分的值,并得到的值是 y
作为输出,我有3 runif
长度为1 000、10 000和100 000的向量(数值在0和1之间),我用它们作为我的输入值。假设第一个值是0.3,第二个值是0.78。
我想计算哪些值是 y
上面的积分等于0.3(或者第二个值等于0.78)。
我怎样才能在R中做到这一点呢?我已经尝试了一些使用积分函数的东西,但我需要一个y的值来使其工作。
你正试图解决一个带有积分的非线性方程。
直观地讲,你需要做的是从一个区间开始,在这个区间内,所需的y位于。 然后尝试不同的y值并计算积分,通过结果缩小区间。你可以在R中使用 integrate
和 optimize
如下图所示。
f <- function(x, y) {
4*y^(-1/x)
}
intf <- function(y) {
integrate(f, 0, 0.25, y=y)
}
objective <- function(y, value) {
abs(intf(y)$value - value)
}
optimize(objective, c(1, 10), value=0.3)
#$minimum
#[1] 1.14745
#
#$objective
#[1] 1.540169e-05
optimize(objective, c(1, 10), value=0.78)
#$minimum
#[1] 1.017891
#
#$objective
#[1] 0.0001655954
这里: f
是要整合的功能。intf
计算给定y的积分,以及 objective
测量积分值与期望值之间的距离。由于 optimize
函数寻找函数的最小值,它找到y,使目标最接近目标值。
需要注意的是,内含积分的非线性方程一般都很难解。这种情况似乎是可以处理的,因为函数是单调的,而且y是连续的,解y应该是唯一的,可以通过缩小区间很容易找到。