【问题标题】:Matlab nested function handleMatlab 嵌套函数句柄
【发布时间】:2016-12-07 14:18:48
【问题描述】:

我们正在处理一项数据通信任务,我们必须在 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
int_gran=@(delta,i) int(f,u,q(i)-delta/2,q(i)+delta/2);
s_gran=@(delta) symsum(int_gran(delta,i),i,0,M);

%OVERLOAD
s_ol=@(delta) int(@(u)f(u,1),u,-inf,q(1)-delta/2)+int(@(u)f(u,M),q(m)+delta/2,inf);

%GKD
s_e=@(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)
            s_e=@(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();

【问题讨论】:

    标签: matlab function nested handle


    【解决方案1】:

    您必须将实际值传递给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)
    

    【讨论】:

    • 我明白,但是当我想将函数 d(x,u) 一般传递给例如积分时,它会给出相同的错误。这只是一个测试,我将编辑我的主要问题并在我们得到错误的地方添加“主要”代码。
    • @Joachim 我认为您要实现的是使用符号变量,您不能只将未声明变量的值传递给函数,有关symbolic variables here 的更多信息
    • 问题出在哪里。你让我开心,谢谢!