0
불편한 코드입니다. 죄송합니다. 특히 어리석은 질문이라면.목록 색인이 범위를 벗어남 오류
여기는 목록 오류입니다. 왜 (초보자인지) 모르겠습니다. 누군가, 제발, 고칠 방법을 말해 줄 수 있습니까?
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()
P.S.
이
는 출력 그것은 단순한 3 차 Runge-Kutta 방법이지만, 대부분 synthax에 관한 문제입니다. 파이썬으로 메소드를 구현하려고했습니다.
'rk3'에서 100에서 99로 전환합니다.'n + 1 '로 반복하려고하면 색인은 101까지 올라갑니다. 목록의 색인은 0에서 100까지이므로'IndexError '가 발생합니다. –
환영합니다. 핵심 답변은 역 추적입니다. 'IndexError'는 무효 인덱스를 가지고 뭔가를 참조하려고 할 때 발생합니다. 'a = [1, 2] '를 고려하십시오. 'print (a [2]) '문은'2'가 유효한 인덱스가 아니기 때문에'IndexError'를 발생시킵니다. 코드의 11 번째 라인을 살펴보고'index [i]'가 객체 x, h, v에 유효한 지 고려해보십시오 – DaveL17