1. ホーム
  2. arrays

[解決済み】IndexError: Index 10 is out of bounds for axis 0 with size 10

2022-02-17 12:37:29

質問

xグリッドとxベクトル、そして時間グリッドにメッシュグリッドを数値的に設定していますが、ここでも配列に x (位置) は 0 から 20 の間だけであるべきであり t (時間) は 0 から 1000 までで、熱の方程式を解くために使用します。しかし、例えば、ステップ数を10にしたい場合、毎回エラーが発生します。

"Traceback (most recent call last):
File "/home/universe/Desktop/Python/Heat_1.py", line 33, in <module>
x[i] = a + i*h
IndexError: index 10 is out of bounds for axis 0 with size 10"

以下は私のコードです。

from math import sin,pi
import numpy
import numpy as np

#Constant variables
N = int(input("Number of intervals in x (<=20):"))
M = int(input("Number of time steps (<=1000):" ))

#Some initialised varibles
a = 0.0
b = 1.0
t_min = 0.0
t_max = 0.5

# Array Variables
x = np.linspace(a,b, M)
t = np.linspace(t_min, t_max, M) 


#Some scalar variables
n = []                         # the number of x-steps
i, s = [], []                  # The position and time

# Get the number of x-steps to use
for n in range(0,N):
    if n > 0 or n <= N:
         continue

# Get the number of time steps to use
for m in range(0,M):
    if m > 0 or n <= M:
         continue

# Set up x-grid  and x-vector
h =(b-a)/n
for i in range(0,N+1):
    x[i] = a + i*h

# Set up time-grid
k = (t_max - t_min)/m
for s in range(0, M+1):
    t[s] = t_min + k*s

print(x,t)

解決方法は?

範囲外のインデックスを作成しようとしている。

for s in range(0, M+1):
    t[s] = t_min + k*s

に変更します。

for s in range(M):
    t[s] = t_min + k*s

そして、うまくいくのです。

を作成します。 t の長さで M :

t = np.linspace(t_min, t_max, M) 

にしかアクセスできないわけです。 M の要素を t .

Pythonは常にゼロからインデックスを始めます。そのため

for s in range(M):

を行います。 M ループ、while。

for s in range(0, M+1):

を行います。 M+1 のループになります。