Bonjour,
J'essaie de résoudre avec MATLAB l'équation A*X=B (A et B connus, X inconnu) en imposant des contraintes à X:
1) X ne contient que des 0 et des 1
2) sum(X)=p
Merci de votre aide.
Bonjour,
J'essaie de résoudre avec MATLAB l'équation A*X=B (A et B connus, X inconnu) en imposant des contraintes à X:
1) X ne contient que des 0 et des 1
2) sum(X)=p
Merci de votre aide.
Bonjour,
A et B connus :
Sous quelle forme, vecteur, matrice ?
Bonjour,
Une solution (force brute !) :
ou :
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 clear % Formation de A et B L=8;% Dimensions A p=3;% Nombre de "1" de X A=fix(10*rand(L,L)+0.5); Xi=[ones(1,p) zeros(1,L-p)]; Xi=Xi(randperm(L))'; B=A*Xi; n=0;% Nombre d'itérations while n <1000 n=n+1; X=fix(rand(1,L)+0.5)'; if A*X==B; break else if n==1000 disp('Pas de solution') end end end Xi' X' n
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 clear % Formation de A et B L=8;% Dimensions A p=3;% Nombre de "1" de X A=fix(10*rand(L,L)+0.5); Xi=[ones(1,p) zeros(1,L-p)]; Xi=Xi(randperm(L))'; B=A*Xi; n=0;% Nombre d'itérations XX=[ones(1,p) zeros(1,L-p)];% Initialisation de X while n <1000 n=n+1; X=XX(randperm(L))'; if A*X==B; break else if n==1000 disp('Pas de solution') end end end Xi' X' n
Merci de votre réponse. Je vais tester le programme.
Pour vérifier que j'ai bien compris votre code:
* L est le nombre de colonnes de A
* 1000 est défini de façon arbitraire
Oui, c'est ça.
Tu peux aussi essayer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sol=round(linsolve(A,B))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager