Programme resolution programmation lineaire

tres heureux de visiter votre site
bien j'aimerai recevoir de vous un programme inforrmatique qui ressort toutes les etapes de la resolution d'un probleme de la programmation lineaire par la methode du simplexe en tenant compte de la phase zero en language pascal.
merci d'avance

22 réponses

Résumé de la discussion

Plusieurs échanges portent sur la programmation linéaire, avec des demandes d’implémentation du simplexe (phase zéro) en Pascal, des méthodes de Gauss ou LU et des solutions graphiques. Des contributions tentent d’offrir du code et des explications, notamment en MATLAB pour Gauss–Seidel et la résolution de systèmes, des reformulations LP et des conseils pratiques. La contribution mêle échanges pédagogiques et critiques, certains orientant vers des ressources externes, d’autres incitant à travailler le code et à éviter les réponses trop générales. Le contenu couvre aussi des exercices et applications (plot, Excel, contraintes et dualité), avec des difficultés de compréhension et des rappels sur l’effort nécessaire quotidien.

Bobot (l’IA à votre service)
  1. j ai besoin de faire un programme de l équation ax=b dans matlab par la méthode de gauss mais avant il faut vérifier la déterminant voi mon programme.
    clear all
    n=input('donner la taille de la matrice');
    A=input('Donner la matrice A : \n');
    b=input('Donner le vecteur b : \n');
    epsilon=input('donner epsilon\n');
    max=input('donner le nombre maximal d iteration\n');
    if det(A)==0
    input('pas de solution')
    else
    input('la détirminant est')
    det=det(A)
    disp('Gauss_Seidel')
    D=input('la diagonale est')
    D=diag(A)
    E=input('la tril est')
    E=-tril(A,-1)
    F=input('la triu est')
    F=-triu(A,1)
    x(:,1)=zeros(n,1);
    err=1;
    k=1;
    x(:,k+1)=(D-E)\F*x(:,k)+(D-E)\b;
    err=norm(x(:,k+1)-x(:,k));
    k=k+1;
    end
    end
    4
    1. salut,
      je t'envoi un programme que j'ai fait, et ça marche: c'est AZIZ Rachid

      #include<stdio.h>
      #define N 50
      #define M 40
      #include<conio.h>
      #include<math.h>
      float tampon[N][M+N],d[N];

      int n,indice[N],m;
      int chercol(void);
      int cherlig(int c );
      void simp(int l, int c);
      void affiche(void);
      void saisie(void);
      void scalaire(void);

      /*****************FONCTION PRINCIPALE*************************/
      int main(void)
      { int l,c;
      saisie();
      for(;;)
      {
      affiche();
      c=chercol();
      if(c==-1)
      break;
      // printf("les tableaux sont:");
      printf("\n%f",tampon[n][c]);
      l=cherlig(c);
      if(l==-1)
      break;
      indice[l]=c;
      simp(l,c);
      scalaire();
      }
      getch();

      }
      //*********************RECHERCHE DE LA COLONNE DU PIVOT**********************
      int chercol(void)
      { int i,memo;
      float min;

      min =tampon[n][0];
      memo=0;
      for(i=1;i<m+n;i++)
      if(min>tampon[n][i])
      {min =tampon[n][i];
      memo=i; }
      if(min>=0)
      return(-1);
      else
      return(memo);
      }
      //*******************RECHERCHE DE LA LIGNE DU PIVOT**************************
      int cherlig(int c)
      { int i,memo;
      float min;

      i=0;
      while(tampon[i][c]<=0)
      {i++;
      if(i==n-1)
      return(-1);}
      min= tampon[i][m+n]/tampon[i][c];
      memo=i;
      for(i=0;i<n;i++)
      if((tampon[i][c]!=0) && ( min > tampon[i][m+n]/tampon[i][c]) &&(tampon[i][c]>0))
      {min = tampon[i][m+n]/tampon[i][c];
      memo=i;}
      return(memo);
      }
      //*******************************SIMPLEXE************************************
      void simp(int l,int c)
      { int i,j;
      float pivot;

      pivot=tampon[l][c];
      for(j=0;j<m+n+1;j++)
      tampon[l][j] = tampon[l][j]/pivot;
      for(i=0;i<n;i++)
      if(i!=l)
      { pivot=tampon[i][c];
      for(j=0;j<m+n+1;j++)
      tampon[i][j]= tampon[i][j] - pivot * tampon[l][j];}
      }
      //*************************LES DELTAS(I,J)***********************************
      void scalaire(void)
      { int i,j;
      float L;

      for(j=0;j<m+n+1;j++)
      { L=0;
      for(i=0;i<n;i++)
      L= L + d[indice[i]]*tampon[i][j];
      if(j == m+n)
      tampon[n][j]=L;
      else
      tampon[n][j]=d[j]-L;}
      }
      //******************************AFFICHAGE**************************************
      void affiche(void)
      { int l,c,i;

      gotoxy(8,5);
      cprintf("LES TABLEAUX :");
      for(l=0;l<n+1;l++)
      { i=1;
      for(c=0;c<m+n+1;c++)
      {gotoxy(3*n*(i++),l+10);
      printf("%.1f",tampon[l][c]);}
      }
      getch();
      }
      //*****************************LA SAISIE*************************************
      void saisie(void)
      { int p,l,c;
      window(1,1,80,25);
      textbackground(1);
      clrscr();
      window(4,5,75,24);
      textbackground(9);
      clrscr();
      textcolor(WHITE);
      gotoxy(4,2);
      cprintf("CE PROGRAMME PEUT RESOUDRE LE PROBLEME");
      gotoxy(4,3);

      cprintf("LINEAIRE DE LA FORME A*X<=b");
      gotoxy(4,4);

      cprintf("PAR LA METHODE Du SIMPLEX");
      gotoxy(4,5);
      gotoxy(4,10);
      cprintf("Le problème à la forme suivante:");
      gotoxy(4,12);
      cprintf("a11*x1+.....+a1m*xm<=b1");
      gotoxy(4,13);
      cprintf(". ..... . <=.");
      gotoxy(4,14);
      cprintf("an1*x1+.....+anm*xm<=bn");
      gotoxy(4,15);
      cprintf("MIN( c1*x1+.......+cn*xm).");
      gotoxy(4,17);
      cprintf(" Pour résoudre le probléme d'affectation des engins aux chantiers à cout minimal " );
      gotoxy(4,18);

      cprintf("les dimensions du problème:");
      gotoxy(4,19);
      cprintf("Donnez le nombre des lignes n= ");
      scanf("%d",&n);
      gotoxy(4,20);
      cprintf("Donnez le nombre des colonnes m= ");
      scanf("%d",&m);
      p=n;
      for(l=0;l<n;l++)
      indice[l]=p++;
      window(1,1,80,25);
      textbackground(1);
      clrscr();
      window(1,1,80,40);
      textbackground(9);
      clrscr();
      textcolor(WHITE);
      gotoxy(10,6);

      cprintf(" Donnez la matrice A");
      for(l=0;l<n;l++)
      for(c=0;c<m;c++)
      { gotoxy(14*c+12,l+9);
      cprintf("A[%d][%d]=",l,c);
      scanf("%f",&tampon[l][c]);}

      cprintf("\n Donnnez le vecteur b\n");
      for(l=0;l<n;l++)
      {
      gotoxy(39,13+l);

      cprintf("b[%d]=",l);
      scanf("%f",&tampon[l][m+n]);}

      cprintf("\n donnez le vecteur c\n");
      for(c=0;c<n;c++)
      {
      gotoxy(49,18+c);
      cprintf("c[%d]=",c);
      scanf("%f",&d[c]);}
      for(c=0;c<m+n;c++)
      { if( c < n )
      tampon[n][c]=d[c];
      else
      {tampon[n][c]=0;
      d[c]=0;}}
      for(c=n;c<m+n;c++)
      for(l=0;l<n;l++)
      if( (l+n) == c )
      tampon[l][c]=1;
      else
      tampon[l][c]=0;
      tampon[n][m+n]=0;
      }
      0
    2. @AZIZ Rachid ENSAM-MeknésSVP; est ce que vous pouvez d'introduire ce programme en MATLAB........SVP;SVP;SVP :)
      0
    3. @AZIZ Rachid ENSAM-Meknésest ce que vous pouvez mettre ce programme sous matlab.........c'est très gentil ;)
      et merci à l'avance!!
      0
    4. écrire 1 programme dynamique ds un langage de ton choix qui lit des nombres compris entre [0...100[ et les convertir en toute lettre.parmi les procédures implémentées ds le programme.on retrouvera char*convertnombrechaine(int n) exemple:convertnombrechaine(34)="trente quatre"
      0
  2. salut les amis bin vooila je cherche un programme de résolution des systémes linéaires avec la méthode de jacobi -- factorisation l u -- gauss seidel merci les amis(es) pour votre aide .....
    0
    1. factorisation LU
      A=[1,1,1;3,9,27;2,4,8]
      [L,U] = lu(A)
      d = det(L)*det(U)
      d = det(A)
      b=[14;120;50]
      [n,n]=size(A)
      A(i,i)
      for j=1:n
      for k=1:j-1
      for i=k+1:n
      A(i,j)=A(i,j)-A(i,k)*A(k,j)
      end
      end
      for i=j+1:n
      A(i,j)/A(j,j);
      end
      end

      _________________________________________________________________________

      méthode d'élémétation de gauss
      A=[1,2,3;4,0,5;7,6,7]
      d = det(A)
      b=[4;120;50]
      [n,n]=size(A)
      for j=1:n
      for k=1:j-1
      for i=k+1:n
      A(i,j)=A(i,j)-A(i,k)*A(k,j)
      end
      end
      for i=j+1:n
      A(i,j)/A(j,j);
      end
      end
      0
      1. slt a tout
        comment faire un algourithme de la composition LU --factoritsatoin--gauss
        merciiiiiiiiiiiiii
        1
        1. calculer et remplir un matrice triangulair superieur sans paser a 0
          0
          1. voila le pgm pascal de la méthode de gausse au cas géneral
            program hmdagauss;
            const l=100;
            type mat= array[1..l,1..l]of real;
            tab=array[1..l]of real;
            var a:mat;b,x:tab;n, i,j,k,p:integer;m,z,max,s:real;
            begin
            writeln('entrez le nombre de ligne et d colonne S.V.P');
            readln(n);
            writeln('la matrice A !');
            for i:=1 to n do
            begin
            for j :=1 to n do
            begin
            write('a[',i,j,']=');
            read(a[i,j]);
            end;
            read
            end;
            writeln(' le vecteure B !');
            for i:=1 to n do
            begin
            write ('B[',i,']=');
            readln(b[i]);
            end;
            for k:=1 to n-1 do
            begin
            if a[k,k]=0 then
            begin
            max:=a[k+1,k];p:=k+1;
            for i:=k+2 to n do
            begin
            if a[i,k]>max then
            p:=i
            end;
            for j :=k to n do
            begin
            z:=a[p,j];
            a[p,j]:=a[k,j];
            a[k,j]:=z;
            end;
            end;
            for i:=k+1 to n do
            begin
            m:=a[i,k]/a[k,k];
            for j :=k+1 to n do
            a[i,j]:=a[i,j]-m*a[k,j];
            b[i]:=b[i]-m*b[k];
            end;
            end;
            x[n]:=b[n]/a[n,n];
            for i:=n-1 downto 1 do
            begin
            s:=b[i];
            for j:=i+1 to n do
            s:=s-a[i,j]*x[j];
            x[i]:=s/a[i,i];
            end;
            writeln('----------------------------');
            writeln('-------la resolution--------');
            writeln('-------------est------------');
            for i :=1 to n do
            begin
            writeln('x',i,'=',x[i]:4:2 );
            end;
            readln;
            end.
            0
            1. la méthode en matlabe stp
              0
          2. mercie mes je voudrez des programme en pascal pour les méthode de simplexe
            0
            1. salut j'ai un probléme mon prof de math nous a demandé de dessiner des courbes avec excel je sais dessiné mais je ne sais pas mettre les courbes sur un meme graphe pouvez vous m'aidé . Merci
              3
              1. slt.jai une probleme dans la programation en matlabe
                comment ecrire un algourithme d'une matrice triangulaire supérieure par la méthode de gauss.merci beucoup
                1
                1. salut;mira voila le program: méthode d'élémétation de gauss avec exemple

                  A=[1,2,3;4,0,5;7,6,7]
                  d = det(A)
                  b=[4;120;50]
                  [n,n]=size(A)
                  for j=1:n
                  for k=1:j-1
                  for i=k+1:n
                  A(i,j)=A(i,j)-A(i,k)*A(k,j)
                  end
                  end
                  for i=j+1:n
                  A(i,j)/A(j,j);
                  end
                  end
                  kaderkaderkaderkaderkaderkaderkaderkaderkader
                  et le programme algorithmique :gorithmes de résolution

                  pour k = 1, n − 1
                  si |Akk| ≤ ε stop pivot trop petit
                  pour i = k + 1, n
                  p = Aik/Akk
                  pour j = k + 1, n
                  Aij = Aij − pAkj
                  Aik = 0
                  Bi = Bi − pBk
                  0
                2. @kaderusmsalut .donné moi la méthode dans le cas générale
                  stp
                  merci beaucoup
                  0
                3. bonjours qelqun me transfére ses programme en matlab
                  0
              2. salut tout le monde!
                alors je dois faire la résolution d'un programme linéaire de tré grande taille ( presque 300 contrainte et 300 variable ) g essayé le logiciel lingo mé il me peux pas résoudre il se limite à 150 contrainte et 300 varible si vous avez une idée ou un lien ou je peux trouver mieux que lingo aider moi. merci c mon E-mail : pro-z@hotmail.fr
                0
                1. salut s.v.p je voudrais un programme par matlab, qui recoud la factorisation LU par la méthode de gauss
                  ""avec matlab""
                  0
                  1. merci beaucoup kaderusm
                    0
                2. salut s.v.p je voudrais un ou dfes proggramme qui resoud les méthode de simlexe de programmation linéaire
                  (méthode du grand m)
                  0
                  1. salut j ai besoin de votre aide j ai besoin de comprendre resoudre ce probleme : resoudre grafiquement: maxmiser Z= 3x1+5x2 contrainte: x1 inferieure ou egal a 4
                    2x2inferieure ou egal a 12
                    3x1+2x2inferieurou egal a 18
                    x1superieure ou egal 0 , x2 superieur ou egel 0
                    3
                    1. salut ma soeure .bon cette petite application est tres facile.pour la resoudre, on utilise la methide du simplexe.
                      on a comme donnees:
                      x1 <=4
                      2 x2<=12
                      3 x1+2 x2<=18
                      3 x1+5 x2=Z(max)
                      x1>=0 ,x1>=0
                      on va mettre ce systeme sous forme canonique
                      alors
                      x1 + x3 =4
                      2x2+ x4=12
                      3 x1+2 x2+ x5=18
                      3 x1+5 x2=Z(max)
                      x1>=0 ,x1>=0,x3>=0.x4>=0,x5>=0.
                      apres ca on utilise le tableau du simplexe
                      on trouve la solution suivante:
                      x*=(0.9)
                      z(max)=45
                      0
                    2. comment programmer la methode des deux phases et donner moi le programme en pascal en urgence svp j'attend votre reponce?
                      0
                  2. salut j'ai besoin de votre aide ,je veux écrire un programme qui resoud l' équation: ax+b=0 aidez moi ,j'ai écris mais je ne suis pas sure de moi ,j'attend votre reponse .merci
                    0
                    1. salut alors moi g un problem avec lé programation je doi resoudr le system ax=b et affiché la solution en utilisant l algorithme de gauss ; mais j arriv pas a l fair svp est ce ke vou pouvé maidé ?
                      0
                      1. Bonjour a tous
                        S il vous plait j ai besoin de votre aide je dois faire un programme de l équation ax=b je l ai fait mais il y a un truc qui va pas dans le resultat de x
                        SVP de l aide....voici mon prog

                        #include <stdio.h>

                        int A[50][50];
                        int B[50];
                        int X[50];
                        int i,j,n,choix,rep;

                        int trisup(int A[50][50], int B[50])
                        {
                        int som;
                        som=0;
                        for(i=0;i<n;i++)
                        {
                        for(j=0;j<n;j++)
                        {
                        som=som+(A[i][j]*X[j]);
                        X[i]=(1/A[i][i])*(B[i]-som);
                        }
                        }
                        printf("La solution X du systeme S est la suivante : \n");
                        for(i=0;i<n;i++)
                        {
                        for(j=0;j<n;j++)
                        {
                        printf("%d ",&X[i]);
                        printf("\n");
                        }
                        }
                        return(0);
                        }
                        int triinf(int A[50][50], int B[50])
                        {
                        int som;
                        som=0;
                        for(i=0;i<n;i++)
                        {
                        for(j=0;j<n;j++)
                        {
                        som=som+(A[i][j]*X[j]);
                        X[i]=(1/A[i][i])*(B[i]-som);
                        }
                        }
                        printf("La solution X du systeme S est la suivante : \n");
                        for(i=0;i<n;i++)
                        {
                        for(j=0;j<n;j++)
                        {
                        printf("%d ",&X[i]);
                        printf("\n");
                        }
                        }
                        return(0);
                        }
                        void trisup_resolv()
                        {
                        printf("Vous avez choisi une matrice triangulaire superieure\n");
                        printf("\n");
                        printf("Saisie des donnees de la matrice A triangulaire superieure \n");
                        printf("\n");
                        printf("Entrer la dimension de la matrice A\n");
                        scanf("%d",&n);
                        for(i=0;i<n;i++)
                        for(j=0;j<n;j++)
                        {
                        if(j>=i)
                        {
                        printf("Element A[%d][%d] :",i,j);
                        scanf("%d",&A[i][j]);
                        }
                        else
                        A[i][j]=0;
                        }
                        printf("Les donnees de la matrice A sont les suivantes : \n");
                        for(i=0;i<n;i++)
                        {
                        for(j=0;j<n;j++)
                        {
                        printf("%d ",A[i][j]);
                        }
                        printf("\n");
                        }
                        for(i=0;i<n;i++)
                        {
                        printf("Element B[%d][%d]: ",i,j);
                        scanf("%d",&B[i]);
                        }
                        printf("Les cordonnees du vecteur B sont les suivantes : \n");
                        for(i=0;i<n;i++)
                        {
                        printf("%d ",B[i]);
                        printf("\n");
                        }
                        trisup(A,B);
                        }
                        void triinf_resolv()
                        {
                        printf("Vous avez choisi une matrice triangulaire inferieure\n");
                        printf("\n");
                        printf("Saisie des donnees de la matrice A triangulaire inferieure \n");
                        printf("\n");
                        printf("Entrer la dimension de la matrice A\n");
                        scanf("%d",&n);
                        for(i=0;i<n;i++)
                        for(j=0;j<n;j++)
                        {
                        if(j<=i)
                        {
                        printf("A[%d][%d] :",i,j);
                        scanf("%d",&A[i][j]);
                        }
                        else
                        A[i][j]=0;
                        }
                        printf("Les donnees de la matrice A sont les suivantes : \n");
                        for(i=0;i<n;i++)
                        {
                        for(j=0;j<n;j++)
                        {
                        printf("%d ",A[i][j]);
                        }
                        printf("\n");
                        }
                        for(i=0;i<n;i++)
                        {
                        printf("element[%d][%d]: ",i,j);
                        scanf("%d",&B[i]);
                        }
                        printf("Les coordonnees du vecteur B sont les suivantes : \n");
                        for(i=0;i<n;i++)
                        {
                        printf("%d",B[i]);
                        printf("\n");
                        }
                        triinf(A,B);
                        }
                        void acceuil()
                        {
                        printf("Bienvenue dans ce programme\n");
                        printf("\n");
                        printf("Ce programme permet la resolution de systemes lineaires tels que Ax=b\n");
                        printf("\n");
                        printf("Vous aurez le choix entre une matrice superieure et inferieure\n");
                        }
                        void fin()
                        {
                        rep=2;
                        if(rep==2)
                        {
                        printf("Merci davoir choisi ce programme.Fin.\n");
                        }
                        }
                        void main()
                        {
                        rep=1;
                        while(rep==1)
                        {
                        choix=0;
                        while(choix<1||choix>2)
                        {
                        printf("\n");
                        acceuil();
                        printf("\n");
                        printf("Que voulez vous faire ?\n");
                        printf("\n");
                        printf("1 pour effectuer le calcul sur une matrice triangulaire superieure\n");
                        printf("\n");
                        printf("2 pour effectuer le calcul sur une matrice triangulaire inferieure\n");
                        printf("\n");
                        scanf("%d",&choix);
                        switch(choix)
                        {
                        case 1:trisup_resolv();
                        break;
                        case 2:triinf_resolv();
                        break;
                        default:printf("Erreur de saisie. vous devez saisir un chiffre entre 1 et 3\n");
                        }
                        }
                        printf("Voulez vous continuez ? 1 pour Oui et 2 pour Non\n");
                        printf("\n");
                        scanf("%d",&rep);
                        printf("\n");
                        if(rep<1||rep>2)
                        {
                        printf("Une erreur sest produite. Ce programme va sarreter\n");
                        printf("\n");
                        fin();
                        }
                        if(rep==1)
                        {
                        while(rep==1)
                        {
                        choix=0;
                        while(choix<1||choix>2)
                        {
                        printf("Que voulez vous faire ?\n");
                        printf("\n");
                        printf("1 pour effectuer le calcul sur une matrice triangulaire superieure\n");
                        printf("\n");
                        printf("2 pour effectuer le calcul sur une matrice triangulaire inferieure\n");
                        printf("\n");
                        scanf("%d",&choix);
                        switch(choix)
                        {
                        case 1:trisup_resolv();
                        break;
                        case 2:triinf_resolv();
                        break;
                        default:printf("Erreur de saisie. Vous devez saisir 1 ou 2\n");
                        }
                        }
                        printf("Voulez vous continuez ? 1 pour Oui et 2 pour Non\n");
                        printf("\n");
                        scanf("%d",&rep);
                        printf("\n");
                        }
                        }
                        if(rep==2)
                        {
                        printf("Merci davoir choisi ce programme\n");
                        printf("\n");
                        printf("Fin du programme. Appuyer sur une touche quelconque\n");
                        }
                        }
                        }
                        1
                        1. bonjour a tout le monde.
                          svp je vais faire des etudes en informatique de gestion en première année et j'ai des matieres qui sont algorithmiques et programmation 1 ; algorithmiques et programmations 2 t surtout la programmation linéaire et je ne sais pas ce que c'est .
                          svp aiser moi je veux etre brillante et savoir ce que sait avant d'entrer a l'université.
                          j'mplore votre aise.
                          et merci.
                          3
                          1. ne t en fais pas .la programm ation lineaire est surtt utilisé en economie pour aider les entreprises à produire la quantités ki maximise leur profit
                            0
                        • 1
                        • 2