Programme resolution programmation lineaire
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
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.
-
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-
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;
} -
@AZIZ Rachid ENSAM-MeknésSVP; est ce que vous pouvez d'introduire ce programme en MATLAB........SVP;SVP;SVP :)
-
@AZIZ Rachid ENSAM-Meknésest ce que vous pouvez mettre ce programme sous matlab.........c'est très gentil ;)
et merci à l'avance!! -
@AZIZ Rachid ENSAM-MeknésBonjour
-
-
-
mercie
-
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 .....
-
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 -
en matlabe stp
bay -
slt a tout
comment faire un algourithme de la composition LU --factoritsatoin--gauss
merciiiiiiiiiiiiii -
calculer et remplir un matrice triangulair superieur sans paser a 0
-
dsl je coné pas matlab
-
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. -
mercie mes je voudrez des programme en pascal pour les méthode de simplexe
-
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
-
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-
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 -
-
-
-
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 -
salut s.v.p je voudrais un programme par matlab, qui recoud la factorisation LU par la méthode de gauss
""avec matlab"" -
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) -
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-
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 -
-
-
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
-
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é ?
-
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");
}
}
} -
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.
- 1
- 2