Somma matrici

di il
3 risposte

Somma matrici

Buongiorno,
sapreste consigliarmi un modo per automatizzare questi passaggi?

A=[1 2 3; 4 5 6; 7 8 9; 10 11 12]
B=[1 4 1; 3 2 2]
for j=1:3
A_1(:,j)=A(:,j)-B(1,j);
A_2(:,j)=A(:,j)-B(2,j);
end
AA_=[A_1 A_2]

Dovrò lavorare con matrici più grandi.
Vi ringrazio.

3 Risposte

  • Re: Somma matrici

    Se l'obiettivo è eliminare il ciclo for puoi provare:
    
    AA_=[A-repmat(B(1,:),size(A,1),1) A-repmat(B(2,:),size(A,1),1)];
    
  • Re: Somma matrici

    Il ciclo non rappresenterebbe un problema, solamente che non sono riuscito a renderlo automatico.
    Lo script che mi hai suggerito come posso estenderlo ad un caso generico?
    A=(m,n) B=(15,n)

    Andrebbe bene anche un ciclo.

    Grazie
  • Re: Somma matrici

    Una soluzione più generale potrebbe consistere nell'incapsulare il ciclo for che hai definito all'interno di un ciclo for che iteri sulle righe della matrice B.

    Dal momento che si conosce in anticipo la dimensione finale della matrice di output, conviene inizializzarla (associargli la corrispettiva quantità di memoria) prima di eseguire i cicli for.

    In questo caso, i valori calcolati vengono opportunamente inseriti nella matrice di output ad ogni iterazione, calcolando l'offset delle colonne ad ogni iterazione.

    E' anche utile inserire un controllo sul numero di colonne di A e B.
    
    % Get the number of rows and columns of A and B
    [row_a,col_a]=size(A)
    [row_b,col_b]=size(B)
    % Check for the consistency of the matrices A and B
    if(col_a ~= col_b)
       disp('Error: the number of columns of A and B must be the same')
       return
    end
    % Initialize the output matrix
    AA_=nan(row_a,col_a*row_b);
    % Assign the values to the output matrix
    for i=1:row_b
       for j=1:col_b
          AA_(:,(j+(i-1)*row_a))=A(:,j)-B(i,j);
       end
    end
    
    
Devi accedere o registrarti per scrivere nel forum
3 risposte