首页 > 解决方案 > 我正在尝试使用拍摄方法找到一个周期轨道

问题描述

def integrate_ode(ode,u0,T):
    sol=solve_ivp(ode,T,u0)
    return sol.y[:,-1]

def phase(ode,u0):
    return ode(0,u0)[0] #dx/dt(0)

def shooting(ode,U):
    print(len(U))
    u0=U[0:-1]
    #print(u0)
    T=U[-1]
    #print(T)
    G=np.concatenate((integrate_ode(ode,u0,T)-u0,phase(ode,u0)))
    return G

要获得我正在使用的解决方案:

fsolve(lambda U:shooting(ode1,U),...(initial conditions))

我收到此错误:

IndexError: invalid index to scalar variable.

这是我的完整追溯:

Traceback (most recent call last):
  "...Python\workweek16.py", line 62, in <module>
    G=fsolve(lambda U:shooting(ode1,U),(0,0))
  File "C:\Users\tmara\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\scipy\optimize\minpack.py", line 160, in fsolve
    res = _root_hybr(func, x0, args, jac=fprime, **options)
  File "C:\Users\tmara\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\scipy\optimize\minpack.py", line 226, in _root_hybr
    shape, dtype = _check_func('fsolve', 'func', func, x0, args, n, (n,))
  File "C:\Users\tmara\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\scipy\optimize\minpack.py", line 24, in _check_func
    res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
  File "...Python\workweek16.py", line 62, in <lambda>
    G=fsolve(lambda U:shooting(ode1,U),(0,0))
  File "...Python\workweek16.py", line 51, in shooting
    G=np.concatenate((integrate_ode(ode,u0,T)-u0,phase(ode,u0)))
  File "...Python\workweek16.py", line 40, in integrate_ode
    sol=solve_ivp(ode,T,u0)
  File "C:\Users\tmara\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\scipy\integrate\_ivp\ivp.py", line 508, in solve_ivp
    t0, tf = float(t_span[0]), float(t_span[1])
IndexError: invalid index to scalar variable.

有谁知道该怎么做?

标签: pythonscipyode

解决方案


t_span论点solve_ivp实际上需要是一个时间跨度。所以T[0,T].


推荐阅读