Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行Python脚本&x27;内存错误'';对于';循环_Python_Loops_For Loop - Fatal编程技术网

运行Python脚本&x27;内存错误'';对于';循环

运行Python脚本&x27;内存错误'';对于';循环,python,loops,for-loop,Python,Loops,For Loop,我试图建立三体问题的模型,其中有三个广义坐标(一个径向坐标和两个角度坐标)和三个二阶(耦合)微分方程。我想看看系统在改变初始条件rho[0]时是如何演化的。 我的剧本有什么错误吗?变量和参数在上面定义得很好,所以我将省略它们;代码如下: for i in range(1000000,10000000,1000000): rho[0] = i rho[1] = rho[0] + vrho*dt theta[1] = theta[0] + v

我试图建立三体问题的模型,其中有三个广义坐标(一个径向坐标和两个角度坐标)和三个二阶(耦合)微分方程。我想看看系统在改变初始条件rho[0]时是如何演化的。 我的剧本有什么错误吗?变量和参数在上面定义得很好,所以我将省略它们;代码如下:

    for i in range(1000000,10000000,1000000):
        rho[0] = i

        rho[1] = rho[0] + vrho*dt
        theta[1] = theta[0] + vtheta*dt #angulos radianes
        phi[1] = phi[0] + vphi*dt

        for t in range(1, N-1):
        #Velocidades de las coordenadas
            v[0,t-1] = (rho[t] - rho[t-1])/dt
            v[1,t-1] = (theta[t] - theta[t-1])/dt
            v[2,t-1] = (phi[t] - phi[t-1])/dt

        #"Ecuaciones diferenciales"
            rho[t+1] = (2*rho[t] - rho[t-1]) + (rho[t]*(v[2,t-1]**2) - G*M/(rho[t]**2) - (9*G*M*((np.cos(theta[t]-phi[t]))**2)*(l**2))/(8*(rho[t]**4)))*(dt**2)
            theta[t+1] = (2*theta[t] - theta[t-1]) + ((-3*G*M*np.sin(2*(theta[t]-phi[t])))/(2*(rho[t]**3)))*(dt**2)
            phi[t+1] = (2*phi[t] - phi[t-1]) + ((3*G*M*np.sin(2*(theta[t]-phi[t]))*(l**2))/(8*(rho[t]**5)) - (2*v[0,t-1]*v[2,t-1])/(rho[t]))*(dt**2)

            for j in range(0,N):
                x[j] = rho[j]*np.cos(phi[j])
                y[j] = rho[j]*np.sin(phi[j])

                plt.plot(x,y)
这就是错误:

---------------------------------------------------------------------------
    MemoryError                               Traceback (most recent call last)
<ipython-input-3-4c789e1dfc65> in <module>()
     21             y[j] = rho[j]*np.sin(phi[j])
     22 
---> 23             plt.plot(x,y)
---------------------------------------------------------------------------
MemoryError回溯(上次最近调用)
在()
21y[j]=rho[j]*np.sin(φ[j])
22
--->23 plt.绘图(x,y)
我试图做的是让python为不同的初始条件求解ODE,在orden中保存rho、theta、phi和V向量来操作它们。考虑到我想要物体的轨迹,对于那些rho和phi的值,我想把它们转换成笛卡尔坐标,绘制轨迹,然后用rho的下一个初始条件重新启动ODE


我必须引入j计数器,因为x和y被定义为np.zero(N),以匹配rho、θ和phi的尺寸。计数器表示该向量的位置,其思想是,对于ρ和φ中的每个位置,笛卡尔等价物保存在同一位置。由于t上升到N-1,因此最后可用的t是N-2,我不知道如何避免为添加另一个;为了解决起点差异,我可以为t-1编写最后一个“for”开关j,但这不会导致尺寸误差吗?

您可以尝试以下代码:

for i in range(1000000,10000000,1000000):
    rho[0] = i

    rho[1] = rho[0] + vrho*dt
    theta[1] = theta[0] + vtheta*dt #angulos radianes
    phi[1] = phi[0] + vphi*dt

    for t in range(1, N-1):
        # Velocidades de las coordenadas
        v[0,t-1] = (rho[t] - rho[t-1])/dt
        v[1,t-1] = (theta[t] - theta[t-1])/dt
        v[2,t-1] = (phi[t] - phi[t-1])/dt

        # "Ecuaciones diferenciales"
        rho[t+1] = (2*rho[t] - rho[t-1]) + (rho[t]*(v[2,t-1]**2) - G*M/(rho[t]**2) - (9*G*M*((np.cos(theta[t]-phi[t]))**2)*(l**2))/(8*(rho[t]**4)))*(dt**2)
        theta[t+1] = (2*theta[t] - theta[t-1]) + ((-3*G*M*np.sin(2*(theta[t]-phi[t])))/(2*(rho[t]**3)))*(dt**2)
        phi[t+1] = (2*phi[t] - phi[t-1]) + ((3*G*M*np.sin(2*(theta[t]-phi[t]))*(l**2))/(8*(rho[t]**5)) - (2*v[0,t-1]*v[2,t-1])/(rho[t]))*(dt**2)

    for j in range(0,N):
        x[j] = rho[j]*np.cos(phi[j])
        y[j] = rho[j]*np.sin(phi[j])

    plt.plot(x,y)

我认为在绘图阶段有一些不好的缩进,这意味着每次你想要绘制一条线,你实际上是在绘制N^2条线

您有一个到N的双嵌套循环,因此数组的大小将是O(N^2)。谢谢,但是对于t的每个值,有没有其他方法将极坐标转换为笛卡尔坐标?我已经试过“pol2cart”,但它不起作用。你要告诉我N是什么吗?plt.plot在j的
循环中是故意的吗?你不想在绘制x和y之前完成计算吗?对不起,N是向量的维数,设置为100000,而t=300和dt=t/N。但我尝试过用其他值运行代码。我只是用spyder运行代码,虽然它没有返回错误,但它只绘制了一个ODE的解。(我已经在各种初始条件下手动检查了行为,但试图找出一种优化代码的方法,以便使其对rho[0]的不同IC集进行评估,然后根据这些结果改变I的范围和步骤)对于每个I,可能值得打印出x和y的前几对。您可能会看到这些值是疯狂的,或者它没有进入i循环的第二次迭代,或者其他什么。