coucou Gamma ben si je remplace basiquement tous les Temporaire par Temporaire(index) dans le programme, ca ne marche pas ........ ... .. Il ne faut pas faire quelque chose de plus? A la fin, kt doit être une matrice non?
-----
coucou Gamma ben si je remplace basiquement tous les Temporaire par Temporaire(index) dans le programme, ca ne marche pas ........ ... .. Il ne faut pas faire quelque chose de plus? A la fin, kt doit être une matrice non?
Par "index", tu dois comprendre n-22,tsv-419 ie.Envoyé par yéliecoucou Gamma ben si je remplace basiquement tous les Temporaire par Temporaire(index) dans le programme, ca ne marche pas ........ ... .. Il ne faut pas faire quelque chose de plus? A la fin, kt doit être une matrice non?
Temporaire(n-22,tsv-419)
Il doit par ailleurs te manquer un -22 dans la derniere ligne concernant n. Tu risques d'avoir une surprise à la sortie sinon.
Bonne soirée et bonne lecture de l'aide !
Coucou !! !!!!! merci pour ta réponse mais bon, j'ai fait ce que tu m'as dit, légèrement modifié le programme en:
Ig=data(:,5);
for i=0:1440:18000
%n le numéro du jour ds une année jour 23 au jour 36
for n=23:36
j(n)=n;
% d équivaut à delta la déclinaison qui dépend du jour de l'année
d=((23.45*pi)/180)*sin((((360*(284+n))/365)*pi)/180);
%tsv temps solaire vrai, calculé entre 7h et 12h, symétrique après midi
for tsv=420:720
Temporaire(n-22,tsv-419)=[];
Temporaire(n-22,tsv-419)=[Temporaire(n-22,tsv-419);Ig(420+i:720+i)];
%w angle en minute
w=((0.25*(tsv-720))*pi)/180;
%h équivaut à sin(h)
h=sin(d)*sin(lat)+cos(d)*cos(l at)*cos(w);
Io(n-22,tsv-419)=1367*(1+0.033*cos((((360* n)/365)*pi)/180))*h;
kt(n-22,tsv-419)=Temporaire(n-22,tsv-419)/Io(n-22,tsv-419);
%m masse d'air optique , m=1/sin(h)
m(n-22,tsv-419)=1/h;
end
end
end
et j'ai le message d'erreur suivant :
??? Indexed empty matrix assignment is not allowed.
Error in ==> Stage11 at 17
Temporaire(n-22,tsv-419)=[];
Je ne sais pas quoi faire, comme vous avez pu le constater je ne suis pas très douée en matlab .. .... .......
Salut Yélie,
J'aurais du écrire Temporaire(indexquetudoisdeter minerpartoimeme)
Essai donc ça:
Techniquement ça devrait marcher, même si j'ai quelques doutes sur les formules (notament pour le w). Mais à ce niveau là, c'est à toi de savoir ce qu'il te faut.Ig=Feuil1(:,5);
Temporaire=[];
for i=0:1440:18000
Temporaire=[Temporaire;Ig(420+i:720+i)];
end
%n le numéro du jour ds une année jour 23 au jour 36
for n=1:14
j(n)=n+22;
% d équivaut à delta la déclinaison qui dépend du jour de l'année
d=((23.45*pi)/180)*sin((((360*(284+j(n)))/365)*pi)/180);
%tsv temps solaire vrai, calculé entre 7h et 12h, symétrique après midi
for tsv=1:301
%w angle en minute
w=((0.25*(tsv-301))*pi)/180;
%h équivaut à sin(h)
h=sin(d)*sin(lat)+cos(d)*cos(l at)*cos(w);
Io(n,tsv)=1367*(1+0.033*cos((( (360*j(n))/365)*pi)/180))*h;
kt(n,tsv)=Temporaire(tsv+301*( n-1))/Io(n,tsv);
%m masse d'air optique , m=1/sin(h)
m(n,tsv)=1/h;
end
end
Hello !
faudra que tu m'expliques pourquoi tu as ajouté ces 2 lignes dans l'autre boucle
Temporaire(n-22,tsv-419)=[];
Temporaire(n-22,tsv-419)=[Temporaire(n-22,tsv-419);Ig(420+i:720+i)];
C'était juste les indices à ajouter sur la ligne
kt(n-22,tsv-419)=Temporaire/Io(n-22,tsv-419);
bonne journée.
ahhhhhh ca marche pas !!!!!!
Coucou Gamma, merci pour ton aide mais aie ca ne marche toujours pas, on me dit pour h index exceeds matrix dimensions que faire ????? ??? par contre je ne suis pas convaincue pour tsv, parce que la il va de 1 à 301 qui ne sont pas les valeurs que je veux qu il prenne je veux qu il prenne 420 à 720 puis qu il les classe dans une matrice de 1 à 301 la, ok ..... je ne sais pas si tu vois ce que je veux dire ?? ni d'ailleurs si j'ai raison, ou si c'est toi qui as raison .... . ... ?
Sinon ben coucou Topov, ben en fait, moi meme je ne me souviens pas pourquoi j'ai mis les deux lignes dans l'autre boucle, je l'ai surement fait parce que le programme ne devait pas fonctioner, histoire de voir si cela changeait quelque chose (je pense !! ) ais bon ... c'a n'a rien changé!!
Alors si vous avez encore des petits conseils ... n'hésitez pas car le problème n'est toujours pas résolu!! !!!!
coucou
Bon Topov( excuse, mais bon, une fois encore, je ne connais pas ton prénom ), j'ai réessayé comme tu me l'avai sdit, en mettant les temporaires dans la boucle en haut du programme, mais j'obtiens le message d'erreur suivant :
??? Index exceeds matrix dimensions.
Error in ==> C:\aure.m
On line 31 ==> kt(n-22,tsv-419)=Temporaire(n-22,tsv-419)/Io(n-22,tsv-419);
Une idée ?? ??
là je vois pas...Envoyé par yéliepour h index exceeds matrix dimensions que faire ????? ???
En fait nonEnvoyé par yélieje ne sais pas si tu vois ce que je veux dire ??
Il faudrait que tu expliques ce que tu veux faire pas à pas, en restant très basique.
Remarque je dis ça mais
A lundi si Topov t'as pas résolu tout ça ce week-end
Et en indiquant clairement quelle est ta manière d'enregistrer les donnees (code ou exemple simple commente en français).Envoyé par GammaEn fait non
Il faudrait que tu expliques ce que tu veux faire pas à pas, en restant très basique.
Bizarre que le nombre de tes donnees à traiter soit de 301... Tu te serais pas trompé(e) sur l'effet de bord ?!?
Donne un emplacement exact de tes données pour la premiere série.
Ex. : je ne veux pas de la ligne 1 à 300
je prends de la 301 à 700 soit 400 valeurs
les données situées de 701 à 901 sont elles aussi écartées
902 est le premier indice de ma deuxieme série.
j'ai 10 séries
Fais un effort de clarté en fait Tes données sont extraites par leurs indices. Je pense qu'il y a des erreurs dans ton code à ce niveau (entre autres).
Bonne journée
Coucou tout le monde !!!
Alors pendant le week end j'ai essayé de réfléchier à tout ce que vous m'avez dit, et surtout de chercher l'erreur moi même en essayant le programme ligne apres ligne et pour un n puis en faisant une boucle sur 3 n, pour essayer de voir ou était l'erreur;
je pense l'avoir trouvée , mais je ne sais pas quoi faire pour la "réparer" .... . .. j'en besoin de votre aide!! !!!!!! alors j'essaie de vous expliquer clairement le problème: le programme lancé est:
lat=(16.43*pi)/180;
Ig=Feuil1(:,5); %Extrait les données du tableau de base en un vecteur 27498*1
Temporaire=[];
for i=0:1440:18000
Temporaire=[Temporaire;Ig(420+i:430+i)];
end
for n=1:3
j(n)=n;
d=((23.45*pi)/180)*sin((((360*(284+n))/365)*pi)/180);
for tsv=420:430
w=((0.25*(tsv-720))*pi)/180;
h=sin(d)*sin(lat)+cos(d)*cos(l at)*cos(w);
Puis j'ai essayé deux suites, la première est :
Io(tsv-419)=1367*(1+0.033*cos((((360* n)/365)*pi)/180))*h;
kt(tsv-419)=Temporaire(tsv-419)/Io(tsv-419);
m(tsv-419)=1/h;
Alors cette solution marche, enfin le programme tourne mais elel ne prend en compte que la dernière valeur de n., c'est à dire n=3, or je veux qu'a la fin dans le kt il y ait toutes les valeurs de n .J'ai essayé ca aussi:
Io(n,tsv-419)=1367*(1+0.033*cos((((360* n)/365)*pi)/180))*h;
kt(n,tsv-419)=Temporaire(n,tsv-419)/Io(n,tsv-419);
m(n,tsv-419)=1/h;
Mais ca ne fonctionne pas cette fois ci, le message d'erreur est le suivant:
??? Index exceeds matrix dimensions.
Error in ==> C:\MATLAB6p1\work\TestIo.m
On line 25 ==> kt(n,tsv-419)=Temporaire(n,tsv-419)/Io(n,tsv-419);
Alors, que faire?? je suppose que c'est un problème d'écriture puisque le programme tournait avant que j'essaie de sortir le kt sous forme de tableau ?? ?? ?????
Coucou encore!! !!
je viens d'essayer quelque chose d'autre, en fait je pense que c'est sur le temporaire qu'il y a un problème, le Io a bien 3 lignes et je ne sais plus combien de colonnes quand je passe à n=3 par contre le temporaire si je veux juste afficher temporaire(n,tsv-419) matlab me dit "index exceeds matrix dimension", sachant que si je veux afficher temporaire(tsv-419), ca fonctionne. Quelqu'un peut il m'éclairer???? (Sachant que Temporaire c'est un vecteur 143*1)
Bon ben j'espère que quelqu'un saura pourquoi ca m'affiche ce message .. .. .. ...... ... ?? ??
Bravo! C'est comme ça qu'il faut faire.Envoyé par yéliej'ai essayé de réfléchier à tout ce que vous m'avez dit, et surtout de chercher l'erreur moi même en essayant le programme ligne apres ligne
c'est un message qui arrive quand matlab ne trouve pas ce que tu lui demande de trouver. Ici temporaire est un fichier qui ne contient qu'une seule colonne (c'est un vecteur). Or tu demandes une case à le nième ligne et à la tsv-419 ème colonne... forcément matlab râle. Pour le problème précédent tu rentres les valeurs dans Io, kt et m qui sont des vecteurs (une seule dimension). A chaque fois le calcul va écraser ce qui s'est fait dans la boucle précédente, ce qui explique que tu ne trouves que les résultats correspondant à la dernière valeure de n. Solution: mettre n colonnes comme tu le fais dans le dernier programme :Bon ben j'espère que quelqu'un saura pourquoi ca m'affiche ce message .. ..
Io(tsv-419, n)=1367*(1+0.033*cos((((360* n)/365)*pi)/180))*h;
kt(tsv-419, n)=Temporaire(tsv-419)/Io(tsv-419);
m(tsv-419, n)=1/h;
avec ça ça devrait tourner... ce qui ne veut pas dire que ça fera exactement ce que tu veux (il peut y avoir des erreurs dans les formules). Si tu nous expliques ce que tu veux en langage courant, on devrait pouvoir t'aider.
A+, G
Cooooooooooooooooool Merci Gamma ca marche! !! !!!!!!
Enfin je n'ai pas fait tout à fait comme toi, j'ai fait
kt(n,tsv-419)=Temporaire(tsv-419)/Io(tsv-419)
et ca fonctionne, tout roule comme sur des roulettes c'est magnifique quand ca marche !! Merci !!!! !!
Mais bon comme tu t'en doutes, il y a encore quelques problèmes à résoudre ... .. ..... toujours dans le meme programme, comme vous avez pu le constater, j'ai calculé des valeurs de kt et des valeurs de m ( ce sont à la fin tous les deux des vecteurs 14*301). Alors je vous explique mon nouveau problème :
J'ai pleins de valeurs de m, comprises entre 1 et 8 . je les ai déjà tracées dans un histogramme (grâce à votre aide!!! ) . Mon problème ici est de savoir est ce que c'est possible d avoir par exemple:
Pour 1.2<m<1.4, toutes les valeurs de kt qui correspondent à cet intervalle de m dans un vecteur (toujous dans le but final de tracer un histogramme)
J'essaie d'être claire, mon but final est d'avoir pour 1.2<m<1.4 un histogramme des valeurs de kt puis pour 1.4<m<1.6 un autre histogramme de valeurs de kt qui correspondent etc etc ... .. .. ..... Quelqu'un saurait il comment faire??? ??? ???
Coucou !!!!! alors j'ai rajouté à la fin de mon programme le programme suivant:
for i=5:13
hist(i) = kt(find(m>0.2*i&m<0.2*(i+1)))
end
je pensais que c'était bon, mais ca ne fonctionne pas !! !! !!! :s j'ai comme message d'erreur:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
Error in ==> C:\MATLAB6p1\work\TestIo.m
On line 26 ==> hist(i) = kt(find(m>0.2*i&m<0.2*(i+1)))
Qu'en pensez vous??? ???
Rhooooo, j'aurais dit une bêtise. Ben oui... Il fallait lireEnvoyé par yélieje viens d'essayer quelque chose d'autre, en fait je pense que c'est sur le temporaire qu'il y a un problème
Temporaire=[Temporaire;Ig(420+i:430+i)'];
et non
Temporaire=[Temporaire;Ig(420+i:430+i)];
ie
Temporaire= [ Vecteur1
Vecteur2
...
Vecteur_n];
Mes plus plates excuses
Bonne soirée
Hihihihihihi excuse acceptées, bien sur!!!! Par contre tu ne veux pas essayer de te pencher sur mon ultime problème???
Oui là c'est clair!Envoyé par yéliemon but final est d'avoir pour 1.2<m<1.4 un histogramme des valeurs de kt puis pour 1.4<m<1.6 un autre histogramme de valeurs de kt qui correspondent etc etc
D'abord rentre les bornes dans un tableau:
borne(1)=1.2;
borne(2)=1.4;
..
borne(nb_borne)=xx;
Ensuite utilise find un peu comme on l'a vu au tout début pour trouver les indexs
for i=1:nb_borne-1
for j=1:n
lesindices(i,j).sontici=find(m atrice_m(j, : )>borne(i) & matrice_m(j, : )<borne(i+1));
nbindice=size(find(matrice_m(: ,j)>borne(i)&matrice_m(:,j)<bo rne(i+1)),2);
tempo1=lesindices(i,j).sontici ;
for k=1:nbindice
tempo2(k)=kt(j,tempo1(k)));
end
lesvaleurs(i,j).sontla=tempo; clear tempo1 tempo2;
end
end
"lesindices(i,j).sontici" et "lesvaleurs(i,j).sontla" sont un peu particulier: ce sont des "structure". Ca permet d'associer des vecteurs de différentes tailles aux mêmes indices i et j, qui correspondent respectivement aux conditions et au n.
coucou Gamma Merci our ton aide !!!!! ben en fait pour tout te dire je ne comprends pas tout ce que tu fais donc bon, j'ai recopié le programme comme tu me l as donné ou presque :
for i=1:15
for j=1:n
lesindices( i ,j ).sontici=find(matrice_m( j, : )>borne(i)&matrice_m( j , <borne( i+1 ));
nbindice=size(find(matrice_m( :, j )>borne(i)&matrice_m( : , j )<borne( i+1 )),2);
tempo1=lesindices(i ,j ).sontici;
fork=1:nbindice
tempo2( k )=kt(j,tempo1( k ));
end
lesvaleurs( i, j ).sontla=tempo;clear tempo1 tempo2;
end
je l'ai mis à la fin de mon programme en mettant en haut la déclaration des bornes bien sur, mais ca ne fonctionne pas . . ........ voici le message d'erreur:
??? Undefined variable.
Error in ==> C:\aure\TestIoGamma.m
On line 42 ==> lesindices(i,j ).sontici=find(matrice_m( j, >borne( i )&matrice_m( j, <borne(i+1 ));
Si tu as une idée .. .. Moi je dois dire que n'ayant pas tout compris, je ne suis pas vraiment capable de comprendre d'ou vient l'erreur !!!
Ps excuse pour les espaces mais j y étais obligée sinon je n'aurais eu que des smileys dans le message !!!!
??? Undefined variable
=> une des variable n'existe pas
tape "whos"
ça te donne la liste des variables, tu peux alors regarder laquelle manque... j'imagine qu'il s'agit de matrice_m => à remplacer par m
regarde le motif des modifications (en bas en italique) dans mon dernier messageEnvoyé par YéliePs excuse pour les espaces mais j y étais obligée sinon je n'aurais eu que des smileys dans le message !!!!
coucou hihi merci encore !!!! bon mais il y a toujours un problème ... ... ....
alors j'ai corrigé certains passages du programme pour m au lieu de matrice_m, ainsi que tempo1(kt) au lieu de tempo1(k) ca donne:
for i=1:15
for j=1:n
lesindices(i,j).sontici=find(m (j, : )>borne( i )&m( j, : )<borne(i+1));
nbindice=size(find(m( : ,j)>borne(i)&m( : ,j)<borne(i+1)),2);
tempo1=lesindices(i,j ).sontici;
for k=1:nbindice
tempo2(kt)=kt( j ,tempo1(kt));
end
end
lesvaleurs(i,j).sontla=tempo;c lear tempo1 tempo2;
end
mais ca me marque:
??? Index exceeds matrix dimensions.
Error in ==> C:\aure\TestIoGamma.m
On line 42 ==> lesindices(i,j).sontici=find(m (j,>borne(i)&m(j,<borne(i+1));
Si tu as une idée??
Coucou au fait ,j'ai aussi essayé une autre méthode qui ne marche pas elle non plus, si quelqu'un sait pourquoi, n'hésitez pas!!! le programme est le suivant :
for tsv=420:720
w=((0.25*(tsv-720))*pi)/180;
h=sin(d)*sin(lat)+cos(d)*cos(l at)*cos(w);
Io(tsv-419)=1367*(1+0.033*cos((((360* n)/365)*pi)/180))*h;
kt(n-22,tsv-419)=Temporaire(tsv-419)/Io(tsv-419);
m(n-22,tsv-419)=1/h;
ktm=kt(n-22,tsv-419);
mm=m(n-22,tsv-419);
if mm<=1&mm>=1.2
kt1(i1)=ktm;
i1=i1+1;
end
if mm<=1.2&mm>=1.4
kt2(i2)=ktm;
i2=i2+1;
end
J'ail l'impression que matlab ne tient meme pas compte des boucles if , je ne sais pas pourquoi . ......
Est-ce que tu aurais pas oublier de faire le borne par hasard? Sinon tape "i" puis "j" pour connaitre leur valeur, ça devrait nous éclairer
Très mauvaise idée de remplacer k (une valeur) par kt (une matrice), revient à la forme initiale: tempo2(k)=kt( j ,tempo1(k));
Il y a une boulette plus loin:
lesvaleurs(i,j).sontla=tempo2;
Coucou
ben en fait au niveau des bornes je pense qu'il n' y a pas de problèmes, c'est bien tapé. J'ai bien apporté la correction au niveau de tempo( k ) et aussi sur la derniere ligne, mais j'ai toujours le meme message d'erreur ... j'ai tapé comme tu m'as dis, i et j, matlab me donne i=1 et j=15
Par contre la!!! je ne sais pas du tout pourquoi est ce qu'il n y aurait pas un problème au niveau du j? enfin de la boucle sur le jfor j=1:n, le n est ce celui que j'ai défini auparavant? si c'est ca c'est censé commencer à n=23, je comprends pas .. ... ....
Hello !
Voici qqch de testé, commenté et qui marche visiblement.
Si tu souhaites aussi classer tes valeurs en fonction des lignes de Kt et m, il faut rajouter une boucle.
Pour le moment, c'est très générique. Tu enlèves les rand de départ et tu modifies simplement bornes.
Le code ne DOIT pas être relancé deux fois de suite sans avoir effacé m_sortie et kt_sortie au préalable.
Bonne fin de journée
kt=rand(14,301);
m=rand(14,301);
% Entrees :
% 1/ kt, et m ---> matrices de meme taille
% 2/ Bornes --> a adapter en fonction des valeurs a classer
% Sorties :
% 1/ kt_sortie, m_sortie
% ce sont des matrices de taille max(Valeurs_extraites)*NB_INTE RVALLES
% 2/ Valeurs_extraites
% etant donne que les sorties precedentes sont allouees dynamiquement, on
% enregistre aussi le nombre de valeurs extraites pour chaque intervalle.
% Ainsi, pour le i-eme intervalle, kt_sortie(1:Valeurs_extraites( i),i)
% permet d'obtenir les valeurs desirees
Valeurs_extraites=[];
% A modifier comme tu le souhaites
Bornes=[0 .1 .2 .3 1.0];
% On boucle sur le nombre d'intervalles
for intervalle=1length(Bornes)-1),
% On recupere les bornes de l'intervalle en cours
Borne_min=Bornes(intervalle);
Borne_max=Bornes(intervalle+1) ;
% On recupere les indices cherches sur TOUTE la matrice m
[I J]=find( Borne_min <= m & m < Borne_max );
% On a le nombre de valeurs trouvees
NB_VALEURS=length(I);
% Que l'on enregistre pour tracer les graphes facilement
Valeurs_extraites=[Valeurs_extraites NB_VALEURS];
% On boucle sur le nombre de valeurs trouvees
for i=1:NB_VALEURS,
% on en deduit les veecteurs de sortie
kt_sortie(i,intervalle)=kt(I(i ),J(i));
m_sortie(i,intervalle)=m(I(i), J(i));
end
end
Bingo: remplace le n par 14 (le nombre maximale de ligne dans la matrice m) et ça devrait rouler
Quand tu écris :
for j=1:n
faitdonccequejeveuxavec(j)
end
c'est équivalent à écrire:
j=1; faitdonccequejeveuxavec(1);
j=2; faitdonccequejeveuxavec(2);
....
j=n; faitdonccequejeveuxavec(n);
EDIT croisement avec Topov. Joli et avec les explications en plus!
Coucou tout le monde!!! !!!! Merci a tous pour votre aide, grâce à vous je suis enfin arrivée à tracer mes histogrammes, comme il faut et tout et tout sans vous je n'y serais pas arrivée!!!! J'ai une dernière question, après j'arrête de vous embêter c'est promis , est ce que quelqu'un sait comment obtenir ue distribution densité de probabilités à partir d'un histogramme??? je n'ai pas l'aide de matlab sur ma version de démo, donc je ne peux meme pas essayer de chercher de ce coté la ... .....???
je suppose qu'il te suffit de normaliser ton histogramme par la somme des valeurs de m et que ça te donne la pdf, non?
Bonjour tout le monde.
je n'arrive pas à importer un fichier excel sous matlab, il me dit qu'il y a un pb avec la fonction sprintf.
essaie du cote de : xlsreadEnvoyé par waonimporter un fichier excel sous matlab
essaie du cote de histfit pour une loi normale, par exempleEnvoyé par yéliedistribution densité de probabilités à partir d'un histogramme
Essaie plutot de contruire ta courbe de densite de probabilite et a cote ton histogramme, mais je pense que tu va perdre de l'information si tu esaie de contruire une courbe en te basant sur ton histogramme