Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
SweetMonique
Femeie
19 ani
Galati
cauta Barbat
28 - 52 ani
Mihai Sprinceana / Matlab / Operatii uzuale matrici in consola Moderat de andreeamp, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
mihaispr
Administrator

Inregistrat: acum 17 ani
Postari: 2142
%>>semn automat pus in consola-reprezinta de fapt cursorul Matlab-ului

In continuare veti invata cum sa definiti valorile unei matrici in consola si sa operati calcule simple cu matrici:

1) Pentru a introduce o matrice si a o stoca intr-o variabila scrieti in consola:

>> a = [ 1 2; 3 4 ] % are efectul introducerii matricei aceasta este afisata doar daca se apasa ENTER;se obseva ca elementele matricei %sunt cuprinse intre paranteze drepte si separate cu ;

Obs. Daca insa avem de introdus o matrice f.mare scrieti elementele fiecarei linii si in loc de ; dati enter. Nu uitati ca elementele sa fie cuprinse intre [ si ]

Matricea va fi afisata in ordinea elementelor pe linii:
1     2
3     4

Pentru a reafisa matricea scrieti:
>>a

Daca in schimb introduceti matricea:
>>b = [ [1 2 3]' [2 4 7]' [3 5 8]']

Aceasta va fi afisata in ordinea elementelor pe coloane:
1     2     3
2     4     5
3     7     8

O matrice poate fi introdusa si folosind numere complexe astfel:

>>a=[1 2;3 4]+i*[5 6;7 8]

Efect: se va afisa matricea

a =

   1.0000 + 5.0000i   2.0000 + 6.0000i
   3.0000 + 7.0000i   4.0000 + 8.0000i

Referirea la un element al matricei se face astfel:

>>b=a(1,2) % adica va afisa elementul de pe linia 1 coloana 2

Se va afisa: b=2

Reunirea elementelor a 2 matrici date se face cu secventa:

>>a1=[1 2;3 4]
>>a2=[8 9;7 5]
>>a=[a1;a2]

Se va afisa:
1 2
3 4
8 9
7 5

Daca in plus dam comanda in consola:

>>b=a(1:3,: ) % se vor extrage din matrice numai liniile 1 si 3

Se va afisa:
1 2
8 9

Operatia a=[] atribuie variabilei a o matrice de dimensiune 0*0

2) Inversarea ordinii coloanelor unei matrice

>> a= [1 2 3;4 5 6;7 8 9]

%dupa prima comanda se afiseaza matricea
1     2     3
4     5     6
7     8     9

>>fliplr(a) %inverseaza ordinea coloanelor unei matrice

Se va afisa:
3     2     1
6     5     4
9     8     7

3) Inversarea ordinii liniilor unei matrice

» a= [1 2 3;4 5 6;7 8 9]

%dupa prima comanda se afiseaza matricea
1     2     3
4     5     6
7     8     9

>>flipud(a) %inverseaza ordinea liniilor unei matrice

Se va afisa:
7     8     9
4     5     6
1     2     3

4) Redimensionarea unei matrice

Redimensionati o matrice de 3*4 in una de 2*6.
Obs. Numarul elementelor nu trebuie sa se schimbe,altfel nu se poate redimensiona

>> a= [1 4 7 10;2 5 8 11;3 6 10 12] %definirea unei matrici 3*4(3linii,4coloane)
>> b=reshape(a,2,6) %redimensionare in matrice 2*6

Se va afisa:
1     3     5     7    10    11
2     4     6     8    10    12


Alta varianta pt.redimensionare a matricii cu functia reshape  ar fi:

>>b= reshape(a,2,[])

5) Definirea unei submatrice

%semnul : reprezinta extragerea tuturor liniilor sau coloanelor

Exemplul 1:

>> a= [1 2 3;4 5 6;7 8 9]
>> b=a(1:2,3) % formeaza submatricea de dimensiune 2*1 si consta din primele 2 %elemente din coloana a treia a matricei

Se va afisa:
3
6

Exemplul 2:
>> a= [1 2 3;4 5 6;7 8 9]
>> b=a(:,1:2) %extrage submatricea care contine coloanele de la 1 la 2

Se va afisa:
1     2
4     5
7     8

Exemplul 3:
>> a= [1 2 3;4 5 6;7 8 9]
>> b=a(:,2) % extrage submatricea care contine elementele coloanei 2

Se va afisa:
2
5
8

Exemplul 4:
>> a= [1 2 3;4 5 6;7 8 9]
>> b=a(1:2,: ) % extrage submatricea care contine liniile de la 1 la 2

Se va afisa:
1     2     3
4     5     6

Exemplul 5:
>> a= [1 2 3;4 5 6;7 8 9]
>> b=a(2,: ) % extrage submatricea care contine elementele liniei 2

Se va afisa:
4     5     6

6) Inlocuirea unei matrice cu o alta cu anumite conditii

>> a= [1 2 3;4 5 6;7 8 9] %definirea celor 2 matrici
Se va afisa:
1     2     3
4     5     6
7     8     9
>> b=[0 1 1; 1 0 0;1 2 3]
Se va afisa:
0     1     1
1     0     0
1     2     3
>> a(:,[1,2])=b(:,1:2)% permite inlocuirea coloanelor 1 si 2 cu primele 2 coloane
%ale matricei b

Se va afisa:
0     1     3
1     0     6
1     2     9


7) Schimbarea elementelor unei matrici
>> a= [1 2; 3 4]
>> a( : )=12:15 %practic formeaza o matrice 2*2 cu elem de la 12 la 15

Se va afisa:
12     13
14     15


8) Inmultirea unei matrici cu ea insasi

Pentru aceasta scrieti in consola comenzile:

>> a = [ 1 2; 3 4 ] %definirea unei matrici
>>a*a

% se poate scrie a la puterea 2 si >>a^2

9) Inumultirea a doua matrici

>> a = [ 1 2; 3 4 ] %definirea celor 2 matrici a si b
>> b=  [ 1 2; 0 1 ]

% pentru a inmulti a*b scrieti:
>> a*b

% pentru a inmulti b*a scrieti:
>> b*a

10) Suma a doua matrici:

>> a = [ 1 2; 3 4 ] %definirea celor 2 matrici a si b
>> b=  [ 1 2; 0 1 ]
>> a+b

11) Suma intre 2 elemente ale unei matrici

>> a= [1 2 3;4 5 6;7 8 9] %definirea unei matrici
Se va afisa:
1     2     3
4     5     6
7     8     9

Daca scriem comanda in consola>>a(3,3)=a(3,1)+a(1,3)
Elementul a(3,3) va fi inlocuit cu suma dintre elem a(3,1) si a(1,3). Mai precis 9 va fi inlocuit cu a(3,1)=7; a(1,3)=3; a(3,1)+a(1,3)=10 deci se va afisa:

1     2     3
4     5     6
7     8    10

12) Transformarea unei matrici intr-un vector coloana

>> a= [1 2; 3 4] % definirea unei matrici
>> b=a( : ) %afisarea sub forma de vector coloana

Se va afisa:
1
2
3
4

13) Inversarea elementelor unei matrici

>> a = [ 1 2; 3 4 ] %definirea celor 2 matrici a si b
>> b=  [ 1 2; 0 1 ]
>> s=a+b % calculeaza suma celor 2 matrici definite anterior
>> inv(s) % calculeaza inversa matricii s

Obs f.imp: matricea >> c= [1 1; 1 1] nu poate fi inversata deoarece determinantul ei este 0

14) Determinantul unei matrici

>> a = [ 4 2; 3 4 ] %definirea unei matrici
>> det(a) %calculeaza determinantul matricii a

15) Transpusa unei matrici

Exemplu: >>y=[1 2; 3 4]
              >>z=y' %afiseaza matricea z ca fiind y transpus

Se va afisa:

z= 1   3
    2   4

16) Afisarea diagonalei principale a unei matrici[b]

>> a= [1 2 3; 4 5 6; 7 8 9] %matrice 3*3(3linii,3coloane)
>>diag(a)

Se va afisa:
1
5
9

Daca in schimb dati comanda >>diag(diag(a))

Se va afisa:
1     0     0
0     5     0
0     0     9

[b]17) Crearea unei matrici inferior triunghiulara( are 0 sub diagonala principala)


Pentru aceasta tastati in consola:

>> a= [1 2 3; 4 5 6; 7 8 9] %matrice 3*3(3linii,3coloane adica triunghiulara)
>> tril(a) % conditia ca matricea sa fie inferior triunghiulara

Se va afisa:

1     2     3
0     5     6
0     0     9

18) Crearea unei matrici superior triunghiulara( are 0 deasupra diagonalei principale)

>> a= [1 2 3; 4 5 6; 7 8 9] %matrice 3*3(3linii,3coloane adica triunghiulara)
>> triu(a) % conditia ca matricea sa fie superior triunghiulara

Se va afisa:

1     0     0
4     5     0
7     8     9

Obs. Dupa ce efectuati un test de la fiecare punct dati comanda:
>>clear
pentru a va genera(defini) voi o alta matrice

19) Eliminarea unor coloane dintr-o matrice

>>a=[10 12 13 14;15 16 17 18; 19 20 21 22;23 24 26 28]

Se va afisa:

10    12    13    14
15    16    17    18
19    20    21    22
23    24    26    28

>>a(:,[2,4])=[] %practic vom elimina coloanele 2 si 4 din matricea noastra prin atribuirea unei matrici vide

20) Functii de generare a matricilor

- eye(a)- genereaza o matrice unitate de dimensiunea matricii a citite anterior

Exemplu: >>a=[1 2;3 4]
              >>eye(size(a)) %afiseaza matricea unitate I2 cu 1 pe diag.principala

- zeros(a)- genereaza o matrice nula de dimensiunea matricii a citite anterior

Exemplu: >>a=[1 2;3 4]
              >>zeros(size(a))

-ones(a)-genereaza matricea compusa numai din elemente 1

Exemplu: >>a=[1 2;3 4]
              >>ones(size(a))

- rand(4,3)- genereaza o matrice 4*3 cu numere aleatoare intre 0 si 1(foloseste distributia uniforma)

-randn(2,3) -genereaza o matrice 2*3 cu numere aleatoare intre -1 si 1(foloseste distributia normala)

21) Testarea unei matrice goale

Se realizeaza cu ajutorul functiei isempty. Aceasta returneaza valoarea 1 daca matricea este goala si 1 in caz contrar

Exemplul1: >>a=[]
                >>isempty(a)

Se va afisa: ans=1

Exemplul2: >>a=[1 2; 3 4]
                 >>isempty(a)

Se va afisa: ans=0

22) Calcule element cu element

Fie 2 matrici:

>>a=[1 2; 3 4]
>>b=[2 2; 2 2]
>>c=a.*b%inmulteste fiecare element

Se va afisa:
c = 2     4
     6     8

Obs: Pt comanda >>c=a./b %imparte element cu element

Se va afisa:

c = 0.5000    1.0000
     1.5000    2.0000

23) Repetarea unei matrici de un anumit numar de ori cu ajutorul functiei repmat

>>u=[1 2; 3 4]
>>v=repmat(u,1,4)

Se va afisa:
v =

     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4

24) Functia sortrows - Sortarea unei coloane iar a doua coloana isi pastreaza valoarea asociata fiecarei valori din prima coloana


Exemplu:

>> a=[1.0000 9.2000
      3.0000 8.8000
      4.0000 8.6000
      2.0000 0]   %definirea matricei in consola

>> b = sortrows(a,1)

b =

    1.0000    9.2000
    2.0000         0
    3.0000    8.8000
    4.0000    8.6000

25) Setarea nr. negative dintr-o matrice la 0


>> a=[1 -1 2 -4 -5
     -1 -2 3 -2 -3
      1  1 2  3  5
     -4 -9 -6 -8 6
      1  9  9  9 9]

a =

     1    -1     2    -4    -5
    -1    -2     3    -2    -3
     1     1     2     3     5
    -4    -9    -6    -8     6
     1     9     9     9     9

>> a(a<0)=0

a =

     1     0     2     0     0
     0     0     3     0     0
     1     1     2     3     5
     0     0     0     0     6
     1     9     9     9     9

>>

26) Gasirea elementelor mai >0 la o matrice 5*5 (5linii * 5coloane)

>> a=[1 -1 2 -4 -5
     -1 -2 3 -2 -3
      1  1 2  3  5
     -4 -9 -6 -8 6
      1  9  9  9 9]

a =

     1    -1     2    -4    -5
    -1    -2     3    -2    -3
     1     1     2     3     5
    -4    -9    -6    -8     6
     1     9     9     9     9

>>find(a>0)

>> find(a>0)

ans =

     1
     3
     5
     8
    10
    11
    12
    13
    15
    18
    20
    23
    24
    25


Afiseaza practic al catelea element din matrice este >0.

Primele trei elemente mai mari decat 0 din matrice sunt:

1 - adica primul element al matricei este >0
3 - adica al treilea element al matricei este >0
5 - adica al cincilea element al matricei este >0

S.a.m.d

27) Generarea unei matrici 5*5 cu valori random si afisarea elementelor cuprinse intre valorilor intre -1 si 3 (valorile >3 sunt inlocuite cu 3, iar valorile <-1 sunt inlocuite cu -1 cele care se integreaza in intervalul [-1 3] raman neschimbate

Exemplu:

>> M = ceil(10*rand(5))-5
M = min(max(M,-1) ,3) % clip between -1 and 3

M =

     5     3     2     0    -4
    -2     0     3     5    -1
     2    -4     5     5     4
     0     4     3     0    -4
     4     0    -3     4    -3


M =

     3     3     2     0    -1
    -1     0     3     3    -1
     2    -1     3     3     3
     0     3     3     0    -1
     3     0    -1     3    -1

28) Ordonarea crescatoare a elementelor primei coloane pastrand elementele celorlalte coloane intacte

De exemplu:

>> A=[5  8  2
25 4 56
85 65 55
8 99 6
4 44 5]

>>[out , in] = sort(A(:, 1));
Asort = A(in , : );

Vom obtine prima coloana ordonata crescator fara ca celelalte coloane sa fie afectate mai precis:

A =
4 44 5
5 8 2
8 99 6
25 4 56
85 65 55

29) Rangul unei matrice folosind functia rank

>> A=[1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> B=rank(A)

30) Norma unei matrice folosind functia norm

>> A=[1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

> C=norm(A)

C =

   16.8481

31) Functia nnz pentru numararea elementelor diferite de 0 dintr-o matrice

>> A=[1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> nnz(A)

ans =

     9

32) Functia nonzeros -afiseaza sub forma unui vector coloana elementele care sunt diferite de 0

>> A=[1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> nonzeros(A)

ans =

     1
     4
     7
     2
     5
     8
     3
     6
     9

33) Functia colperm -permutare a coloanelor unei matrice de tip sparse(care contine si elemente =0)

>>help colperm

Exemplu:

>> A=[1 2; 0 1]

A =

     1     2
     0     1

>> B=colperm(A)

B =

     1     2

>> A(:,B)

ans =

     1     2
     0     1

34) Calculare rang structural cu ajutorul functiei sprank pt.o matrice sparse

Exemplu:

>>A = [1    0    2    0
     2    0    4    0 ]  %definim matricea sparse ce contine si elemente nule

>>B = sparse(A); %eliminam zero-urile

>>sprank(A) %calcul rang structural cu functia sprank

ans =
     2

>>rank(full(A)) %calculam rangul cu functia rank pentru matricea initiala sparse; cu full transformam matricea la care am eliminat zero-urile folosind matricea sparse in matricea initiala deci pentru matricea initiala calculam rangul cu ajutorul functiei rank de data aceasta

ans =
     1

35) Functia nzmax

>> a=[1 2 0; 2 2 1; 3 3 11]

a =

     1     2     0
     2     2     1
     3     3    11

>> help nzmax
NZMAX  Amount of storage allocated for nonzero matrix elements.
    For a sparse matrix, NZMAX(S) is the number of storage locations
    allocated for the nonzero elements in S.

    For a full matrix, NZMAX(S) is prod(size(S)).
    In both cases, nnz(S) <= nzmax(S) <= prod(size(S)).

    See also nnz, nonzeros, spalloc.


    Reference page in Help browser
       doc nzmax



>> b=nzmax(a)

b =

     9

36) Cum se inlocuiesc toate elementele nenule dintr-o matrice cu -1

>> A=[5 0 10;
0 3 7;
0 6 0]


>>A(find(A~=0,size(A,1)))=-

A =

    -1     0    10
     0    -1     7
     0    -1     0

37) Afisarea tuturor permutarilor pentru o matrice data cu functia perms:

>>A = [1 2 3; 4 5 6; 7 8 9]
>> perms(1:3)

38) Functia mat2str- transforma o matrice intr-un sir de caractere

Exemplu:

>> a=[1 2 ; 1 2]

a =

     1     2
     1     2

>> b=mat2str(a)

b =

[1 2;1 2]

39) Functia mat2cell -transforma o matrice intr-o celula

Exemplu:

>> a=[1 2; 1 2]

a =

     1     2
     1     2

>> b=[5 6; 7 8]

b =

     5     6
     7     8

>> c=mat2cell(a)
Warning: Single input behavior is obsolete and will be removed in a
         future release of MATLAB. Use C={X} instead.
> In mat2cell at 54

c =

    [2x2 double]

>> d=mat2cell(b)
Warning: Single input behavior is obsolete and will be removed in a
         future release of MATLAB. Use C={X} instead.
> In mat2cell at 54

d =

    [2x2 double]

>> strcat(c,d)

ans =

    [2x4 double]

40) Introducere matrice cu valori complexe

Exemplu:

>> A=[2+3i 3-i 5-7i; 9+i 5+i 2-i; 2-i 3-4i 4+i]  %matrice cu valori complexe
>>B=real(A) %prima matrice B contine toate el.reale ale matricei A
>>C=imag(A) %a doua matrice C contine valorile complexe ale matricei A
>>celula1=mat2cell(B) %conversia matricei B in celula folosind functia mat2cell si stocare in variabila celula2
>>celula2=mat2cell(C) %conversia matricei C in celula folosind functia mat2cell si stocare in variabila celula2
>>strcat(cell1,cell2) %application fonction strcat pour la concatenation pour les variables cell1 et cell2


41) Comanda vertcat pentru concatenarea unor matrici de lungi diferite (concatenare pe coloana)

Exemplu:

>>A=[1;2;3;4]
>>B=[11;2;3]
>>C=vertcat(A,B)

42) Comanda issorted

Exemple:

Pentru un vector:

>>A = [5 12 33 39 78 90 95 107 128 131];

issorted(A)

ans=1

Intoarce valoarea 1 in caz de succes si 0 in caz contrar.

Pentru o matrice patrat magic folosim functia magic(suma pe linii=suma pe coloane=suma pe cele 2 diagonale=matrice patrat magic):

>>A = magic(5)
A =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

>>issorted(A, 'rows')

ans =
     0

>>B = sortrows(A)
B =
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
    17    24     1     8    15
    23     5     7    14    16

>>issorted(B)
ans =
     1

Pentru vectori de celule(cell-array):

x = {'one'; 'two'; 'three'; 'four'; 'five'};
issorted(x)
ans =
     0

y = sort(x)
y =
    'five'
    'four'
    'one'
    'three'
    'two'

issorted(y)

43) Ordonarea elementelor unei matrici dupa ultima coloana

Exemplu:

Avem matricea:

>> a=[
1 2 3 6 9 20 0;
1 3 6 9 8 9 3;
3 6 9 8 5 9 0;
3 6 9 8 5 9 2;
3 6 9 8 5 9 1;
3 6 9 8 5 9 0;]

Si vrem sa obtinem matricea:

a =

     1     2     3     6     9    20     0
     3     6     9     8     5     9     0
     3     6     9     8     5     9     0
     3     6     9     8     5     9     1
     3     6     9     8     5     9     2
     1     3     6     9     8     9     3

Vom realiza urmatoarea secventa de instructiuni in command window:

>>[val index] = sort(a(:,end));
>>a = a(index,: );
>>a %sa vedem noua valoare a matricei a

[val index] = sort(A(:,end));
A = A(index,: );


pus acum 17 ani
   
mihaispr
Administrator

Inregistrat: acum 17 ani
Postari: 2142
Pentru afisarea tuturor functiilor pt.matrici:


>>help matfun

sau


>>docsearch matrix


sau pt.matrici sparse: (ce contin elemente de 0, prin functia sparse eliminam elem=0 din matrice)

>>help sparfun


pus acum 15 ani
   
mihaispr
Administrator

Inregistrat: acum 17 ani
Postari: 2142
Pentru listarea tuturor comenzilor pt.operatii speciale aplicate asupra matricilor:


>>help specfun


pus acum 15 ani
   
mihaispr
Administrator

Inregistrat: acum 17 ani
Postari: 2142
44) Inlocuirea unor valori care nu sunt numere (NaN -Not a Number) dintr-o matrice cu valori de 0:

Exemplu in command window:

>>A = [ 1 2 NaN; NaN 2 3; NaN NaN 100 ]

A(isnan(A)) = 0;

45) Functia transpose pt.transpusa unei matrice

>> a=[1 2; 3 4]

a =

     1     2
     3     4

>> b=transpose(a)

b =

     1     3
     2     4

46) Functia trace pt.suma elementelor de pe diagonala principala

>> a=[1 2; 3 4]

a =

     1     2
     3     4

>>b=trace(a)

ans =

     5

47) Schimbarea randurilor unor matrici (in cazul de fata linia 2 din matrice devine linia 1; iar linia 1 devine linia 2)

Exemplu:

>> B=[1 2; 3 4] % definirea matricei

B =

     1     2
     3     4

>> B = B([2 1],: ); % schimbarea primelor 2 linii din matrice
>> B % afisarea noii valori pt. B de aceea nu este permisa folosirea var.globale cu cuv.rezervat global

B =

     3     4
     1     2

48) Care elemente de pe randuri au suma egala cu 3 (SUMA PE LINII =3)


Exemplu in command window:

>> B=[1 1; 1 2; 2 1; 2 2]

B =

     1     1
     1     2
     2     1
     2     2

>> B(sum(B,2)==3,: )

ans =

     1     2
     2     1

Practic liniile 2 si 3 ale matricei indeplinesc conditia (suma el. pe linii sa fie egala cu 3)


49)  Transformarea unei matrici patrate intr-un vector linie

Avem matricea:

A=[1 2 3;4 5 6; 6 7 8]

Si vrem sa obtinem vectorul linie 1 2 3 4 5 6 7 8

>>A = [1 2 3;4 5 6; 6 7 8] % definim matricea
>>b=A(1,: ) % extragem linia 1 in vectorul b
>>c=A(2,: ) % extragem linia 2 in vectorul c
>>d=A(3,: ) % extragem linia 3 in vectorul d
>>rezultat=[b c d] % concatenam cei 3 vectori intr-un vector rezultat
>>unique(rezultat) % eliminam elem. duble din vectorul rezultat

50) Cum extragem 5 elemente random dintr-o matrice

>>X = [4     6     6     6
     9     0     7     1
     7     8     7     7
     9     9     3     0] % definire matrice 4x4

%nr. de elemente de extras este n=5
n = 5;

% generare a permutarii indicilor cu functia randperm [1: cate_elem are X]
nX = numel(X); % numel - indica in variabila nX nr. de elemente ale matricei X
idx = randperm(nX); % generare permutari aleatoare cu functia randperm

% selectia primilor n indiice permutati
X(idx(1:n))

51) Eliminarea unor randuri dintr-o matrice

Input:

A=[ 1 2 3
2 5 3
3 6 3
4 7 4
5 7 6
6 8 5
7 9 5
8 4 0]

Output:

B=[1 2 3
4 7 4
5 7 6
6 8 5
8 4 0]


Metoda 1:

>>A=[ 1 2 3
2 5 3
3 6 3
4 7 4
5 7 6
6 8 5
7 9 5
8 4 0]
% face ca valoarea din a treia coloana sa difera fata de valoarea anterioara
Q = diff(A(:,3)) ~= 0
% include prima valoare
Q = [true ; Q]
% selecteaza folosing indexare logica
B = A(Q,: ) ;

Metoda 2: cu SplitVec:

>> A=[ 1 2 3
2 5 3
3 6 3
4 7 4
5 7 6
6 8 5
7 9 5
8 4 0];

>> SplitVec(A,3,'firstelem')


52) Aplicatie matrice - impartirea fiecarei coloane la suma elementelor de pe fiecare linie



Input:

>> a=[ 7 2 3; 4 2 6 ; 1 1 1]

I want to make so that every element of my matrix is divided by the sum of the column 1, 2 and 3.

In cazul nostru:

sum_column1=12
sum_column2=12
sum_column3=3

Output:

b= [7/12 2/12 3/12; 4/12 2/12 6/12; 1/3 1/3 1/3]


   

vom rula o bucla for pt a imparti coloana la suma corespondenta. Pt.aceasta:

s = zeros(1,size(a,2));
for i=1:size(a,2),
  s(i) = a(:,i)./sum(a(:,i));
end

//a(:,i) - pt. ca fiecare coloana sa fie impartita la suma ei


Sumare cu sum pe linii:


>> sum(a)

ans =

    12 5 10

>> sum(a,2)

ans =

    12
    12
     3

Putem folosi si functia bsxfun:


>> bsxfun(@rdivide, a, sum(a))

ans =

    0.5833 0.4000 0.3000
    0.3333 0.4000 0.6000
    0.0833 0.2000 0.1000





>> b=arrayfun(@(i) a(:,i)/sum(a(:,i)),1:size(a,2),'UniformOutput',false);
>> cell2mat(b)

ans =

    0.5833 0.4000 0.3000
    0.3333 0.4000 0.6000
    0.0833 0.2000 0.1000

O alta varianta:

     v=[7 2 3; 4 2 6 ; 1 1 1];
     format rat;
     r=v./repmat(sum(v,2),1,size(v,2))
%{
       7/12 1/6 1/4
       1/3 1/6 1/2
       1/3 1/3 1/3
%}
     format short g; % <- reset to your FORMAT...



Alta varianta:

>>a=[ 7 2 3; 4 2 6 ; 1 1 1]



b = sum(a,2)
a./b(:,ones(size(a,2),1))


pus acum 15 ani
   
Pagini: 1  

Mergi la