2010-02-01 8 views
5

Peut-être une question très facile, mais je cherche déjà des heures sur Internet pour la réponse, mais je ne peux pas le trouver.matrice en tant que sortie d'une fonction

J'ai créé la fonction ci-dessous. Dans un autre fichier m, je veux utiliser la matrice 'actual_location'. Cependant, il n'est pas possible d'utiliser une cellule individuelle de la matrice (c'est-à-dire actual_location (3,45) ou actual_location (1,2)). Lorsque j'essaie d'utiliser une cellule individuelle, j'obtiens l'erreur suivante: ??? Error using ==> Actual_Location Too many input arguments.

Quelqu'un peut-il me dire ce que je dois changer, de sorte que je puisse lire des cellules individuelles de la 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

Où/comment utilisez-vous emplacement_réel? –

+0

J'utilise actual_location dans un autre fichier m pour quelques calculs faciles. (additions et soustractions) Je l'ouvre dans l'autre fichier m avec le code suivant: 'Actual_Location' – Daan

Répondre

1

Comme vous l'avez défini, le nom dans le m-fichier pour la matrice écrite par votre fonction Actual_Location est actual_location. Cependant, lorsque vous appelez votre fonction, vous pouvez donner à la sortie le nom que vous voulez. Je présume que vous appelez comme ça, se rappelant que Matlab est un cas sensible bits:

actual_location = Actual_Location(arguments); 

Vous écrivez simplement de vous confondre. Utilisez un autre nom que actual_location pour l'argument factice dans la définition de la fonction, et appeler la fonction de revenir à une variable avec un nom plus distincte, quelque chose comme ceci:

output = Actual_Location(arguments); 

Il semble que vous attend peut-être actual_location (1,1) pour renvoyer l'élément 1,1 d'un tableau, alors qu'il s'agit probablement d'un appel de fonction avec 2 arguments d'entrée.

+0

matlab n'est pas sensible à la casse par rapport aux noms de fonctions. donc si on a une fonction appelée 'foobar', on peut l'appeler comme' fOoBaR' ou 'FOObAr', etc. aussi, une fois qu'on a appelé une fonction, dite appelée' Actual_Location', l'interpréteur matlab va interpréter 'actual_location (.. .) 'comme un appel à cette fonction, entraînant l'erreur nargin. honte à M/W d'utiliser '()' pour l'indexation de la matrice. – shabbychef

+2

Matlab est sensible à la casse. Il cherchera d'abord une correspondance exacte, puis ira chercher des correspondances inexactes (en lançant un avertissement pour l'instant, mais une erreur dans une prochaine version). En outre,() pour l'indexation matricielle est cohérent, car l'accès à une matrice appelle une fonction (subsref, subsasgn) qui peut être surchargée. – Jonas

1

Cela semble indiquer que vous appelez la fonction Actual_Location avec de nombreux arguments ... Je réécris votre code avec une indentation correcte.

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 
Questions connexes