首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入参数未定义- MATLAB函数/子函数

输入参数未定义- MATLAB函数/子函数
EN

Stack Overflow用户
提问于 2011-04-17 13:54:11
回答 2查看 2.1K关注 0票数 1

我正在为我在MATLAB中的工作测试一个函数的一部分。我定义了一个函数和子函数,如下所示(仅用于测试):

代码语言:javascript
复制
function funct
clear all;
clc;
I = rand(11,11);
ld = input('Enter the lag = ') % prompt for lag distance
A = nlfilter(I, [7 7], @dirvar);

% Subfunction
function [h] = dirvar(I, ld) %tried with function [h] = dirvar(I) as well, 
                             %but resulted in same error
c = (size(I)+1)/2
EW = I(c(1),c(2):end)
h = length(EW) - ld

当我以funct身份在命令窗口中运行函数时,我得到以下错误:

代码语言:javascript
复制
Enter the lag = 1

ld =

     1


c =

     4     4


EW =

    0.0700    0.4073    0.9869    0.5470

??? Input argument "ld" is undefined.

Error in ==> funct>dirvar at 14
h = length(EW) - ld
Error in ==> nlfilter at 61
b = mkconstarray(class(feval(fun,aa(1+rows,1+cols),params{:})), 0, size(a));

Error in ==> funct at 6
A = nlfilter(I, [7 7], @dirvar);

ld被清晰地定义时,我不能弄清楚错误是什么以及在哪里!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-17 14:38:23

Chethan是正确的,因为nlfilter()只需要一个参数--所以您需要另一种方法来为dirvar()函数提供ld参数。

一种选择是将dirvar函数定义为调用函数中的嵌套函数。也就是说,

代码语言:javascript
复制
function funct
% ...
ld = input('Enter the lag = ') % prompt for lag distance
A = nlfilter(I, [7 7], @dirvar);

% Subfunction
    function [h] = dirvar(I)
        c = (size(I)+1)/2
        EW = I(c(1),c(2):end)
        h = length(EW) - ld
    end

end
票数 1
EN

Stack Overflow用户

发布于 2011-04-17 14:06:16

我没有图像处理工具箱,所以我不能自己检查,但看起来nlfilter需要一个只有一个参数的函数。尝试将调用更改为nlfilter,如下所示:

代码语言:javascript
复制
A = nlfilter(I, [7 7], @(x) dirvar(x,ld));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5691794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档