bonjour,
je cherche, après calculs, à remplacer une ligne dans une matrice par une ou plusieurs lignes
exple:
1 2 3
4 2 7
5 9 1
peut devenir
1 2 3
2 3 5
1 5 4
5 9 1
comment faire ?
merci
bonjour,
je cherche, après calculs, à remplacer une ligne dans une matrice par une ou plusieurs lignes
exple:
1 2 3
4 2 7
5 9 1
peut devenir
1 2 3
2 3 5
1 5 4
5 9 1
comment faire ?
merci
Bonjour,
Une solution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 M=[1 2 3 4 2 7 5 9 1]; R=2;% LIgne à remplacer L=[2 3 5 1 5 4]; [m,n]=size(L) cat(1,cat(1,M(R-1,:),L),M(n,:))
bonjour,
j'ai mal choisi mon exemple
dans mon probleme, les lignes à ajouter ne sont pas connues avant de faire des calculs (elements et nombre)
elles doivent résulter d'une ligne de la matrice de départ
je m'explique :
- on choisi une ligne (selon une certaine condition)
- on retranche une valeur au dernier element de la ligne choisie
- on ajoute (selon un certaine condition) cette valeur au autres elmts de la ligne choisie (un elmt à la fois)
ainsi, chaque ajout me crée une nouvelle ligne (<=n-1)- les lignes obtenues remplace celle de départ
on obtient alors, exmple:
1 2 3
4 5 6
7 8 9
donne
1 2 3
4+2 5 6-2
4 5+2 6-2
7 8 9
Bonjour,
Peut-être :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 M=[1 2 3 4 5 6 7 8 9]; R=2;% LIgne à remplacer V=2;% Valeur L(1,:)=[M(R,1)+V M(R,2) M(R,3)-V] L(2,:)=[M(R,1) M(R,2)+V M(R,3)-V] [m,n]=size(L) cat(1,cat(1,M(R-1,:),L),M(n,:))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 L(1,:)=[M(R,1)+V M(R,2) M(R,3)-V] L(2,:)=[M(R,1) M(R,2)+V M(R,3)-V]
dans le cas d'une matrice plus gde (n x n), doit-on passer par une boucle (for ou autre)
ou peut-on faire plus simple
Bonjour,
On peut faire pareil avec une boucle pour les calculs de L.
As-tu un exemple ?
bonjour,
j'ai essayé qlq chose mais sans succes
je vous montre ce que j'ai fait
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 M = [.00 .25 .00 .75 .15 .25 .00 .6 .00 .45 .00 .55 .15 .45 .00 .4 .00 .25 .20 .55 .15 .25 .20 .4 .00 .45 .20 .35 .15 .45 .20 .20] b = [.15 .45 .20 .45] for i = 1 : n if M(i,m) > b(m) v = M(i,m) - b(m) % val à ajouter ou soustraire M(i,m) = b(m) for j =1 : m-1 D(j) = M(i,j)+v % vect resultat de l'ajout de val end for j = 1 : m-1 if D(j) <= b(j) % comparaison avec b % creation des lignes à inserer ds M for k = 1 : m-1 if k == j L(k) = M(i,j) + v else L(k) = M(i,j) end end L(m) = b(m) K(j,:) = L end end % je n'arrive pas à faire la concatenation if j == m if D > b K(?,:) = M(i,:) end end end end
Bonjour,
Explique nous ce que tu veux faire avec b
bonjour,
b est un vect donné , il constitue une borne pour les elemts de M
si M(i,m)> b(m) pour i=1,n
alors on retranche la difference b(m)-M(i,m) de M(i,m) et on l'ajout au autres elmts de la meme ligne tant qu'on ne dépasse pas la b(j) correspodant
si aucun ajout n'est permis alors on supprime la ligne
sinon chaque ajout me crée une nouvelle ligne
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