2016-12-07 197 views
0

我們正在爲datacommunications進行分配,我們必須在matlab中聲明一個嵌套函數句柄。 我們對matlab如何處理這個問題做了一些測試,但沒有任何效果。Matlab嵌套函數句柄

這是其中一個測試:

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

通過該測試的matlab給出了一個未定義的函數或變量x。 我們需要做些什麼來解決這個問題?

親切的問候

全碼:

[~, 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)); 

錯誤:

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(); 

回答

4

你要通過實際值d。問題是您傳遞給dx未定義。匿名函數本身沒有問題。

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

d(1, 2) 
% 3 

如果你想使用xu爲輸入d,你需要定義它們

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

我明白了,但是當我想通過函數d(X,U)一般來說就是一個積分,例如,它給出了相同的錯誤。這只是一個測試,我會編輯我的主要問題,並在出現錯誤的地方添加「主」代碼。 – Joachim

+4

@Joachim我認爲你想要實現的是使用符號變量,你不能只將未聲明的變量的值傳遞給函數,關於[符號變量]的更多信息(https://de.mathworks.com/help /symbolic/syms.html) – Umar

+0

究竟是什麼問題。你做了我的一天,謝謝! – Joachim