我怎样才能改变这个?

2024-10-04 09:17:50 发布

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

 import numpy as np 
 import matplotlib.pyplot as plt

 def Accel(Sun_x,Sun_y,Planet_x,Planet_y,Grav): 
    Rel_x = Planet_x - Sun_x
    Rel_y = Planet_y - Sun_y
    Rel_3 = (Rel_x*Rel_x+ Rel_y*Rel_y) **1.5
    Aug = (-Grav/Rel_3)
    return Aug*Rel_x,Aug*Rel_y


 for i in range(len(Time)) : 

    SunAcc_1 = Accel(Sun_x,Sun_y,Planet_x,Planet_y,Grav_sun)
    PlaAcc_1 = Accel(Sun_x,Sun_y,Planet_x,Planet_y,Grav_planet)

    Sun_x += SunVel_x * dt + 0.5 * dt * dt * SunAcc_1[0] 
    Sun_y += SunVel_y * dt + 0.5 * dt * dt * SunAcc_1[1]

    Planet_x += PlaVel_x * dt + 0.5 * dt *dt * PlaAcc_1[0]
    Planet_y += PlaVel_y * dt + 0.5 * dt *dt * PlaAcc_1[1]

    SunAcc_2 = Accel(Sun_x,Sun_y,Planet_x,Planet_y,Grav_sun)
    PlaAcc_2 = Accel(Sun_x,Sun_y,Planet_x,Planet_y,Grav_planet)

    SunVelAvg_x = (SunAcc_1[0] + SunAcc_2[0]) /2
    SunVelAvg_y = (SunAcc_1[1] + SunAcc_2[1]) /2

    PlaVelAvg_x = (PlaAcc_1[0] + PlaAcc_2[0]) /2
    PlaVelAvg_y = (PlaAcc_1[1] + PlaAcc_2[1]) /2

    SunVel_x += SunVelAvg_x * dt
    SunVel_y += SunVelAvg_y * dt

    PlaVel_x += PlaVelAvg_x * dt
    PlaVel_y += PlaVelAvg_y * dt

 plt.plot(Planet_x,Planet_y,".r",ms = 2 + i*dt)
 plt.plot(Sun_x,Sun_y,".b",ms = 2 + i*dt)   
 plt.show()

这段代码是用verlet方法计算Sun jupyter的运动的 现在我必须把这些东西(太阳x,太阳y,行星x…等等)改成数组格式。 我试过了,但它一直在吐错误信息


Tags: importdtpltaugrelsunaccelplanet