Function MATLAB Perché non funziona?

di il
2 risposte

Function MATLAB Perché non funziona?

Qualcuno mi spiega perché questa function per calcolare il prodotto fra matrici non funziona? Matlab mi da errore in questa riga ->RIS=RIS+A(i,j)*B(j,k);

function[C]=prodotto(A,B)
[n,m]=size(A);
[m,p]=size(B);
C=zeros(n,p);
for i=0:n
for j=0:m
RIS=0;
for k=0:p
RIS=RIS+A(i,j)*B(j,k);
C(i,j)=RIS;
end
end
end
end

Grazie mille a tutti in anticipo!

2 Risposte

  • Re: Function MATLAB Perché non funziona?

    Il problema è dovuto al fatto che, nella definizione dei cicli for fai partire l'indice da 0.

    In MatLab gli indici di vettori e matrici cominciano da 1.

    Eseguendo la tua funzione, MatLab dovrebbe aver generato il seguente mesaggi di errore:
    Attempted to access A(0,0); index must be a positive integer or logical.

    Error in prodotto (line 9)
    RIS=RIS+A(i,j)*B(j,k);
    Il suo "messaggio" è abbastanza chiaro.

    C'è un ulteriore errore nella funzione: il calcolo dell'i-esimo elemento della matrice prodotto deve essere:
    RIS=RIS+A(i,k)*B(k,j);
    e non
    RIS=RIS+A(i,j)*B(j,k);
    In oltre, ma questo non è un errore, puoi spostare l'assegnazione del valore dell'i-esimo elemento della matrice di output "C" al termine del ciclo for con indice "k".
    Devi modificare i cicli for come segure:
    function[C]=prodotto(A,B)
    [n,m]=size(A);
    [m,p]=size(B);
    C=zeros(n,p);
    % for i=0:n
    for i=1:n
       %    for j=0:m
       for j=1:m
          RIS=0;
          %       for k=0:p
          for k=1:p
             %          RIS=RIS+A(i,j)*B(j,k);
             RIS=RIS+A(i,k)*B(k,j);
             %          C(i,j)=RIS;
          end
          C(i,j)=RIS;
       end
    end
    end
    
    Hope this helps.
  • Re: Function MATLAB Perché non funziona?

    Grazie mille l'aiuto!
Devi accedere o registrarti per scrivere nel forum
2 risposte