数字浮点数64一系列微分方程的RungeKutta 4thorder方法的错误

2024-04-26 07:08:56 发布

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

这是一个四阶龙格库塔方法,我用它来画一些微分方程。在

我们的目标是创建一个4x100000x.1数组,在时间步中的每个点上给我一个值x, y, dx, dy,这样我就可以用这4个参数绘制任何方程。在

#Assumptions
x0, y0 = -.250, .433
x1, y1 = -.250,-.433
x2, y2 =  .500, .000
R      =  .2
C      =  .5
d      =  .25

#Imports
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as intgr 
import math

#ag = [[   x0,  y0], [   x1,   y1], [  x2,  y2]]
mag = [[-.250,.433], [-.250,-.433], [.500,.000]]

def der( xin, t ):
    mag = [[-.250,.433],[-.250,-.433],[.500,.000]]
    x   = xin[0]
    y   = xin[1]
    vx  = xin[2]
    vy  = xin[3]
    dx  = vx
    dy  = vy
    vx2 = 0
    vy2 = 0
    vx1 = -R * vx - C * x
    vy1 = -R * vy - C * y

    for i in range( mag.__len__() - 1 ):
        vx2 = vx2 + (   ( mag[i][0] - x )
                    / ( ( mag[i][0] - x )**2
                      + ( mag[i][1] - y )**2
                      +                 d**2
                        )**1.5
                      )
        vy2 = vy2 + (   ( mag[i][1] - y )
                    / ( ( mag[i][0] - x )**2
                      + ( mag[i][1] - y )**2
                      +                 d**2
                         )**1.5
                      )
        vx3 = vx1 + vx2
        vy3 = vy1 + vy2

        array = [dx,dy,vx3,vy3]
        return array

dt    = .1
t     = np.arange( 0, 100000, dt )
xzero = [.2, .2, 0, 0]

def RK4( func, xzero, t ):
    rows     = xzero.__len__()
    columns  =     t.__len__()
    x        = np.zeros( ( rows, columns ) )
    x_t      = 0
    ind      = 0
    x[:,ind] = xzero
    dt       = t[1] - t[0] 

    for time in t[0:len( t ) - 1]:
        ind      = ind + 1
        K1       = dt * func( x[:,ind-1],           time )
        K2       = dt * func( x[:,ind-1] + .5 * K1, time + .5 * dt )
        K3       = dt * func( x[:,ind-1] + .5 * K2, time + .5 * dt )
        K4       = dt * func( x[:,ind-1] +      K3, time +      dt )
        x[:,ind] = x[:,ind-1] + ( 1.0 / 6.0 ) * (     K1
                                                + 2 * K2
                                                + 2 * K3
                                                +     K4
                                                  )
    return x

^{pr2}$

产生numpyfloat 64错误

我不太清楚为什么,但是我代码中的某些变量没有被解释为数字?在

提前感谢您的帮助,让我知道我是否应该提供更多的代码或更大的上下文。在


Tags: importlentimeasnpdtfuncind
1条回答
网友
1楼 · 发布于 2024-04-26 07:08:56

错误消息:

您正试图用list的实例乘以浮点数。在

这种操作实际上是为整数定义的,在整数中可以得到输入列表的多个副本的串联(给定a = [1, 2, 3]; print( 2*a )返回[1, 2, 3, 1, 2, 3])。因此错误消息。在


解决方案:

特别是提供了一个{/cd5>的算法。在

作为第一点,从RK4()返回ODE函数应该相当明确 作为:

return np.array( [dx, dy, vx3, vy3] )

相关问题 更多 >