Python 我试图用打靶法找到一个周期轨道

Python 我试图用打靶法找到一个周期轨道,python,scipy,ode,Python,Scipy,Ode,要获得我正在使用的解决方案,请执行以下操作: 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(

要获得我正在使用的解决方案,请执行以下操作:

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.

有人知道该怎么做吗?

solve\u ivp的t\u span参数实际上需要一个时间跨度。因此,将T替换为[0,T]。

您能给出异常的完整回溯吗?对用于集成的库进行标记也是一个好主意。@Blckknght我已将回溯添加到问题中我对添加到标记中的scipy不太了解,但文档建议在传递它以解决ivp时,t需要是一个2元组,错误表明您正在传递一个标量。请稍候。您没有向我们展示一行调用fsolve的代码,将integrate_ode作为优化函数传入。integrate_ode然后再次调用fsolve,传入ode1。这真的是你想做的吗?fsolve使用不同的操作数重复调用函数。所以这至少在**2上。做这件事需要非常非常长的时间。我怀疑这不是你想要的。@TimRoberts所以我想做的是为捕食者-食饵例子构造射击寻根问题;检查它是否能找到周期轨道。我真的不知道如何做到这一点,我知道我必须使用我在问题中给出的函数,但不知道如何实现它们来运行shooting方法
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.