IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Recupérer des valeurs calculées dans une boucle


Sujet :

MATLAB

  1. #21
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Euh... Les 2 lignes que je t'ai données c'était pour les inclure dans ton code de ton post 5 (http://www.developpez.net/forums/m4506635-5/).

    H était censé être ton indice pour t maintenant si tu l'as changé il faut que tu le changes pour U aussi...

    Du coup d'ailleurs tu aurais du avoir ce message d'erreur là et non pas celui que tu as donné avant.

    Donc :
    Postes ton code en entier (qu'on puisse le tester)
    Donne le message d'erreur exact avec la ligne de code qui génère le message d'erreur
    :arrow: Règles du Forum

    Adepte de la maïeutique

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Bonjour à tous;
    je suis désolé pour le retard j'ai mis un peux du temps pour extraire la partie du code qui pose le problème:
    le fichier Matlab.m contient la boucle du calcul de 't' et moi je rappel ma demande : je veux stocker à chaque fois où je stock un t dans t(H) le (U,lo et la corespondants).

    regarder dans les deux derniere lignes de la boucle c'est là où il se trouve le calcul de U et t
    pour les 'lo' et 'la' à stocker aussi sont tout au début de la boucle .

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    function Matlab
     
    lo=4;la=4;XX=2;YY=2;xx=8;yy=8; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    A = randn(64,64);
     
    B = rand(64,1);
    b=B;
    nz=xx*yy;
     
    C=1:nz;
    C1=reshape(C,yy,xx);
    C2=C1(end:-1:1,:);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%DEBUT DE LA BOUCLE %%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %U=[] ;     
    t=[];
    H=1;
     
     
    for i=1:xx-1
        for j=2:yy-1
            if  (mod(xx,i)==0 )&(mod(yy,j)==0),
     
                XX=xx/i;
                YY=yy/j;
                nZmini= XX*YY;
     
                 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                lo =xx/XX;% à stocker à chaque itération mais comment?
                la =yy/YY;% à stocker à chaque itération mais comment?
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
     
     
                res=[];
                k=1;
     
                for  i=1:lo;
                    for j=0:(la-1);
     
                        res(k)=C2(end-j ,i);
                        k=k+1;
                    end
                end
     
     
                pal=YY*((lo*la)-1);
                pac=yy*lo;
                for saut=1:pac:XX*pac;
                    for lig=0:la:la*(YY-1);
     
                        for j=1:(lo*la)-1;
                            m(saut+lig , j+round(lig/la)*((lo*la)-1)+...
                                round(saut /pac)*((lo*la)-1)*YY )= 1;
     
                            m(saut+lig+(res(1+j)-1),j+round(lig/la)*((lo*la)-1)+...
                                round(saut /pac)*((lo*la)-1)*YY )= -1;
     
     
                        end
                    end
                end
     
     
                ncmax=((lo*la)-1)*XX*YY;
                mt = transpose(m);
     
                mvid = zeros(ncmax,ncmax);
     
     
                M_optim = [A,m ; mt,mvid];
     
                bo = zeros(ncmax,1) ;
                B_optim = [B ; bo];
     
     
                Alf = M_optim\B_optim ;
                Al=Alf(1:nz);
     
     
     
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %LA PARTIE DE CHANGEMENT
     
                U=(A*Al);
                Erreur = b - U;
                % CHANGEMENT PROPOSEE PAR caro-line
                % U(H)=(A*Al)
     
                %Er = b - U(H);
     
                t(H)=max(abs(Er))
                H=H+1;
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            end
        end
    end
    je suis désolé j'ai pas réussi à le mettre en PJ.

    j'attend votre réponse avec impatience
    Merci d'avance

  3. #23
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Jai l'impression que tu ne lis pas bien ce qu'on te dis...
    Ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                % CHANGEMENT PROPOSEE PAR caro-line
                % U(H)=(A*Al)
    Mon code :Voir : Les tableaux de cellules

    Évidemment que tu ne peux pas mettre une matrice dans un scalaire.

    On tourne en rond depuis le début parce que tu ne copies pas bien le code que tu testes et le message d'erreur qui va avec.

    Donc maintenant quand tu postes un code ici tu fais un copier/coller exact de ton code que tu as essayé et un copier/coler exact et complet du message d'erreur associé.

    De plus je t'ai dis aussi :
    tu utilises les compteurs i et j dans 2 boucles imbriquées : MATLAB ne va pas aimer.
    Et même j dans une 3ème boucle.
    D'ailleurs dans l'éditeur MATLAB doit souligner les problèmes, quand tu passes la souris dessus il t'explique de quel problème il s'agit.

    Si tu ne tiens aucun compte de ce qu'on te dis et si tu n'essayes pas de comprendre (car la solution t'a été donnée dès les 1ers posts) cela va être vraiment difficile de t'aider.
    :arrow: Règles du Forum

    Adepte de la maïeutique

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Ahh oui je suis vraiment désolé j'ai été aveugle de ne pas remarquer la différence entre{} et[].

    mais d'accord maintenat il y a bien un changement mais je comprend toujours pas ??
    moi j'ai pensé qu'il vas m'afficher une sorte de matrice avec tous mes vecteurs U ,
    mais lui il m'affiche ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    U = 
     
      Columns 1 through 5
     
        [64x1 double]    [64x1 double]    [64x1 double]    [64x1 double]    [64x1 double]
     
      Column 6
     
        [64x1 double]
     
     
    t =
     
      125.6893   18.1934   14.4036    3.2405    3.6920   10.3027

    apres comment je peux voir mon vecteur par exemple U{3} qui corespond à t(3)??(j'en ai besoin pour le tracer avec plot(U{3},b)
    et pour 'lo' et 'la' je fait la meme chose avec {} ou ???)??(j'en ai besoin aussi pour le tracer avec plot(t(H),et le vecteur(lo))

  5. #25
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Par défaut
    Bonjour,

    pour avoir les valeur de U correspondant a t(3) :

    Pour avoir la 6eme valeur de U correspondant a t(3) :

  6. #26
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Il faut que toi tu refléchisses à la meilleure façon de stocker tes objets selon ce qu'il sont.

    Pour t c'était facile tu rajoutais un scalaire à la fois pour créer un vecteur :
    Maintenant qu'on a une vraie information sur U (c'est à chaque fois un tableau de taille 64*1) on sait comment le concaténer dans un tableau de double plutôt que dans un tableau de cellules qui est la solution de facilité.

    Solution que j'avais donnée dès mon 1er message (et oui...)
    Rappel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %pré-allocations :
    t = zeros(1,n*n);
    u=zeros(n,n*n);%a voir pour le sens lignes/colonnes peut-être mettre zeros(n*n,n) et changer aussi en-dessous dans ce cas
    for i = 1:n
        for j = 1:n
            idx = (i-1)*n+j;
            u(:,idx) = c(i,j) * m(j+1) ;
            t(idx) = Max (abs(b-u(:,idx)));
            end 
    end
    Évidemment c'est à adapter vu que là c'était sur le 1er petit exemple que tu nous avais montré.

    Je crois que maintenant ce serait bien que tu fasses l'effort de comprendre tout ça par toi-même plutôt que l'on te donne un code tout fait que tu n'as manifestement pas l'air de comprendre.
    Ce qui fait que cela ne sert à rien puisque tu n'es pas capable de reproduire le schéma qui t'a été expliqué.

    Un peu de lecture peut-être : Gestion des matrices
    :arrow: Règles du Forum

    Adepte de la maïeutique

  7. #27
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Par défaut
    Comme dit Caro, tu fait de grosses erreurs dans ton code (nottamment la réutilisation des indices i et j dans tes boucles imbriquées...).

    J'ai regardé brievement ton code, et j'ai essayé de le corriger (oui je sais cela ne te fera pas comprendre et apprendre de tes erreurs, mais bon j'ai eu pitié avec tout ces posts sur cette discussions ... ).

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
     
    lo=4;la=4;XX=2;YY=2;xx=8;yy=8; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    A = randn(64,64);
     
    B = rand(64,1);
    b=B;
    nz=xx*yy;
     
    C=1:nz;
    C1=reshape(C,yy,xx);
    C2=C1(end:-1:1,:);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%DEBUT DE LA BOUCLE %%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %U=[] ;     
    t=[];
    H=1;
     
     
    for i=1:xx-1
        for j=2:yy-1
            if  (mod(xx,i)==0 )&(mod(yy,j)==0),
     
                XX=xx/i;
                YY=yy/j;
                nZmini= XX*YY;
     
                 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                lo(i,j-1) =xx/XX;% à stocker à chaque itération mais comment?
                la(i,j-1) =yy/YY;% à stocker à chaque itération mais comment?
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
     
     
                res=[];
                k=1;
     
                for  ind1=1:lo(i,j-1);
                    for ind2=0:(la(i,j-1)-1);
     
                        res(k)=C2(end-ind2,ind1);
                        k=k+1;
                    end
                end
     
     
                pal=YY*((lo(i,j-1)*la(i,j-1))-1);
                pac=yy*lo(i,j-1);
                for saut=1:pac:XX*pac;
                    for lig=0:la(i,j-1):la(i,j-1)*(YY-1);
     
                        for ind3=1:(lo(i,j-1)*la(i,j-1))-1;
                            m(saut+lig , ind3+round(lig/la(i,j-1))*((lo(i,j-1)*la(i,j-1))-1)+...
                                round(saut /pac)*((lo(i,j-1)*la(i,j-1))-1)*YY )= 1;
     
                            m(saut+lig+(res(1+ind3)-1),ind3+round(lig/la(i,j-1))*((lo(i,j-1)*la(i,j-1))-1)+...
                                round(saut /pac)*((lo(i,j-1)*la(i,j-1))-1)*YY )= -1;
     
     
                        end
                    end
                end
     
     
                ncmax=((lo(i,j-1)*la(i,j-1))-1)*XX*YY;
                mt = transpose(m);
     
                mvid = zeros(ncmax,ncmax);
     
     
                M_optim = [A,m ; mt,mvid];
     
                bo = zeros(ncmax,1) ;
                B_optim = [B ; bo];
     
     
                Alf = M_optim\B_optim ;
                Al=Alf(1:nz);
     
     
     
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %LA PARTIE DE CHANGEMENT
     
                %U=(A*Al);
                %Erreur = b - U;
                % CHANGEMENT PROPOSEE PAR caro-line
                 U{H}=(A*Al)
     
                Er = b - U{H};
     
                t(H)=max(abs(Er))
                H=H+1;
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            end
        end
    end
    lo et la sont désormais des matrices. Chaque ligne correspond au termes calculé avec la boucle i, chaque colonne correspond aux termes calculé avec la boucle j.

    Je ne suis pas sur a 100% de la fiabilité de ce code étant donné que je n'ai pas cherché a le comprendre mais simplement a corrigé les erreurs grossieres ...
    Essaies de comprendre ton code c'est primordial !! Hesites pas a lire les tutorials et liens du forum, ils sont tous tres bien faits !!

  8. #28
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    ok ok Merci beaucoup
    Mais là maintenat j'ai deux problème:
    1-j'ai fais la meme chose pour mes 'lo' 'la' çàd j'ai essayé des les stocher dans des vecteurs à chaque fois que je stock "U" et "t".
    en faisant:
    avant le début de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lo=[];
    la=[];
    q=1;
    w=1;
    et juste apres le calcule de' 'lo' et 'la' ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lo(q) =xx/XX;
                la(w) =yy/YY;
                q=q+1;
                w=w+1;
    il m'affiche ça comme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> mtimes
    Inner matrix dimensions must agree.
     
    Error in ==> Matlab at 59
                pal=YY*((lo*la)-1);
    2- mon 2ème prblème comme Caro-line ma conseillé de ne pas utiliser les meme indice 'i' et 'j' dans plusieur fois dans des boucle différente ,alors j'ai changer pou chaque boucle j'ai mis des indice différente mais ---> hop la surprise les resultat sont pas les meme???
    et à chaque fois je change d'autre lettre de l'alphabets---> hop ça donne des resultat tout à fait différents je comprends plus rien:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    ans =
     
        7.0208    4.7105   15.4322  146.5970   12.8261    5.3320
     
    EDU>> Matlab
     
    ans =
     
      1.0e+004 *
     
        2.5473    0.0017    0.0035    0.0013    0.0006    0.0007
     
    EDU>> Matlab
     
    ans =
     
        2.4405    8.5877    7.1467   15.8400   33.5695    9.3525
     
    EDU>> Matlab
     
    ans =
     
       14.0750   82.7155   19.5834   27.3225   18.0649    4.1019
     
    EDU>> Matlab
     
    ans =
     
        6.7454  271.3546   15.2197    8.0975   75.7685   14.0400

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Merci Chris05:
    Essaye toi meme d'executer le code que tu ma envyé tu vas voir que à chaque fois t'execute t'obtiens des resultats différents??????????????????????????????????????????????

    Mais d'ou il vient encore ce...de problème

  10. #30
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    1. Donne un autre nom à ton fichier que Matlab, ce n'est pas très judicieux voire dangereux.

    2. On obtient des résultats différents à chaque fois parce que au début du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A = randn(64,64);
     
    B = rand(64,1);
    Si tu regardes l'aide de RANDN et RAND tu comprendras.
    Ce n'est pas toi qui a codé cette partie du code ?

    3. Une fois que tu as remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lo= %quelquechose
    %par
    lo(k) = %quelquechose
    Il semble évident que tu dois remplacer tous les endroits où tu avais lo par lo(k).
    Puisque si lo était auparavant un scalaire c'est maintenant un vecteur.

    4. S'il te plait lis l'aide et les tutoriels et la faq, fais une pause et reprends calmement toutes les lignes de ton code une par une en essayant de commenter chaque ligne pour mieux les comprendre.
    :arrow: Règles du Forum

    Adepte de la maïeutique

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Mais oui c'est normale je suis bete c'est rand qui foute la merde dans le code ;
    Merci beucoup à tous surtout à Caro-line qui été trés patient avec mes "bêtises".
    supportez moi encore pour cette question Chris05 ma proposé une solution pour stocker mes 'lo' et 'la' à chaque itération;
    - déjas je ne sais pas comment les appeler par exemple lo et la qui corespond à t(4)?
    - et quand j'ai enlevé les " ; " 'lo' et 'la' sont des matrice 4x4;??
    j'ai 6 valeurs de 't' et 6 vecteurs de 'U'
    j'attend à voir 6 valeurs aussi pour lo et la mais voici ce qu'il me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    lo =
     
         1     0     1
         2     0     2
         0     0     0
         4     0     4
     
     
    la =
     
         2     0     4
         2     0     4
         0     0     0
         2     0     4

  12. #32
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Encore ?

    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
     
    lo = 
     
        [4]     []     []
        [1]     []    [1]
        [2]     []    [2]
         []     []     []
        [4]     []    [4]
     
     
    la = 
     
        [4]     []     []
        [2]     []    [4]
        [2]     []    [4]
         []     []     []
        [2]     []    [4]
    ça repond pas à ma question

  13. #33
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Non...C'est encore la différence entre scalaire et vecteur...
    Je ne sais pas pourquoi Chris05 a cru que tu voulais lo et la en matrices.
    En fait à la base chaque lo et la sont des scalaires => Tu vas donc les stocker dans un vecteur exactement comme t.
    :arrow: Règles du Forum

    Adepte de la maïeutique

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Oui c'est exactement ça que je veux Caro-line, je dois les stocker dans un vecteur ou deux un pour lo et un pour la .
    Mais comment j'ai fait comme je t'ai montré avant et changé par tous leur valeurs càd lo(q) et la(w) mais ça marche pas???

  15. #35
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Tu utilises partout H comme indice, pourquoi là tu veux changer ?
    (enfin ça peut marcher aussi avec q et w mais ça ne sert à rien d'avoir des variables supplémentaires).

    Je pense que tu as une erreur parce que tu incrémentes q et w juste après donc forcément pour q=1 tu fais lo(1) = quelquechose et comme ensuite tu fais q=q+1 = 2 et tu essayes d'utiliser lo(2) alors qu'il n'existe pas encore.
    :arrow: Règles du Forum

    Adepte de la maïeutique

  16. #36
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    voila mon code ave lo(q) et la (w)
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    function t=Matlab
     
    XX=2;YY=2;xx=8;yy=8; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    A = ones(64,64);
     
    B = ones(64,1);
    b=B;
    nz=xx*yy;
     
    C=1:nz;
    C1=reshape(C,yy,xx);
    C2=C1(end:-1:1,:);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%DEBUT DE LA BOUCLE %%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %U={} ;     
    t=[];
    H=1;
    lo=[];
    la=[];
    w=1;
    q=1;
    for I=1:xx-1
        for J=2:yy-1
            if  (mod(xx,I)==0 )&(mod(yy,J)==0),
     
                XX=xx/I;
                YY=yy/J;
     
     
                nZmini= XX*YY;
                lo(q) =xx/XX
                la(w) =yy/YY
              q=q+1;
              w=w+1;
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
                res=[];
                k=1;
     
                for  i=1:lo(q);
                    for j=0:(la(w)-1);
     
                        res(k)=C2(end-j ,i);
                        k=k+1;
                    end
                end
     
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
     
                pal=YY*((lo(q)*la(w))-1);
                pac=yy*lo(q);
                for saut=1:pac:XX*pac;
                    for lig=0:la(w):la(w)*(YY-1);
     
                        for V=1:(lo(q)*la(w))-1;
                            m(saut+lig , V+round(lig/la(w))*((lo(q)*la(w))-1)+...
                                round(saut /pac)*((lo(q)*la(w))-1)*YY )= 1;
     
                            m(saut+lig+(res(1+V)-1),V+round(lig/la(w))*((lo(q)*la(w))-1)+...
                                round(saut /pac)*((lo(q)*la(w))-1)*YY )= -1;
     
     
                        end
                    end
                end
     
                %nzm :nbre de collone de la matrice m
                ncmax=((lo(q)*la(w))-1)*XX*YY;
                mt = transpose(m);
     
                mvid = zeros(ncmax,ncmax);
     
     
                M_optim = [A,m ; mt,mvid];
     
                bo = zeros(ncmax,1) ;
                B_optim = [B ; bo];
     
     
                Alf = M_optim\B_optim ;
                Al=Alf(1:nz);
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %LA PARTIE DE CHANGEMENT
                 U{H}=(A*Al);
     
                Erreur = b - U{H};
     
     
     
                t(H)=max(abs(Erreur));
                H=H+1;
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            end
        end
    end
    le message d'erreur est :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    lo =
     
         1
     
     
    la =
     
         2
     
    ??? Attempted to access lo(2); index out of bounds because numel(lo)=1.
     
    Error in ==> Matlab at 46
                for  i=1:lo(q);

  17. #37
    Membre éclairé
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Par défaut
    C'est normal : comme a dit Caro-Line, tu affectes la valeur q = q+1 (càd q = 1 + 1 = 2), puis tu vas chercher la valeur de lo(q). Mais comme tu n'as pas encore défini lo(2), ça n'existe pas... d'où le message d'erreur. Alors soit tu mets tes lignes et au BON ENDROIT , càd après le "end" correspondant à ta boucle "if", soit tu remplaces q et w par H partout.

    Cordialement.

  18. #38
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Merci Merci Merci 1000 fois à tous

  19. #39
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Par défaut
    Désolé pour mon post précédent, j'avais mal compris ton problème.

    En ce qui concerne ton erreur, relies ce que Caro t'a dis juste avant, c'est éxactement la cause de ton probleme !
    Il faut que tu incrémentes tes indices q et w a la fin de ta boucle.

    Sinon, pourquoi avoir remplacer tes rand par des ones?? cela crée du coup des matrices singulieres(NaN) et le calcul de l'erreur est ainsi impossible ...

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    clear
    clc
     
    XX=2;YY=2;xx=8;yy=8; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    A = rand(64,64);
     
    B = rand(64,1);
    b=B;
    nz=xx*yy;
     
    C=1:nz;
    C1=reshape(C,yy,xx);
    C2=C1(end:-1:1,:);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%DEBUT DE LA BOUCLE %%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %U={} ;     
    t=[];
    H=1;
    lo=[];
    la=[];
    w=1;
    q=1;
    for R=1:xx-1
        for T=2:yy-1
            if  (mod(xx,R)==0 )&&(mod(yy,T)==0),
     
                XX=xx/R;
                YY=yy/T;
     
     
                nZmini= XX*YY;
                lo(q) =xx/XX
                la(w) =yy/YY
     
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
                res=[];
                k=1;
     
                for  i=1:lo(q);
                    for j=0:(la(w)-1);
     
                        res(k)=C2(end-j ,i);
                        k=k+1;
                    end
                end
     
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
     
                pal=YY*((lo(q)*la(w))-1);
                pac=yy*lo(q);
                for saut=1:pac:XX*pac;
                    for lig=0:la(w):la(w)*(YY-1);
     
                        for V=1:(lo(q)*la(w))-1;
                            m(saut+lig , V+round(lig/la(w))*((lo(q)*la(w))-1)+...
                                round(saut /pac)*((lo(q)*la(w))-1)*YY )= 1;
     
                            m(saut+lig+(res(1+V)-1),V+round(lig/la(w))*((lo(q)*la(w))-1)+...
                                round(saut /pac)*((lo(q)*la(w))-1)*YY )= -1;
     
     
                        end
                    end
                end
     
                %nzm :nbre de collone de la matrice m
                ncmax=((lo(q)*la(w))-1)*XX*YY;
                mt = transpose(m);
     
                mvid = zeros(ncmax,ncmax);
     
     
                M_optim = [A,m ; mt,mvid];
     
                bo = zeros(ncmax,1) ;
                B_optim = [B ; bo];
     
     
                Alf = M_optim\B_optim ;
                Al=Alf(1:nz);
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %LA PARTIE DE CHANGEMENT
                 U{H}=(A*Al);
     
                Erreur = b - U{H};
     
     
     
                t(H)=max(abs(Erreur));
                H=H+1;
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                q=q+1;
                w=w+1;
            end
        end
    end

  20. #40
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Et c'est quoi surtout l'intérêt de multiplier les variables alors qu'à tout instant H=w=q ?
    :arrow: Règles du Forum

    Adepte de la maïeutique

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/08/2013, 18h36
  2. insérer des valeurs à partir d'une boucle automatique
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/12/2007, 16h52
  3. Affichage des valeurs disponibles dans une zone de liste déroulante
    Par azerty dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2007, 12h29
  4. Réponses: 5
    Dernier message: 30/05/2007, 18h08
  5. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo