“只有length1数组可以转换为Python标量”并停止零错误

2024-04-19 10:15:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我用这个代码作为一个项目的一部分来模拟3个物体的轨道。我在这一部分使用欧拉方法,但我得到一些错误,我不知道如何摆脱。你知道吗

import vpython as v
from numpy import arange, linspace, array
import numpy as np

np.seterr(divide='ignore')
Earth = array([-1.47E+11, 0, 0, -30290])
Mars = array([-2.07E+11, 0, 0, -26500])

def derivatives(Body1, Body2, t):
    Mass_earth = 5.97E+24
    Mass_mars = 6.42E+23
    Mass_sun = 1.99E+30
    Abs_Radius_earth = 1.47E+11
    Abs_Radius_mars = 2.07E+11
    Radius_earth = array([Body1[0], Body1[1]])
    Radius_mars = array([Body2[0], Body2[1]])
    ve = 1
    vm = 1
    G = 6.67408E-11
    dvedt = (G*Mass_sun*Radius_earth)/(np.abs(Abs_Radius_earth))**3 +       np.divide((G*Mass_mars*(Radius_mars-Radius_earth)), (np.abs(Radius_mars-Radius_earth))**3)
    dvmdt = (G*Mass_sun*Radius_mars)/(np.abs(Abs_Radius_mars))**3 + np.divide((G*ME*(Radius_earth-Radius_mars)), (np.abs(Radius_earth-Radius_mars))**3)
    dvedt = v.vector(float(dvedt[0]), float(dvedt[1]), 0)
    return(ve, vm, dvedt, dvmdt)

Evol = array([Earth[2], Earth[3]])
Epol = array([Earth[0], Earth[1]])
Mvol = array([Mars[2], Mars[3]])
Mpol = array([Mars[0], Mars[1]])
E = array([Epol, Evol])
M = array([Mpol, Mvol])

for t in arange(1, 11, 1):
    Evol += (t * derivatives(E, M, 1)[2])
    E = array([Epol, Evol])
    print(E, M)

以下是错误消息:

C:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:20: RuntimeWarning: invalid value encountered in true_divide
C:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:21: RuntimeWarning: invalid value encountered in true_divide
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-ef24509c2299> in <module>()
     31 
     32 for t in arange(1, 11, 1):
---> 33     Evol += (t * derivatives(E, M, 1)[2])
     34     E = array([Epol, Evol])
     35     print(E, M)

<ipython-input-25-ef24509c2299> in derivatives(Body1, Body2, t)
     20     dvedt = (G*Mass_sun*Radius_earth)/(np.abs(Abs_Radius_earth))**3 + np.divide((G*Mass_mars*(Radius_mars-Radius_earth)), (np.abs(Radius_mars-Radius_earth))**3)
     21     dvmdt = (G*Mass_sun*Radius_mars)/(np.abs(Abs_Radius_mars))**3 + np.divide((G*ME*(Radius_earth-Radius_mars)), (np.abs(Radius_earth-Radius_mars))**3)
---> 22     dvedt = v.vector(float(dvedt[0]), float(dvedt[1]), 0)
     23     return(ve, vm, dvedt, dvmdt)
     24 

TypeError: only length-1 arrays can be converted to Python scalars

这可能是一个简单的解决办法,但我只是似乎无法得到它的工作。我主要集中在地球的所有部分,如果我能得到工作,我会把它应用到其他行星(火星)。 任何帮助都会非常有用。你知道吗


Tags: innpabsarraymasssunmarsdivide