我正试着用R写出我的第一个函数,用普朗克函数计算不同温度下的发射度。我可以像下面这样手动完成,温度从200到310K。
pi <- 3.141593
h <- 6.626068963e-34
c <- 2.99792458e+8
lambda <- 4 * 1e-6
k <- 1.38e-23
t <- c (200:310)
a <- (2*pi*(c^2)*h)/(lambda^5)
b <- exp((h*c)/(lambda*k*t))
B <- a * (1/(b-1))其中B是我想要的值的向量。
下面是用R编写函数的一种尝试:
P_function <- function(t, pi = 3.141593, h = 6.626068963e-34, c = 2.99792458e+8,
lambda = 4 * 1e-6, k = 1.38e-2) {
((2*pi*(c^2)*h)/(lambda^5)) *((1/(exp((h*c)/(lambda*k*t))-1)))
}现在对于不同的t值(200-300K),我该如何实现这个函数?
发布于 2021-11-17 04:41:09
有几个问题。首先,pi已经是一个定义的常量,其精度比您使用的要高。
> rm(pi) # remove your copy
> pi
[1] 3.141593 # default for console printing is only 8 digits
> print(pi, digits=18)
[1] 3.14159265358979312 # but there is more "depth" to be had其次,将科学常量放在参数列表中是没有意义的。因为它们是常量,所以它们可以在主体中定义。参数列表用于可能因情况不同而不同的项目。
newPfun <- function(t) { h <- 6.626068963e-34
c <- 2.99792458e+8
lambda <- 4 * 1e-6
k <- 1.38e-23
a <- (2*pi*(c^2)*h)/(lambda^5) #pi is already defined
b <- exp((h*c)/(lambda*k*t))
B <- a * (1/(b-1))
return(B) }这只是您“打包”的原始代码,用于接受温度矢量。(我很确定这不是科学家名字的正确拼写。)
不确定你的第二个函数哪里有缺陷。也许是一个不匹配的括号。在尝试用一个表达式复制结果并多次失败后,我现在想知道这是否真的是数值溢出(或下溢)的问题。
https://stackoverflow.com/questions/69998904
复制相似问题