2024-05-29 04:55:25 发布
网友
def nu(r): '''Returns the stellar density function.''' return 1 / ( r * (1 + (r / a))**3) mass_int = lambda r: 4 * r**2 * nu(r) print(mass_int(0))
这给了我一个除以零的错误,大概是因为1/r项是单独计算的。使用sympy来形成正确的代数表达式是解决这个问题的唯一方法吗?看起来很荒谬。在
它没有做错什么。给定r = 0:
r = 0
1 / ( r * (1 + (r / a))**3) = 1 / ( 0 * (1 + (0 / a))**3) = 1 / ( 0 * (1 + 0 )**3) = 1 / ( 0 * 1 **3) = 1 / ( 0 * 1 ) = 1 / 0
所以当你请求nu(0)时,你会得到一个错误。它不会向前看,也不会做特殊的代数运算,它只是抛出错误。Python不是魔法,你需要同情也不是荒谬的。在
nu(0)
我建议您只需为mass_int添加一个特殊情况r == 0。在
mass_int
r == 0
这不是一个python问题,甚至不是一个计算机编程问题。这是简单的数学。在
f(x) = 1 / (x * (1 + x/a)**3) g(x) = 4x**2 h(x) = 4x / (1 + x/a)**3
f(g(r))和h(r)之间有区别吗?当然有。即使图看起来完全一样,f(g(0))是未定义的,并且在图上必须显示为点不连续。在
作为该函数的智能用户,您可以认识到存在点不连续性。如果选择,可以用h(r)替换f(g(r))。唯一的区别是将函数定义为0。在
数学本身并不是这样做的,没有编程语言会自行减少函数组合,除非你要求它这样做,因为你是用户,你应该知道你想从程序中得到什么。如果您创建了一个具有点不连续性的函数组合,那么这样做是有原因的。智能应该在程序员身上,而不是在编译器中。或者自己编写和减少函数,或者做一些类似于让sympy来做的事情。不管是哪种方式,这都取决于你让计算机明白这两个函数应该是相互关联的。在
它没有做错什么。给定
r = 0
:所以当你请求
nu(0)
时,你会得到一个错误。它不会向前看,也不会做特殊的代数运算,它只是抛出错误。Python不是魔法,你需要同情也不是荒谬的。在我建议您只需为
mass_int
添加一个特殊情况r == 0
。在这不是一个python问题,甚至不是一个计算机编程问题。这是简单的数学。在
f(g(r))和h(r)之间有区别吗?当然有。即使图看起来完全一样,f(g(0))是未定义的,并且在图上必须显示为点不连续。在
作为该函数的智能用户,您可以认识到存在点不连续性。如果选择,可以用h(r)替换f(g(r))。唯一的区别是将函数定义为0。在
数学本身并不是这样做的,没有编程语言会自行减少函数组合,除非你要求它这样做,因为你是用户,你应该知道你想从程序中得到什么。如果您创建了一个具有点不连续性的函数组合,那么这样做是有原因的。智能应该在程序员身上,而不是在编译器中。或者自己编写和减少函数,或者做一些类似于让sympy来做的事情。不管是哪种方式,这都取决于你让计算机明白这两个函数应该是相互关联的。在
相关问题 更多 >
编程相关推荐