0

Je configure numériquement une grille de maillage pour les mailles x-grid et x-vector ainsi que la grille de temps mais j'ai de nouveau mis en place un tableau pour x (position) qui devrait être seulement entre 0 et 20 et t (temps) serait de 0 jusqu'à 1000 ainsi afin de résoudre une équation de la chaleur. Mais chaque fois que je veux pour exemple, je fais le nombre d'étapes 10, je reçois une erreur:IndexError: l'index 10 est hors limites pour l'axe 0 avec la taille 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" 

Voici mon code:

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) 
+0

les tableaux sont à zéro indexés c'est-à-dire 0-9 –

Répondre

0

Vous essayez d'indexer en dehors de la plage:

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

Modification:

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

Et ça marche.

Vous créez t avec la longueur de M:

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

Vous ne pouvez donc accéder à M éléments t.

Python démarre toujours l'indexation avec zéro. Par conséquent:

for s in range(M): 

fera M boucles, tandis que:

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

fera M+1 boucles.

+0

Ya ça fonctionne vraiment maintenant mais les valeurs de x sont censées être divisées en intervalles équidistants qui iraient de: a = 0.0 à b = 1.0, et ce n'est tout simplement pas semble me donner les valeurs que je veux car il donne des valeurs sur 1 – Tonikami04

+0

Merci comme je l'ai maintenant travailler et fonctionner correctement @MikeMuller – Tonikami04

+0

Excellent que cela a aidé. BTW, vous pouvez [accepter] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) une réponse si elle résout votre problème. –