2016-06-20 2 views
0

Wenn ich Schritt (sys, x) in einem Skript nach dem Erstellen eines Systemobjekts verwenden, wird die Gesamtheit von x als Vektor zu StepImpl anstelle von Beispiel für Beispiel übergeben Eingang. Wenn ich andererseits Schritt (sys, s) ausführe, wobei s ein Skalar ist, und diese Codezeile iteriert, wird der Status von 'sys' bei jedem Aufruf von Schritt zurückgesetzt.Eingabe von stepImpl ist das gesamte Array bei Verwendung von Schritt in einem Skript

Zum Beispiel:

SFTRLS_obj = SFTRLS; 
for i = 1 : N 
    step(SFTRLS_obj,d_dx(i),dx(i)); 
end 

Was ist der richtige Weg, um ein System-Objekt in einem Skript zu verwenden und ‚propagieren‘ Eingangsabtastwerte auf das Systemobjekt?

Antwort

0

Sie sollten Iterationsschleife selbst haben und Schritt in der Iterationsschleife aufrufen. Sie sollten Funktionen verwenden, wenn Sie Code mit Systemobjekten wiederverwenden möchten. Innerhalb der Funktion sollten Sie Systemobjekte als persistent deklarieren und einmalig erstellen, wie im folgenden Code gezeigt. Dadurch werden die Systemobjekte einmal erstellt und die Status in jedem Aufruf bleiben erhalten.

function y = useSystemObjects(u) 

persistent obj 
if isempty(obj) 
    % Create System object once 
    obj = MySystemObject; 
end 

y = step(obj, u); 

% der obigen Funktion von MATLAB-Kommandozeile

data = rand(100,1); 
y = zeros(100,1); 
for n=1:100 
    y(ii) = useSystemObjects(data(ii)); 
end 

Verwendung Wenn Sie Skripte verwenden, wird das Objekt in jedem Aufruf an das Skript neu erstellt zu werden, die die Zustände zerstört.

+0

Ich erstellte mein Objekt außerhalb der Schleife und Schleife über die Funktion "Schritt", aber Staaten nicht gehalten die Werte, als ich den Debugger überprüft. Ich habe definitiv nicht die Konstruktorfunktion des Objekts durchlaufen. –

+0

Können Sie einen Beispielcode posten? – Navan

+0

Siehe bearbeitete Frage. Ich dachte nur, es war ziemlich offensichtlich, was ich meinte. –

Verwandte Themen