Programme resolution programmation lineaire

Fermé
awo salvador - 25 avril 2004 à 22:26
 matlab - 24 juil. 2011 à 22:09
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

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
AZIZ Rachid ENSAM-Meknés
4 juin 2008 à 00:23
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
Romahisam Messages postés 4 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 8 mai 2009 1 > AZIZ Rachid ENSAM-Meknés
7 mai 2009 à 18:08
SVP; est ce que vous pouvez d'introduire ce programme en MATLAB........SVP;SVP;SVP :)
0
Romahisam > AZIZ Rachid ENSAM-Meknés
17 mai 2009 à 22:22
est ce que vous pouvez mettre ce programme sous matlab.........c'est très gentil ;)
et merci à l'avance!!
0
zazo > AZIZ Rachid ENSAM-Meknés
21 mai 2009 à 14:28
Bonjour
0
é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
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
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
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
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
comment programmer la methode des deux phases et donner moi le programme en pascal en urgence svp j'attend votre reponce?
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
en matlabe stp
bay
2
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
25 avril 2004 à 23:10
salut, heureux de t'avoir parmi nous, mais malheureusement pour toi, on ne participe pas ds ce site pour les paresseux, on aide ceux qui veulent travailler, si tu veux ton prog, tu vas le programmer et si t'as des blemes, reviens nous voir. Mais avant tout, va faire un tour ici :
http://www.commentcamarche.net/ccmguide/ccmcharte.php3

Maintenant, si tu veux l'algo du simplexe, google est ton ami (il te donnera plein de liens ou on explique l'algo du simplexe).

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
1
bonjour
merci d'avoir repondu a ma requete derniere
cependant j'aimerai beneficier de votre aide sur le probleme pose par mon professeur de mathemabonjour
je vous remercie d'avoir repondu a ma question.
cependant j'ai un autre probleme qui me tracasse. j'implore votre aide sur ce fait.
il s'agit en fait du probleme de la programmation lineaire suivant:

exercice1:
etant donne le probleme de la pl
minimiser f(x)=cx=c1x1+c2x2+...+cnxn (1)
AX=b; x>=0 ou A=(aij) i=1...n ;j=1...m est une matrice (2)reelle constante

b=(b1,b2,...,bn)
on suppose que rangA=m<n
1)decrire la mzthode de simplexe se resolution du probleme (1) et (2).
2)a)formuler un probleme de la pl de votre choix contenant duex variables et au moins trois contraintes dont l'une au moins est de type d'egalite,puis resoudre par la methode decrite en 1) ce probleme.
3)ecrire le probleme dual formule en 2) , puis deduire de 2) sa solution.
j'ai aussi certaines exercices suivante a vous proposer c'est:
exercice1:
une compagnie a conclu un contrat avec le gouvernement
pour fournir 1200 micro ordinateurs cette annee et 2500
l'annee prochaine. la compagnie a une capacite de production
de 1400 micro ordinateurs par an et a deja effectue sa
ligne de production a ce niveau. la compagnie accepte utiliser
au moins 80 heures complementaires par an , chaque heure
complementaire coutant a la compagnie $20000.
en une heure complementaire, la compagnie peut fabriquer
50 micro ordinateurs. le prix unitaire des micro est de $100.
formuler le modele du probleme de sorte que le cout
de la production soit minimal.exercice1:
une compagnie a conclu un contrat avec le gouvernement
pour fournir 1200 micro ordinateurs cette annee et 2500
l'annee prochaine. la compagnie a une capacite de production
de 1400 micro ordinateurs par an et a deja effectue sa
ligne de production a ce niveau. la compagnie accepte utiliser
au moins 80 heures complementaires par an , chaque heure
complementaire coutant a la compagnie $20000.
en une heure complementaire, la compagnie peut fabriquer
50 micro ordinateurs. le prix unitaire des micro est de $100.
formuler le modele du probleme de sorte que le cout
de la production soit minimal.
exercice 2:
a) mettre le probleme suivant de la pl sous la forme standard
maximiser z= 5x1+7x2-2x3+3x4-6x5
sous les contraintes
x1+x2+x3+x4-x6=1 x1,x2,x3,x4,x5>=0
b) executer un seul pivot qui conduit a la forme canonique
initiale qui est aussi la forme optimale.
c)donner la regle generale qui permet de trouver la solution optimale

de tout probleme de la pl.la capacite de productivite journaliere d'un atelier d'assamblage
est 120 articles de type A et de 360 articles de type B.
le controle technique fait passer par jour 200 articles
des 2 types( sans distinction ).les articles de type A sont
4 fois plus cher que les articles de type B.
planifier la fabrication des produits de sorte que l'atelier
realise le plus grand profit possible.
je vous remercie d'avance!
1
salut! as tu resoulu ce probleme?
il m'interesse aussi? peux-tu me l'envoyer stp?

merci d'avance
Inga
0
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
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
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
mira > kaderusm
10 mai 2008 à 18:29
salut .donné moi la méthode dans le cas générale
stp
merci beaucoup
0
bonjours qelqun me transfére ses programme en matlab
0
dsl je coné pas matlab
1
slt a tout
comment faire un algourithme de la composition LU --factoritsatoin--gauss
merciiiiiiiiiiiiii
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
jyma11 Messages postés 7 Date d'inscription lundi 10 septembre 2007 Statut Membre Dernière intervention 12 mars 2008
2 janv. 2008 à 21:06
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
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
salut s.v.p je voudrais un programme par matlab, qui recoud la factorisation LU par la méthode de gauss
""avec matlab""
0
merci beaucoup kaderusm
0
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
mercie mes je voudrez des programme en pascal pour les méthode de simplexe
0
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
mira 1989 Messages postés 1 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 10 mai 2008
10 mai 2008 à 19:35
la méthode en matlabe stp
0
calculer et remplir un matrice triangulair superieur sans paser a 0
0
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