簡體   English   中英

列表索引超出范圍時出錯

[英]Error with list index out of range

我知道這是令人不舒服的代碼,對不起。 特別是如果這是一個愚蠢的問題。

這是列表錯誤,我不知道為什么(我是初學者)。 有人可以告訴我如何解決嗎?

這是輸出:

Traceback (most recent call last):
  File "C:/Users/milom/PycharmProjects/ChislM/method.py", line 77, in <module>
    vx, vy = rk3(diff1, 0, U0, 10, 100)
  File "C:/Users/milom/PycharmProjects/ChislM/method.py", line 39, in rk3
    x,v=step(f, h, i, x0, U0)
  File "C:/Users/milom/PycharmProjects/ChislM/method.py", line 11, in step
    k2 = f(x[i] + (1 / 3) * h[i], v[i] + (1 / 3) * k1)
IndexError: list index out of range

碼:

import matplotlib.pyplot as plt
import math as m
import pandas as pd

x =[0]*101
v =[0]*101

def step(f, h, i, x0, U0):
    x[0] = x0
    v[0] = U0
    k1 = f(x[i], v[i])
    k2 = f(x[i] + (1 / 3) * h[i], v[i] + (1 / 3) * k1)
    k3 = f(x[i] + (2 / 3) * h[i], v[i] + (2 / 3) * h[i] * k2)
    x[i] = x[i - 1] + h[i]
    v[i] = v[i - 1] + (h[i]) * ((1 / 4) * k1 + (3 / 4) * k3)
    return x, v


def rk3(f, x0, U0, x1, n):
    h = [(x1 - x0) / float(n)]
    for i in range(1, n+1):
        x,v=step(f, h, i, x0, U0)
        ###h= control(f, h[i], i, v[i], x0, U0)
    return x, v


def diff1(x, U):
    return 0.1


def diff(x, U):
    return -(m.cos(10 * x) + ((m.log(1 + x ** 2)) / (1 + x)) * (U ** 2) + U)


def exact_path():
    plt.grid()
    plt.plot(vx, vy)
    plt.show()


def table():
    mytable = pd.DataFrame({
        'Xn': vx,
        'Vn': vy,
    }, index=[i for i in range(0, 101)])
    mytable.index.name = 'number'
    pd.set_option('display.max_rows', None)
    print(mytable)


task = int(input("Task:"))
U0 = float(input("First value- U0:"))

if task == 2:
    vx, vy = rk3(diff, 0, U0, 10, 100)
    table()
    exact_path()

if task == 1:
    vx, vy = rk3(diff1, 0, U0, 10, 100)
    table()
    exact_path()

PS:這是一種簡單的三階Runge-Kutta方法,但主要是有關synthax的問題​​。 我試圖用Python實現方法。

rk3()函數中,您具有h = [(x1 - x0) / float(n)] ,它將創建一個僅包含單個元素的列表。 這意味着可以與之一起使用的唯一有效的非負索引將是h[0] ,並且嘗試使用任何其他索引值(如在for循環中的step()函數中可能step()將導致IndexError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM