2017-12-12 1 views
0

Ich spare Koeffizienten aus mehreren Regressionen und möchte später alle verschiedenen vorhergesagten Werte gleichzeitig auswerten. Dieses spezielle Codebeispiel wird eine Menge heißen, also möchte ich, dass es so schnell und effizient wie möglich ist. Die Idee ist, dass ich ein Objekt haben, wo, sagenMatlab wertet mehrere Funktionen am selben Punkt aus

F{1} = @(x) 0.5 + 1*x 
    F{2} = @(x) 0.3 + .4*x 

Nun würde Ich mag zum Beispiel bewerten F (5) und erhalte 5,5 und 2,3 als mein Ergebnis, ohne F {1} (5) und F {2} (5) zu machen.

+0

Mögliche doppelte: [ Wie man mehrere Anweisungen in einem MATLAB ausführt anonyme Funktion?] (https://stackoverflow.com/q/558478/52738) – gnovice

Antwort

1

Ihre zwei Funktionen:

F{1} = @(x) 0.5 + 1*x; 
F{2} = @(x) 0.3 + .4*x; 

% create another anonymous function which calls both F{1} and F{2} 
FF = @(x) [F{1}(x) F{2}(x)]; 

FF(5) 

gibt Ihnen die Ausgabe:

[5.5 2.3] 

bearbeiten

Wenn Sie etwas ein bisschen klüger Sie eine normale Funktion für die verwenden könnte "Sammlung", mit der Sie ein bisschen mehr tun können:

function test_function 
    F{1} = @(x) 0.5 + 1*x; 
    F{2} = @(x) 0.3 + .4*x; 

    result = collectorFunction (5, F{:}) 

end 
function output = collectorFunction (x, varargin) 
    output = zeros(nargin-1,1); 
    for ii=2:nargin 
    output(ii-1) = feval(varargin{ii-1}, x); 
    end 
end 

Ergebnis

5.5 
2.3 

Dann, wenn Sie die Kollektorfunktion eines anderen F{3} beispielsweise hinzufügen, wird automatisch die Ergebnisse sammeln:

function test_function 
    F{1} = @(x) 0.5 + 1*x; 
    F{2} = @(x) 0.3 + .4*x; 
    F{3} = @(x) 1.3 + .3*x;    % Simply ADD a new F{N}.... 

    result = collectorFunction (5, F{:}) 

end 
function output = collectorFunction (x, varargin) 
    output = zeros(nargin-1,1); 
    for ii=2:nargin 
    output(ii-1) = feval(varargin{ii-1}, x); 
    end 
end 

Ergebnis:

5.5 
2.3 
2.8 
+0

Ja, danke, ich habe darüber nachgedacht, und es ist eigentlich meine aktuelle Arbeit. Ich habe gerade festgestellt, dass dies relativ langsam umzusetzen ist. Dies kann auch nicht leicht mit einer variierenden Anzahl von Eingaben umgehen. – Immo

+0

Aktualisiert, damit die * Sammlung * dynamisch mehrere Funktionen verarbeiten kann – matlabgui

Verwandte Themen