2016-04-28 6 views
1

Ich habe eine Funktion sagen wir sq_dist(). Diese Funktion kann wie folgt aufgerufen werden: sq_dist(a,b) oder sq_dist(a). Diese Funktion beinhaltet langsame Operationen und daher versuche ich, eine Mex-Version daraus zu machen, in der Hoffnung, dass es schneller läuft. Ich benutze dazu die Matlab Coder GUI. Um Eingabetypen zu definieren (im Eingabebildschirm definieren), verwende ich eine Funktion, die sq_dist(a,b) und sq_dist (a) aufruft, um die Eingabe automatisch zu bestimmen. Dies gibt mir einen Fehler: Error determining type for input sq_dist:b. Index exceeds matrix dimensions. Hier ist meine Funktion:Wie definiert man Eingangstypen in Matlab Coder für eine Funktion mit einer variierenden Anzahl von Eingaben?

n = 50; 
dim = 50; 
a = rand(n, dim); 
b = rand(n, dim); 

u = sq_dist(a, b); 
v = sq_dist(a); 

Also, da sq_dist kann auf verschiedene Arten aufgerufen werden Ich bin nicht sicher, wie seine Eingabe in den Coder zu definieren.

Wenn ich manuell die Eingabe zu double :inf x :inf für a und b die mex-Datei kompiliert wird, aber ich einen Laufzeitfehler erhalten: Function 'sq_dist' called with wrong number of arguments: expected 2, received 1.

Antwort

1

Kurz gesagt, Sie können nicht tun, was Sie (mit der aktuellen Version 2016a) tun wollen für die Top-Level-Funktion - diese muss eine definierte Anzahl von Ein- und Ausgängen haben. Auch wenn Sie den Parameter 'varargin' in der Funktionsdefinition verwenden, generiert MATLAB Coder die Funktion mit einer festen Anzahl von Eingaben basierend auf den von Ihnen angegebenen Beispielargumenten.

Wenn Sie eine bestimmte Funktion mit einer variablen Anzahl von Eingabeargumenten haben, können Sie eine Wrapper-Funktion (mit einer festen Anzahl von Eingabeargumenten) um die Außenseite legen und den Wrapper zur obersten Ebene machen.

Regeln hier: http://uk.mathworks.com/help/simulink/ug/rules-for-using-variable-length-argument-lists-for-code-generation.html

Verwandte Themen