2017-03-02 1 views
4

Matlab eingeführt für das ~ Zeichen in der Liste der Ausgabeargumente einiger Routine, um anzuzeigen, dass wir nicht an diesem Ausgabewert interessiert sind. Zum Beispiel:Erkennen, ob einige Ausgabeargumente nicht verwendet werden

Aus Gründen der Geschwindigkeit Optimierung, ist es möglich, von innen einige Routine zu erkennen, dass einige der Ausgabe Argumente nicht verwendet werden? Zum Beispiel:

function [y, z] = myroutine(x) 
%[ 
    if (argout(1).NotUsed) 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    ... 
%] 

Antwort

2

Es ist vielleicht nicht die beste sein, aber eine einfache Lösung ist ein weiteres Eingabeargument

function [y, z] = myroutine(x, doYouWantY) 
%[ 
    if doYouWantY == 0 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    ... 
%] 
+0

Ja das denke ich auch und das habe ich soweit umgesetzt .. wird für eine Weile nachsehen ob es unter der Haube einen Befehl gibt um deine Antwort zu validieren. – CitizenInsane

0

nargout Methode bearbeitet für die 2. Ausgabe. Allerdings ist dies keine sehr stabile Lösung, denn wenn Sie die Funktion mit einem Ausgabeargument aufrufen, müssen Sie sich bewusst sein, dass die Ausgabe nur das zweite Argument ist.

 function [y, z] = myroutine(x) 
    %[ 
    if nargout==1 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    %] 
+0

hier hinzufügen, ich bin interessiert in der Lage, Berechnungen für das erste Argument zu überspringen, nicht die zweiten (Ich bin nicht in der Lage, Ausgaben neu zu ordnen, müssen Aufrufsyntax beibehalten) – CitizenInsane

+0

(1) Es könnte auch funktionieren, legen Sie einfach das 'if' um das erste Argument anstelle der zweiten. (2) Könnten Sie einfach eine andere Klasse eingeben? Wenn es normalerweise ein Skalar ist, geben Sie einen String ein und überprüfen Sie zum Beispiel 'iString'. (3) fügt ein zusätzliches Eingabeargument hinzu, das wahr oder falsch ist, abhängig davon, ob Sie diesen Teil des Codes berechnen möchten oder nicht. –

Verwandte Themen