2010-02-01 5 views
5

Forse una domanda molto semplice, ma sto già cercando ore su Internet per la risposta ma non riesco a trovarlo.come uscita di una funzione

Ho creato la funzione qui sotto. In un altro m-file voglio usare la matrice 'actual_location'. Tuttavia, non è possibile utilizzare una singola cella della matrice (ad esempio posizione_tuale (3,45) o posizione_cuale (1,2)). Quando provo a utilizzare una singola cella, viene visualizzato il seguente errore: ??? Error using ==> Actual_Location Too many input arguments.

Qualcuno può dirmi per favore cosa devo cambiare, in modo da poter leggere le singole celle della matrice?

function [actual_location] = Actual_Location(~); 
actual_location=zeros(11,161); 
for b=1:11 
    for t=1:161 
     actual_location(b,t) = (59/50)*(t-2-(b-1)*12)+1; 
     if actual_location(b,t) < 1 
      actual_location(b,t) =1; 
     end  
    end 
    actual_location(1,1) 
end 
+0

dove/come stai utilizzando actual_location? –

+0

Sto usando actual_location in un altro m-file per alcuni semplici calcoli. (aggiunte e sottrazioni) L'apro nell'altro m-file con il seguente codice: 'Actual_Location' – Daan

risposta

1

Come è stato definito, il nome nel M-file per la matrice scritto da vostra funzione Actual_Location è actual_location. Tuttavia, quando chiami la funzione puoi dare all'output qualsiasi nome che ti piace. Presumo che si sta chiamando in questo modo, ricordando che Matlab è un po 'tra maiuscole e minuscole:

actual_location = Actual_Location(arguments); 

Si sono appena scrivendo a confondere te stesso. Utilizzare un nome diverso da actual_location per l'argomento fittizio nella definizione della funzione, e chiamare la funzione di tornare a una variabile con un nome più distinta, qualcosa di simile:

output = Actual_Location(arguments); 

Sembra che si potrebbe essere in attesa actual_location (1,1) per restituire l'elemento 1,1 di un array, mentre è, probabilmente, una chiamata di funzione con 2 argomenti di input.

+0

matlab non è case-sensitive rispetto ai nomi di funzioni. quindi, se si ha una funzione chiamata 'foobar', si può chiamarla' fOoBaR' o 'FOObAr', ecc. inoltre, una volta che si è chiamata una funzione, si chiami' Actual_Location', l'interprete matlab interpreterà 'actual_location (.. .) 'come una chiamata a quella funzione, causando l'errore nargin. vergogna su M/W per l'uso di '()' per l'indicizzazione della matrice. – shabbychef

+2

Matlab è di tipo case-sensitive. Prima cercherà una corrispondenza esatta, quindi andrà a verificare le corrispondenze inesatte (per ora lancia un avviso, ma un errore in una versione futura). Inoltre,() per l'indicizzazione della matrice è coerente, perché l'accesso a una matrice chiama una funzione (subsref, subsasgn) che può essere sovraccaricata. – Jonas

1

Questo sembra suggerire di chiamare la funzione Actual_Location con molti argomenti ... Sto riscrivendo il codice con il rientro corretto.

function [actual_location] = Actual_Location() 
    actual_location=zeros(11,161); 
    for b=1:11 
    for t=1:161 
     actual_location(b,t) = (59/50)*(t-2-(b-1)*12)+1; 
     if actual_location(b,t) < 1 
     actual_location(b,t) = 1; 
     end 
    end 
    actual_location(1,1) 
    end