要求解R中的给定表达式并找到T值?

问题描述

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的值?

解决方法

您的方程式没有解决方案。要看到此定义函数,定义为正实数,

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),1e3)

enter image description here

如图所示,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,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,1e3)
abline(h = 0)
points(xzero$root,col = "blue",pch = 16)

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...