04 marzo, 2011

Sumar un vector renglón a una matriz en MATLAB

Supongamos que tenemos una matriz A con m renglones y n columnas y un vector b con n columnas. Queremos sumarle a cada columna de A el correspondiente elemento de b. Tal vez nuestro primer impulso es intentar A+b pero MATLAB nos dirá que Matrix dimensions must agree. Entonces se nos antojará un for de 1 a n, pero no debemos caer en la tentación. Una mejor opción es usar repmat.

m = 10; % Diez renglones
n = 5; % Cinco columnas
A = randi(9,m,n) % Matriz con números al azar del 1 al 9
b = randi(99,1,n) % Vector renglón con números al azar del 1 al 99
A =

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


b =

    28    68    65    17    12

Usando repmat podemos crear una nueva matriz B donde cada renglón sea el vector b.

B = repmat(b,m,1) % Creamos una matriz C
B =

    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12
    28    68    65    17    12

y ahora sí podemos sumar

suma = A+B
suma =

    36    70    71    24    16
    37    77    66    18    16
    30    77    73    20    19
    37    73    74    18    20
    34    76    72    18    14
    29    70    72    25    17
    31    72    72    24    17
    33    77    69    20    18
    37    76    71    26    19
    37    77    67    18    19