slt j 'ai une question sur matlab j'ai une matrice 2* ones 3*3 et j'aimerai changer les valeurs de sa diagonale avec par exemple 1 2 3 quelle ligne de commande pourrait m'aider . j'aimerai obtenir 1 2 2; 2 2 2; 2 2 3
merci!
Version imprimable
slt j 'ai une question sur matlab j'ai une matrice 2* ones 3*3 et j'aimerai changer les valeurs de sa diagonale avec par exemple 1 2 3 quelle ligne de commande pourrait m'aider . j'aimerai obtenir 1 2 2; 2 2 2; 2 2 3
merci!
Par exemple, en utilisant l'indexage linéaire :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 >> A = 2*ones(3) A = 2 2 2 2 2 2 2 2 2 >> A([1 5 9]) = [1 2 3] A = 1 2 2 2 2 2 2 2 3
merci
mais mon véritable problème est ceci
"Nous souhaitons réaliser une fonction nommée 0DSquare0 dans Matlab qui nous permette
de créer facilement des matrices carrées de n’importe quelle taille et de type :
w a a a a
a x a a a
a a y a a
a a a ::: :::
a a a ::: z
Pour réaliser cette matrice, la fonction aura 2 arguments : la valeur de a (éléments non
diagonaux de la matrice) et un vecteur contenant les éléments diagonaux de la matrice
diag = [w x y ::: z]. "
voici le code que j'ai réalisé mais ça ne donne pas le résultat attendu surtout pour la position des valeurs de la diagonale de ma matrice
merciCode:
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 function [ M ] = LIM( v,A ) %UNTITLED2 Summary of this function goes here % M = matrice finale , v elements non diagonaux de la matrice ,A elements % diagonaux de la matrice m= length (A) ; Ma = ones ( m,m)*v % creation de ma matrice carrée avec l'element v souhaité for i = 1:m % parcours lignes for j = 1:m % parcours colonnes for k =1:m % parcours elements A Ma (i,j )= A(k) if ( k >m) break end end end end M = Ma % resultat final end
Bonjour,
pour remplacer les élément diagonaux :
Code:Ma(1:size(Ma,1)+1:numel(Ma)) = A;
merci ça marche !!!! pourrais tu s'il te plait m'expliquer ce qui se passe surtout au niveau de la fonction numel merci
Bonsoir,
Tout d'abord, il faut savoir comment sont stockées les valeurs au sein d'un tableau 2D : II-D-1. Toute matrice est vecteur ?.
À partir de là, magelan utilise l'indexage linéaire
Prenons un tableau 8x8 :
On souhaite récupérer les éléments d'indices 1 10 19 28 37 46 55 64.Code:
1
2
3
4
5
6
7
8 1 9 17 25 33 41 49 57 2 10 18 26 34 42 50 58 3 11 19 27 35 43 51 59 4 12 20 28 36 44 52 60 5 13 21 29 37 45 53 61 6 14 22 30 38 46 54 62 7 15 23 31 39 47 55 63 8 16 24 32 40 48 56 64
En prenant M = size(Ma,1), nombre d'éléments selon la première dimension (8 ici), on veux les indices :
Le dernier élément étant à l'indice numel(Ma) : le nombre d'éléments du tableau Ma, que l'on peut aussi désigner à l'aide du mot clé end.Code:1 1+(M+1) 1+2*(M+1) 1+3*(M+1) ... <indice du dernier élément>
Cela nous donne donc des valeurs allant de 1 à numel(Ma) par pas de M+1 = size(Ma,1)+1, d'où :
Code:Ma(1 : size(Ma,1)+1 : numel(Ma))