首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中编写一个函数来求解Plank方程

在R中编写一个函数来求解Plank方程
EN

Stack Overflow用户
提问于 2021-11-17 04:21:02
回答 1查看 53关注 0票数 0

我正试着用R写出我的第一个函数,用普朗克函数计算不同温度下的发射度。我可以像下面这样手动完成,温度从200到310K。

代码语言:javascript
复制
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编写函数的一种尝试:

代码语言:javascript
复制
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),我该如何实现这个函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 04:41:09

有几个问题。首先,pi已经是一个定义的常量,其精度比您使用的要高。

代码语言:javascript
复制
> 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

其次,将科学常量放在参数列表中是没有意义的。因为它们是常量,所以它们可以在主体中定义。参数列表用于可能因情况不同而不同的项目。

代码语言:javascript
复制
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) }

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69998904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档