Matlab: besoin d'un regard exterieur

Fermé
rom3478 - 1 sept. 2010 à 22:05
 rom3478 - 2 sept. 2010 à 17:20
Bonjour,

J'ai un soucis de prog. Je suis en train de creer une phase 2 dans un programme par une fonction. J'ai restreint mon probleme à ce qui suit:

je possède deux fichiers . mat avec mes données, du type:

month.mat
1 3 (correspondant au mois mars)
2 3
.....
i 12 (decembre)
...
n 5 (ou n est le nombre total de mes données)

year.mat
1 1988
2 1988
...
i 2003
...
n 2008 (par exemple)

Si je réduis mon problème à:

function[ ]=choiceyear() (ici, je retourne nb en sortie)
load 'year.mat'
load 'month.mat'
for h=1:12 (pour ballayer l'ens. des mois de l'année)
nb=1; (initialisation/réinitialisation à chaque boucle)
for i=1:n
if month(i)==h && year(i)==1989 (si le mois de la ligne i vaut le mois ballaye par h et si
l'annee de cette meme ligne i=1989 alors je place l'indice i
dans la matrice A et j'incremente nb)
A(nb;h)=i; (matrice qui me donne tout les i pour les conditions vrai)
nb=nb+1; (j'incrémente pour connaitre le nombre d'él.)
qui répond aux conditions ci dessus)
end
end
nb (ici, je devrais avoir pour h=1, un nb;h=2,un autre.... hors nb vaut toujours 1 ce qui n'est pas
correct suivant mes donnees)
end
end

Mon but étant de connaitre pour chaque mois d'une année, le nombre d'élément (cad le nbre de relevés collectés). Hors lorsque j'execute les memes intructions sous command wind de matlab. en enlevant "function....", je trouve un nb=1174 (ce qui est juste et quasi immédiat ). Mais lorsque j'appelle la fonction, je trouve nb=1. Et je ne comprend pas pourquoi, je n'ai aucun message d'erreur, et matlab se rend 'busy' pendant 1 min, à croire qu'il calcule ou cherche quelque chose.
Quelqu'un pourrait il m'eclairer sur mon erreur? Merci


1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
Modifié par Char Snipeur le 2/09/2010 à 08:34
function [ nb ]=choiceyear() (ici, je retourne nb en sortie) 
load 'year.mat' 
load 'month.mat' 
for h=1:12 (pour ballayer l'ens. des mois de l'année) 
nb=1; (initialisation/réinitialisation à chaque boucle) 
for i=1:n %% que vaut n ? il n'est pas initialisé 
if month(i)==h && year(i)==1989 (si le mois de la ligne i vaut le mois ballaye par h et si 
l'annee de cette meme ligne i=1989 alors je place l'indice i 
dans la matrice A et j'incremente nb) 
A(nb,h)=i; (matrice qui me donne tout les i pour les conditions vrai) 
nb=nb+1; (j'incrémente pour connaitre le nombre d'él.) 
qui répond aux conditions ci dessus) 
end 
end 
nb (ici, je devrais avoir pour h=1, un nb;h=2,un autre.... hors nb vaut toujours 1 ce qui n'est pas 
correct suivant mes donnees) 
end 
end 

Je ne comprends pas non plus. Tes fichiers ont une ou deux colonnes ?
une matrice s'appelle avec une virgule il me semble A(nb,n), non ?
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
0
Merci Char Snipeur pour ta réponse, alors effectivement je n'avais pas initié n sur ce post mais je l'avais fait autrement. Pour ce qui est de A, j'en ressors une matrice nb lignes, h colonne où i correspond à la valeur de la nb-ième ligne et h-ième colonne.
0
En ce qui concerne mes fichiers, toutes mes données sont sur une colonne. D'autre part, ma matrice postée ici même n'est, disons, que la phase deux de mon prog (ici je ne l'ai pas initialisé), car je ne comprend pas pourquoi nb ne s'incrémente pas alors qu'il existe une multitude de données qui répondent à mes conditions. Et nb m'est nécessaire pour la suite de mon programme. Voilà, si besoin de plus de précision, n'hésite pas, et merci à toid'avoir regardé!!
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
2 sept. 2010 à 16:48
affiche nb au cours des itération pour voir.
En général, un code qui se comporte différemment entre fonction et script, c'est qu'il utilise une variable mal initialisé. Ou comme dans ton cas, lorsque tu fait intervenir des fichiers, des problèmes de chemin. Je ne sais pas ce que deviens le répertoire courant dans une fonction.
Je te conseil de faire une fonction avec les deux vecteurs (month et year) en argument.
0
Ca fonctionne nckel désormais !!! Y'a pas de mot pour exprimer toute ma gratitude! Mille merci!!!!
0