求解R中的给定表达式并找到T值? [已关闭]

问题描述 投票:0回答:1

enter image description here我有一个关于在 R 中求解函数的可能性的问题,但知道答案确实有助于更好地理解 R。

0.10 = (1/(1+(((1.04e+19*((T/300)^(3/2)))/(4e+16))exp((-(0.045)/(0.0259) (T/300))))))

如何求解 R 中的这个表达式并找到 T 的值?

r expression equation
1个回答
1
投票

你的方程没有解。要查看这个定义的函数,定义在正实数上,

f <- function(T) (1/(1+(((1.04e+19*((T/300)^(3/2)))/(4e+16))*exp((-(-0.045)/(0.0259*(T/300)))))))

并定义一个函数

f(x) - a
,以求解方程
f(x) - a = 0

g <- function(x, a) f(x) - a

现在绘制第二个函数。

curve(g(x, 0.10), 0, 1e3)

如图所示,所有

g(x, 0.10) = f(x) - 0.10
的值均为正,
f(x) != 0.10
对于所有
x

从分析上来说,如果函数的符号永远不会改变,那么它就没有根。由于函数是连续的,我们需要做的就是检查它在
0
和最大值附近的值。

g(.Machine$double.eps, 0.10)
#[1] -0.1

最大值由

optimise
确定。

optimise(g, c(0, 1e3), a = 0.10, maximum = TRUE)
#$maximum
#[1] 347.4904
#
#$objective
#[1] -0.09931205

两个值都是负数,这证实了图表所显示的内容。


编辑

上面所说的一切都是对的,但显然函数的表达式是错误的。通过正确的表达,可以通过

uniroot
找到根。请注意,问题图像中给出的解决方案是通过反复试验找到的,下面的解决方案是通过数值方法找到的,但它们是相同的解决方案。

f <- function(T) {
  numer <- 1.04e19*(T/300)^(3/2) / 4e16
  numer <- numer * exp(-0.045/(0.0259*T/300))
  numer <- 1 + numer
  1/numer
}
g <- function(x, a) f(x) - a

xzero <- uniroot(g, a = 0.10, interval = c(0, 1e3))
xzero
#$root
#[1] 192.9487
#
#$f.root
#[1] -1.149569e-10
#
#$iter
#[1] 13
#
#$init.it
#[1] NA
#
#$estim.prec
#[1] 6.103516e-05

curve(g(x, 0.10), 0, 1e3)
abline(h = 0)
points(xzero$root, 0, col = "blue", pch = 16)

© www.soinside.com 2019 - 2024. All rights reserved.