【问题标题】:Error with function handles in a loop (Matlab)循环中的函数句柄错误(Matlab)
【发布时间】:2015-11-12 12:41:47
【问题描述】:

我正在尝试运行一个包含函数句柄的循环。如果我对 n 使用任何特定值,则代码运行良好。但是,当我尝试在循环中运行代码时,会出现错误:

Nonscalar arrays of function handles are not allowed; use cell
arrays instead. 

我对 MATLAB 比较陌生,所以在尝试了几个小时后,我的想法已经用完了......任何帮助将不胜感激。

代码如下

for m=1:N 
      for n=1:N 
         int(n) = @(w,s0,v,r,t) chfun_norm(s0,v,r,t,w(n)-(alpha+1)*1i)/(alpha^2 + alpha - w(n)^2 + 1i*(2*alpha+1)*w(n)); 
         int(n) = @(w)int(w,s0,v,r,t);
         g(n) = exp(1i*(b-log(s0))*w(n)-alpha*k(m)-r*t)*int(n)*pond(n); 
         g(n) = exp(-1i*2*pi/N*(n-1)*(m-1))*g(n); 
      end
y(m) =  real(sum(g))*stepw;
end

编辑

我已使用元胞数组重新构造循环,但现在出现以下错误

Undefined function 'mtimes' for input arguments of type 'function_handle'

以下是更新后的代码:

y = zeros(N,1);
intCell = {zeros(N,1)};
gCell = {zeros(N,1)};
 for m=1:N 
    for n=1:N 
        intCell{n} = @(w,s0,v,r,t) chfun_norm(s0,v,r,t,w(n)-(alpha+1)*1i)/(alpha^2 + alpha - w(n)^2 + 1i*(2*alpha+1)*w(n));
        intCell{n} = @(w)intCell{n}(w,s0,v,r,t);
        gCell{n} = exp(1i*(b-log(s0))*w(n)-alpha*k(m)-r*t)*intCell{n}*pond(n);
        gCell{n} = exp(-1i*2*pi/N*(n-1)*(m-1))*g(n); 
    end
 y(m) =  real(sum(g))*stepw;
 end

【问题讨论】:

    标签: matlab loops function-handle


    【解决方案1】:

    错误消息会告诉您确切的操作。如果不查看您的代码实际执行的操作,非标量数组(您的 int)不能保存函数句柄。您必须将多个函数句柄放在一个元胞数组中。它们能够保存不同类型和混合类型的数据。因此 int 需要是一个元胞数组。

    只需阅读如何在 Matlab 中使用元胞数组。

    在不相关的注释中,在具有更强类型的语言中,int 可能是一种类型,为了防止混淆,更改该变量的名称可能是合理的。

    编辑

    第二个错误可能是由第 8 行中的最后一个乘法引起的。您正在尝试乘以一个函数句柄。我想你想乘以所述函数的返回值?如果是这样,存储在 intCell 中的句柄引用的函数仍然需要参数才能执行,如第 6 和第 7 行。

    【讨论】:

    • 感谢您的回答。赞成。我已经使用单元阵列重新设计了循环。但是我仍然得到一个错误。如果您能进一步指导我,我很乐意接受您的回答
    • 我根据您的编辑编辑了我的答案。对您实际想要计算的内容进行一些描述可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多