2016-12-07 6 views
0

Wir arbeiten an einer Zuweisung für Datenkommunikation, wo wir eine Nested Function Handle in Matlab deklarieren müssen. Wir haben ein paar Tests gemacht, wie Matlab damit umgeht, aber nichts funktioniert.Matlab Nested Function Handle

Dies ist einer der Tests:

clear; 
f = @(x) x.^2; 
d = @(x,u) f(x) + u; 
disp(d(x,u)); 

Mit diesem Test Matlab gibt eine nicht definierte Funktion oder Variable x. Was müssen wir tun, um das zu beheben?

Mit freundlichen Grüßen

Voll Code:

[~, distr] = make_probability_functions(Quantization.filename); 
%distr is a matrix of certain values 

x_0 = 127.5; 
M = 8; 
delta= 10:1:30; 

q = @(i) x_0+(i-(M+1)/2); 

r = @(i) x_0+((2*i-M)*delta)/2; 

f = @(u,i) ((q(i)-u).^2)*distr(u); 

%GRANULAR 
[email protected](delta,i) int(f,u,q(i)-delta/2,q(i)+delta/2); 
[email protected](delta) symsum(int_gran(delta,i),i,0,M); 

%OVERLOAD 
[email protected](delta) int(@(u)f(u,1),u,-inf,q(1)-delta/2)+int(@(u)f(u,M),q(m)+delta/2,inf); 

%GKD 
[email protected](delta) s_gran(delta)+s_ol(delta); 

%plot GKD 
plot(delta,s_e(delta),delta,s_gran(delta),delta,s_ol(delta)); 

Fehler:

Undefined function or variable 'u'. 

Error in Quantization>@(delta,i)int(f,u,q(i)-delta/2,q(i)+delta/2) 

Error in Quantization>@(delta)symsum(int_gran(delta,i),i,0,M) 

Error in Quantization>@(delta)s_gran(delta)+s_ol(delta) (line 59) 
      [email protected](delta) s_gran(delta)+s_ol(delta); 

Error in Quantization.determine_optimal_uniform_quantizer (line 62) 
      plot(delta,s_e(delta),delta,s_gran(delta),delta,s_ol(delta)); 

Error in script_run (line 1) 
Quantization.determine_optimal_uniform_quantizer(); 

Antwort

4

Sie haben-dIstwerten zu übergeben. Das Problem ist, dass die x, die Sie an d übergeben, nicht definiert ist. Es gibt kein Problem mit den anonymen Funktionen selbst.

f = @(x) x.^2; 
d = @(x,u) f(x) + u; 

d(1, 2) 
% 3 

Wenn Sie x und u als Eingänge zu d verwenden möchten, müssen Sie sie

x = 1; u = 2; 
d(x, u) 
+0

Ich verstehe, definieren, aber wenn ich will die Funktion d (x, u) passieren im Allgemeinen zu einem Integral zum Beispiel gibt es den gleichen Fehler. Das war nur ein Test, ich werde meine Hauptfrage bearbeiten und den "Haupt" -Code hinzufügen, wo wir den Fehler bekommen. – Joachim

+4

@Joachim Ich denke, was Sie erreichen wollen, ist die Verwendung symbolischer Variablen, Sie können nicht nur den Wert nicht deklarierter Variablen an eine Funktion übergeben, weitere Informationen über [symbolische Variablen hier] (https://de.mathworks.com/help /symbolic/syms.html) – Umar

+0

Genau, was das Problem war. Du hast meinen Tag gemacht, danke! – Joachim