我正在尝试设置“ Solver”功能,以将“ gfc”的值优化为零,从而在以下等式上改变(并找到)变量“ fc”。参数已给出。
f0 = 6
f1 = 1
k = 2
ft = 0.3
gfc = ft-((f0-fc)/k)+((f1/k)*ln((fc-f1)/(f0-f1)))
在Excel中解决此功能,我发现fc = 5.504的值。
答案 0 :(得分:2)
我假设您的意思是您想求解base = sum/n;
extra = sum%n;
// initialize the input control variables
fileIndex = 0
fileOffset = 0
fileRemain = length of file 0
// initialize the output control variables
threadIndex = 0
threadNeeds = base
if (threadIndex < extra)
threadNeeds++
while (1)
{
// decide how many bytes can be assigned, and generate some output
byteCount = min(fileRemain, threadNeeds)
add (file.name, fileOffset, fileOffset+byteCount-1) to the list of ranges
// decide whether to advance to the next input and output items
threadNeeds -= byteCount
fileRemain -= byteCount
if (threadNeeds == 0)
threadIndex++
if (fileRemain == 0)
fileIndex++
// are we done yet?
if (threadIndex == n || fileIndex == files.size())
break
// if we've moved to the next input item, reinitialize the input control variables
if (fileRemain == 0)
{
fileOffset = 0
fileRemain = length of file
}
// if we've moved to the next output item, reinitialize the output control variables
if (threadNeeds == 0)
{
threadNeeds = base
if (threadIndex < extra)
threadNeeds++
}
}
等于零的fc
的值。我们假设gfc
位于fc
和f0
之间。在这种情况下,使用问题中的常量,我们有以下基本R解。 (另外,具有此类功能的软件包包括nleqslv和rootSolve。)
1)优化,我们可以最小化gfc ^ 2:
f1
给予:
gfc <- function(fc) ft-((f0-fc)/k)+((f1/k)*log((fc-f1)/(f0-f1)))
optimize(function(x) gfc(x)^2, c(f0, f1))
2)uniroot ,或者我们可以直接使用$minimum
[1] 5.504383
$objective
[1] 4.777981e-12
:
uniroot
给予:
u <- uniroot(gfc, c(f0, f1))
3)我们也可以通过重写
来直接解决此问题,而无需使用> u
$root
[1] 5.504386
$f.root
[1] 6.72753e-09
$iter
[1] 5
$init.it
[1] NA
$estim.prec
[1] 6.103516e-05
或optimize
之类的任何功能
uniroot
因此,我们将gfc的第一个术语移至LHS,然后在该术语中将fc隔离开来,将所有其他内容放到RHS中。
gfc(fc) = 0
将其写为:
fc = f0 - k*(ft + ((f1/k)*log((fc-f1)/(f0-f1))))
我们只是迭代f。
fc = f(fc)
4)蛮力另一种方法是在许多点上评估gfc,然后选择gfc ^ 2最小的那一点。您将间隔细分得越细,答案就越准确。
f <- function(fc) f0 - k*(ft + ((f1/k)*log((fc-f1)/(f0-f1))))
fc <- (f0 + f1)/2 # starting value
for(i in 1:10) fc <- f(fc)
fc
## [1] 5.504386
我们可以显示解决方案:
s <- seq(f0, f1, length = 100000)
g <- gfc(s)
s[which.min(g^2)]
## [1] 5.504395
答案 1 :(得分:2)
您可以使用androidx.preference:1.1.0-alpha05
来查找函数等于零的位置:
uniroot