Python 处理轨迹奇异性:删除导致错误的光子
我正在编码一个黑洞(实际上是光子围绕黑洞运行),我需要处理一个半径值小于极限距离的异常 我试过使用if和while TruePython 处理轨迹奇异性:删除导致错误的光子,python,function,exception,while-loop,Python,Function,Exception,While Loop,我正在编码一个黑洞(实际上是光子围绕黑洞运行),我需要处理一个半径值小于极限距离的异常 我试过使用if和while True def哈密顿量(r,pt,pr,pphi): H=(((1-rs/r)**-1)*(pt**2)/2+(1-rs/r)*(pr**2)/2+(pphi**2)/(2*(r**2))) 如果np.amax(H)
def哈密顿量(r,pt,pr,pphi):
H=(((1-rs/r)**-1)*(pt**2)/2+(1-rs/r)*(pr**2)/2+(pphi**2)/(2*(r**2)))
如果np.amax(H)<10e-08:
打印(“您的结果是正确的”)
其他:
打印(“您的结果错误”)
返回(H)
def奇点(H,r):
如果(r).任何<1.5*rs:
打印(H)
其他:
打印(“0”)
返回(H,r)
打印(哈密顿量(r00、pt00、pr00、pphi00))
我想处理r<1.5*rs的情况,这样我就不会再有除法错误信息和奇怪的轨道了。到目前为止,我的代码没有改变任何问题,我仍然收到以下错误消息:
"RuntimeWarning: divide by zero encountered in true_divide
H = (-((1-rs/r)**-1)*(pt**2)/2 + (1-rs/r)*(pr**2)/2 + (pphi**2)/(2*(r**2)))"
我的轨道是完全错误的(例如,我的光子在黑洞中应该是正确的,但是因为在r<1.5*rs处有一个奇点,它们进入然后离开,依此类推)
我想删除导致问题的光子,但我不知道如何删除,有人能帮我吗?我想你提到过,我们不知道奇点到底发生了什么。这里提供的任何答案很可能都不准确,但让我们假设您知道接近0的邻居的行为/动态。我不知道你是如何调用哈密顿函数的,但我可以想象你是用两种方法之一来实现的
在第二种情况下,如果向量属于奇点邻域,则必须通过检查向量来手动构建新向量。这将有点困难,取决于输入的形状,在我看来,逐元素进行数学运算更难调试。我想你提到过,我们不知道奇点到底发生了什么。这里提供的任何答案很可能都不准确,但让我们假设您知道接近0的邻居的行为/动态。我不知道你是如何调用哈密顿函数的,但我可以想象你是用两种方法之一来实现的
在第二种情况下,如果向量属于奇点邻域,则必须通过检查向量来手动构建新向量。这将有点困难,取决于输入的形状,在我看来,逐元素进行数学运算更难调试。您的问题中没有问号。你的问题是什么?问题是没有方程会在奇点中起作用,因为你可能知道,我们的模型无法预测奇点中会发生什么。所以你需要一个变通的方法。我建议在0中添加一个非常小的值以导致错误。否则你可能会破坏导致错误的光子。@LouisSaglio是的,确切地说,我想删除半径小于1.5*rs的光子,但我怎么做?@ThomasWeller我想删除半径小于1.5*rs(定义了rs)的光子,但我不知道如何删除,你知道吗?你的问题中没有问号。你的问题是什么?问题是没有方程会在奇点中起作用,因为你可能知道,我们的模型无法预测奇点中会发生什么。所以你需要一个变通的方法。我建议在0中添加一个非常小的值以导致错误。否则你可能会破坏导致错误的光子。@LouisSaglio是的,确切地说,我想删除半径小于1.5*rs的光子,但我怎么做?@ThomasWeller我想删除半径小于1.5*rs(定义了rs)的光子,但我不知道怎么做,你知道吗?