Python 索引越界

Python 索引越界,python,Python,我对Python比较陌生,所以我想这是一个简单的问题,但我真的看不到解决方案。我试图用隐式中点法则解一个微分方程。但是,我得到以下错误: ifmp14@ifmp14:~/Desktop/progs/python/Serie 5$ python rk_Template.py [ 0. 0.] [ 1.84457276e-06 -1.83923593e-06] Traceback (most recent call last): File "rk_Template.py", line 13

我对Python比较陌生,所以我想这是一个简单的问题,但我真的看不到解决方案。我试图用隐式中点法则解一个微分方程。但是,我得到以下错误:

ifmp14@ifmp14:~/Desktop/progs/python/Serie 5$ python rk_Template.py
[ 0.  0.]
[  1.84457276e-06  -1.83923593e-06]
Traceback (most recent call last):
  File "rk_Template.py", line 135, in <module>
    y = IntegrateIM()
  File "rk_Template.py", line 129, in IntegrateIM
    y0[0] = fsolve(F, y0[0] + h* y0[1])
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py",  
  line 139, in fsolve
    res = _root_hybr(func, x0, args, jac=fprime, **options)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 196, in _root_hybr
    shape, dtype = _check_func('fsolve', 'func', func, x0, args, n, (n,))
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 19, in _check_func
    res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
  File "rk_Template.py", line 128, in <lambda>
    F = lambda x: y0[0] - x + h*rhs(0.5*(x+y0[0]),y0[1],x[i])
IndexError: index 1 is out of bounds for axis 0 with size 1

您正在重用x,这破坏了它:lambda
F
将x作为参数,但也已经使用了x数组。请尝试
F=lambda z:y0[0]-z+h*rhs(0.5*(z+y0[0]),y0[1],x[i])

修复缩进。如果我们不知道python代码有什么缩进,就不可能知道它将要做什么。意图现在是固定的
F=lambda x:y0[0]-x+h*rhs(0.5*(x+y0[0]),y0[1],x[i])
在这里,你想做什么?我想实现我找到解决方案的隐式中点规则,我在函数F中使用了两次x作为变量。固定:F=lambda k:y0[0]-k+h*rhs(0.5*(k+y0[0]),y0[1],x[I])
#Constants
V0 = 5 # Volt
f  = 50 # Hertz
n  = 1
Is = 1 * 10**(-9) #Ampere
Vt = 0.025 #Volt
R  = 100000 #Ohm
L  = 0.05 #Henry
C  = 10 * 10**(-9) # Farad

from numpy import *
from scipy.optimize import fsolve


def VIn(t):

    Vin = V0 * sin(2*pi*f*t)
    return Vin

def rhs(y1,y2,x):
    dy2dt = (Is*(exp((VIn(x)-(L*y1)/(n*Vt))-1)-(L/R)*y2-y1)*(1/(C*L)))
    return dy2dt

def IntegrateIM(y0=0.0,dy0=0.0,N=12001,tStart=0, tEnd = 30.0 * 10**(-3)):

    x = zeros(N+1)
    y0 = array([y0,dy0])
    #stepsize
    tEnd = float(tEnd)    
    h = ((tEnd - tStart)/N)

    y = zeros((N+1,2))
    y[0,:] = y0
    y[:,0] = dy0
    x[0] = tStart

    for i in range(0,N):
        print(y0)
        x[i+1] = x[i] + h
        tmp = y0[0]
        F = lambda x: y0[0] - x + h*rhs(0.5*(x+y0[0]),y0[1],x[i])
        y0[0] = fsolve(F, y0[0] + h* y0[1])
        y0[1] = y0[1] - h*rhs(0.5*(tmp + y0[0]),y0[1],x[i])
        y[i+1,:] = y0


    return y
y = IntegrateIM()