Bonjour,
Je rencontre une erreur dans ma fonction de réduction : error 21 - Index invalide, après des tests, aucun des indices testés à l'endroit de l'erreur ne dépasse la capacité théorique de la matrice A voici le code de la fonction :
Cette fonction est appelée depuis cette autre fonction ci-dessous(u n'est pas traité dans cette partie de la fonction) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 function[u,y] = reduc(a,b,n) for k=1:(n-1) for p=(k+1):n aux = 0; if a(rslvIndice(p,k,n)) ~= 0 then aux = a(rslvIndice(p,k,n))/a(rslvIndice(k,k,n)); elseif p >= 3 then aux = a(rslvIndice(p-2,k,n))/a(rslvIndice(k,k,n)); end a(rslvIndice(p,k,n)) = 0; disp(a(619)); for j=(k+1):n a(rslvIndice(p,j,n)) = a(rslvIndice(p,j,n))-aux*a(rslvIndice(k,j,n)); // <-- ligne posant problème end b(p)=b(p)-aux*b(k); end end u=a; y=b; endfunction
Enfin, la fonction permettant de calculer un indice unique à partir de deux indices :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function[u] = approximation(x,y,n) matA = zeros(n*n); matB = ones(n,1); [matA,matB] = reduc(matA,matB,n); endfunction
Les tests ont été effectués avec n=25, x étant égal à linspace(1,25,25), y n'est pas utilisé dans la partie du code qui pose problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function[indice] = rslvIndice(x,y,dim) indice = modulo(x,dim) + (y-1)*dim; endfunction
Le problème lors de l'affectation de a à l'indice 601(ligne 13, fct reduc), or le tableau a est censé faire 25*25 cases soit 625 cases, à partir de là je ne sais vraiment plus quoi faire.
Merci d'avance pour votre aide
Partager