在 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) }
这只是您“打包”的原始代码,用于接受温度矢量。 (而且我很确定这不是科学家名字的正确拼写。)
不确定你的第二个函数哪里有缺陷。可能是括号不匹配。在尝试用单个表达式复制结果并多次失败后,我现在想知道这是否真的是数值溢出(或下溢)的问题。
我正在尝试在 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) }
这只是您“打包”的原始代码,用于接受温度矢量。 (而且我很确定这不是科学家名字的正确拼写。)
不确定你的第二个函数哪里有缺陷。可能是括号不匹配。在尝试用单个表达式复制结果并多次失败后,我现在想知道这是否真的是数值溢出(或下溢)的问题。