2016-05-21 13 views
-1

Ich bin ein neuer Benutzer von Matlab und Stackoverflow. Ich fragte question über, wie man Indikatorfunktion f schreibt, die Frage war wie folgt:Kann mir jemand sagen, wie man Indikatorfunktion für Vektoreingabe in Matlab schreibt?

"f sollte eine anonyme Funktion sein wie f = @ (t) 1 [0,0.25) (t). Jedoch die Zahl Die Anzahl der Intervalle für die stückweise konstante Funktion ist im Allgemeinen nicht festgelegt. Stattdessen hängt das stückweise Intervall von der Benutzereingabe ab. "

Ich bin froh, dass einige Benutzer meine Frage beantwortet haben. Die solution beantwortet ist wie folgt:

%defines weight vector. for example: a1=1, a2=2, a3=3, a4=4,a5=5 
A = 1:5; 
%defines a range vector 
ranges = [0:(1/length(A)):1,inf]; 

%The padding is for handling cases where t<0 or t>=1 

APadded = [0,A,0]; 
[email protected]*(t)APadded(find(t < ranges,1,'first')); 

Result 
f(0.1) = 1, f(0.3) = 2, f(0.5) = 3, f(0.7) = 4, f(0.9) = 5, f(-0.1) = f(1.1) = 0; 

ich die Codes ein wenig erweitern möchten. Wenn ich zum Beispiel @ (X) sun (X) definiere, wenn die Eingabe von X ein Vektor ist, gibt es die Ausgabe als Vektor an. Die obige Lösung für das Indikatorergebnis gilt jedoch nicht. Man kann versuchen, f ([0.1 0.3 0.5 0.7 0.9]), was nicht 1, 2, 3, 4, 5

Wie dieses Problem zu lösen, so dass selbst wenn die Eingabe ein Vektor ist, wird es richtig geben Ergebnis?

Antwort

0

Verwendung Matlab arrayfun Funktion auf die Funktion erstellt f:

[email protected](t)arrayfun(f,t); 

Ergebnis:

f2([-0.1, 0.1,0.3,0.5,0.7,0.9,1.1]) 

ans = 

0  1  2  3  4  5  0 

Vollcodebeispiel:

%defines weight vector. for example: a1=1, a2=2, a3=3, a4=4,a5=5 
A = 1:5; 
%defines a range vector 
ranges = [0:(1/length(A)):1,inf]; 

%The padding is for handling cases where t<0 or t>=1 
APadded = [0,A,0]; 
[email protected](t)APadded(find(t < ranges,1,'first')); 
[email protected](t)arrayfun(fTemp,t); 
+0

Dank. Gibt es eine Möglichkeit, sich an die anderen Benutzer zu wenden? –

Verwandte Themen