2016-12-07 8 views
0

matlabでネストされた関数ハンドルを宣言する必要があるデータ通信の割り当てに取り組んでいます。 私たちはmatlabがこれをどのように処理するかについていくつかのテストを行いましたが、何も動作しません。Matlabのネストされた関数ハンドル

これはテストのいずれかです。このテストMATLABに

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

は、未定義の関数や変数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実際の値を渡す必要があります。問題は、dに渡すxが定義されていないことです。匿名関数自体に問題はありません。

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

d(1, 2) 
% 3 

あなたはdへの入力としてxuを使用したい場合は、あなたがそれらを

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

関連する問題