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 :

Remplir une matrice


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Remplir une matrice
    bonjour je suis débutant avec matlab et je voudrais remplire une matrice suivant un certain algorithme et voici le script que j'ai utilisé mais j'ai une erreur
    l'erreur est :
    if i=j
    |
    Error: The expression to the left of the equals sign is not a valid target for an assignment.
    et le script est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    i=1
    j=1
    for i=1:10
       for j=1:10 
         if i=j 
            a[i;j]=(i*(4*i+5))
         else
             a[i;j]=(min(i,j))
         end
      end
    end
    comment faire pour y remedier ?
    merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    c'est bon j'ai pu avoir ma matrice qui est
    9 3 3 3 3 3 3 3 3 3
    3 26 6 6 6 6 6 6 6 6
    3 6 51 9 9 9 9 9 9 9
    3 6 9 84 12 12 12 12 12 12
    3 6 9 12 125 15 15 15 15 15
    3 6 9 12 15 174 18 18 18 18
    3 6 9 12 15 18 231 21 21 21
    3 6 9 12 15 18 21 296 24 24
    3 6 9 12 15 18 21 24 369 27
    3 6 9 12 15 18 21 24 27 450
    mais avant de l'avoir j'ai plusieurs autre qui s'affiche avant ,celle ci s'affiche en dernier
    le script que j'ai utilisé est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i=1:10
       for j =1:10
           if i==j
             a(i,j)=(i*(4*i+5))
         else
             a(i,j)= 3* min(i,j)
         end
      end
    end
    je crois que c'est a cause des boucles ,!!
    comment remedier au problème merci d'avance

  3. #3
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    En fait c'est tout simple, sous MATLAB si tu ne veux pas qu'un résultat s'affiche il suffit de rajouter un point-virgule ; à la fin de la ligne.
    Exemple :Sinon une idée pour améliorer ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a=zeros(10);%pré-allocation
    for i=1:10
      for j =1:10
         a(i,j)= 3* min(i,j)
      end
    end
    for i=1:10
       a(i,i)=i*(4*i+5);
    end
    Pour la 1ère ligne que j'ai rajouté, voir la Qu'est-ce que la préallocation de mémoire ?
    Et je pense que vue la tête de ta matrice il doit même y avoir plus rapide en utilisant les matrices prédéfinies de MATLAB (genre EYE) mais faut aller fouiller un peu dans l'aide.
    Règles du Forum

    Adepte de la maïeutique

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    bonjour à tous
    aprés avoir rempli la matrice précedentes (qui est une matrice SDP)je dois écrire une fonction qui en calcule la réduite de gauss,
    est ce que qulqu'un pourais m'aider à le faire
    merci d'avance

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    voila le programme pour gauss en language c


    a : un tableau carré (la matrice du système) ;
    b : un tableau unidimensionnel (le second membre du système) ;
    n : l'ordre de la matrice.
    Elle renvoie la valeur 1 si la matrice est numériquement inversible et la valeur 0 sinon ; quand la valeur renvoyée est 1, la solution du système se trouve dans le tableau b. A chaque étape, elle affiche la matrice A(k) et le second membre b(k).

    La constante entière NMAX est égale à la dimension maximale de la matrice (+1) ; la constante entière N2MAX est égale à NMAX+1.

    Code C : 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
    int sl_gauss_aff(double a[NMAX][NMAX],double b[NMAX],int n)
    {
     int i,j,k,l,err;
     double pivot,coef,s;
     double t[NMAX][N2MAX];
     for(i=1;i<=n;i++)
     {
      for(j=1;j<=n;j++)
      t[i][j]=a[i][j];
      t[i][n+1]=b[i];
     }
     err=1;
     k=1;
     while (err==1 && k<n)
     {
      pivot=fabs(t[k][k]);
      l=k;
      while(pivot==0 && l<n)
      {
       l++;
       pivot=fabs(t[l][k]);
      }
      if(pivot!=0)
      {
       if(l!=k)
       for(j=k;j<=n+1;j++)
       {
        pivot=t[k][j];
        t[k][j]=t[l][j];
        t[l][j]=pivot;
       }
       pivot=t[k][k];
       for(i=k+1;i<=n;i++)
       {
        coef=t[i][k]/pivot;
        for(j=1;j<=n+1;j++)
        t[i][j] -= coef*t[k][j];
       }
       printf("                          A(%d)                                 b(%d)\n",k+1,k+1);
       for(i=1;i<=n;i++)
       {
        for(j=1;j<=n;j++)
        printf("%12.5e  ",t[i][j]);
        printf("I  %12.5e  \n",t[i][n+1]);
       }
      }
      else err=0;
      k++;
     }
     if(t[n][n]==0) err=0;
     if(err==1)
     {
      b[n]=t[n][n+1]/t[n][n];
      for(i=n-1;i>=1;i--)
      {
       s=t[i][n+1];
       for(j=i+1;j<=n;j++)
       s-=t[i][j]*b[j];
       b[i]=s/t[i][i];
      }
     }
     return(err);
    }

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    j'ai réussi a écrire Gauss sous matlab aprés j'ai ecris la fonction qui transforme la matrice sous forme LU
    maintenant on me demande de déduire la factoraisation de Cholseky associé!! comment peut-on déduire la factorisation de Cholesky de ce qui précède ?

    merci de votre aide

Discussions similaires

  1. Comment remplir une matrice aléatoirement ?
    Par Hamza dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2007, 19h59
  2. remplir une matrice 3D d'images
    Par twix24 dans le forum Images
    Réponses: 1
    Dernier message: 05/12/2007, 20h27
  3. Réponses: 2
    Dernier message: 26/06/2007, 15h40
  4. Remplir une matrice et afficher son contenu
    Par annoussa dans le forum Pascal
    Réponses: 2
    Dernier message: 08/11/2006, 11h48
  5. Remplir une matrice de variance/covariance
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 31/07/2006, 17h55

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