在 R 中编写一个函数来求解普朗克方程

Writing a function in R to solve Plank's equation

我正在尝试在 R 中编写我的第一个函数,以使用 Plank 函数针对不同温度计算发射率。对于 200 到 310 K 的温度,我可以手动完成,如下所示。

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),我该如何实现这个功能?

几个问题。首先,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) }

这只是您“打包”的原始代码,用于接受温度矢量。 (而且我很确定这不是科学家名字的正确拼写。)

不确定你的第二个函数哪里有缺陷。可能是括号不匹配。在尝试用单个表达式复制结果并多次失败后,我现在想知道这是否真的是数值溢出(或下溢)的问题。