Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab积分函数&;循环中的函数句柄_Matlab_Loops_Integral_Function Handle - Fatal编程技术网

Matlab积分函数&;循环中的函数句柄

Matlab积分函数&;循环中的函数句柄,matlab,loops,integral,function-handle,Matlab,Loops,Integral,Function Handle,“Outliers.m”是从更高级别的.m文件调用的。这些变量都在更高级别的文件中定义,并设置为全局变量以供Outliers.m访问。代码的目的是使用Chauvenets准则识别异常值,为此,我必须使用积分函数和函数句柄计算guassian分布的积分。当我输入特定变量作为测试时,代码可以工作并给出合理的值,但我无法让它在循环中工作。我的数据集由7个单独的样本组成,每个样本为1x30,所有样本都需要分析。我有各种各样的错误,通读了有关积分和函数句柄的指导,但似乎找不到解决方案…非常感谢任何帮助或指

“Outliers.m”是从更高级别的.m文件调用的。这些变量都在更高级别的文件中定义,并设置为全局变量以供Outliers.m访问。代码的目的是使用Chauvenets准则识别异常值,为此,我必须使用积分函数和函数句柄计算guassian分布的积分。当我输入特定变量作为测试时,代码可以工作并给出合理的值,但我无法让它在循环中工作。我的数据集由7个单独的样本组成,每个样本为1x30,所有样本都需要分析。我有各种各样的错误,通读了有关积分和函数句柄的指导,但似乎找不到解决方案…非常感谢任何帮助或指导。。。。这是我的密码:

n = 7
for x = 1:n
    for y = 1:30
    z(x,y) = abs((cc(x,y) - mastercc(1,y))/masterccstd(1,y));
    xmax(x,y) = mastercc(1,y)+z(x,y)*masterccstd(1,y);
    xmin(x,y) = mastercc(1,y)-z(x,y)*masterccstd(1,y);
    p(x,y) = 1/(masterccstd(1,y)*(sqrt(2*pi)));

    fun(x,y)= @(x,y,z) (exp(-1/2)*z(x,y).^2);
    q(x,y) = integral(fun(x,y),xmin(x,y),xmax(x,y),'ArrayValued',true);

    pq(x,y) = p(x,y)*q(x,y); % probability
    value(x,y) = n*(1/pq(x,y));
    count(x,y) = logical(value(x,y) <0.5);
    badbins(x)=sum(count(x,:));
    end
end
n=7
对于x=1:n
对于y=1:30
z(x,y)=abs((cc(x,y)-mastercc(1,y))/masterccstd(1,y));
xmax(x,y)=mastercc(1,y)+z(x,y)*masterccstd(1,y);
xmin(x,y)=mastercc(1,y)-z(x,y)*masterccstd(1,y);
p(x,y)=1/(主ccstd(1,y)*(sqrt(2*pi));
fun(x,y)=@(x,y,z)(exp(-1/2)*z(x,y)。^2;
q(x,y)=积分(fun(x,y),xmin(x,y),xmax(x,y),'arrayvalue',真);
pq(x,y)=p(x,y)*q(x,y);%可能性
值(x,y)=n*(1/pq(x,y));

计数(x,y)=逻辑(值(x,y)您的错误似乎是由无效的函数定义引起的

如果您这样尝试,应该可以:

fun = @(x,y,z) (exp(-1/2)*z(x,y).^2)
现在可以这样称呼它,例如:

fun(1,2,magic(4))

环路问题的解决方案,由Andrei Bobrov通过Matlab Central提供,链接如下:


注意:请注意,代码并不完全符合我在问题描述中解释的目的,但它确实解决了循环错误。

您的问题是什么?如果您遇到错误消息,请说明确切的消息,它发生在哪一行,并描述相关变量。嗨,丹尼斯-抱歉,忘了输入错误!这里是:使用@(x,y,z)(exp(-1/2)。*z(x,y)。^2)输入参数不足。异常值错误(第30行)q(x,y)=整数(fun(x,y),xmin(x,y),xmax(x,y),'ArrayValued',true);主直径错误(第46行)离群值为什么要打开
'arrayvalue'
选项并将其设置为
true
?从我所看到的情况来看,函数
fun
的输出是一个标量,不是吗?但是从下面的注释来看,您甚至可能没有使用此代码。您是否正确定义、传递和调用了函数句柄?:
fun=@(z)exp(-1/2)*z.^2;
q(x,y)=积分(fun(z(x,y)),xmin(x,y),xmax(x,y));
@horchler-结果应该是7x30双精度,因为我需要称为“cc”的7x30双精度中每个数据点的概率。我已经运行了上述原始代码,但替换了建议的两行代码,并得到了一个新错误:“使用积分时出错”(第83行)第一个输入参数必须是函数句柄。异常值中的错误(第30行)q(x,y)=整数(fun(z(x,y)),xmin(x,y),xmax(x,y));“有趣的是,'fun'在工作区中显示为函数句柄(由:isa(fun,'function_handle')=1确认)我将函数句柄替换为:fun=@(x,y,z)(exp(-1/2)*z(x,y)。^2);和积分函数:q(x,y)=积分(fun(x,y,z),xmin(x,y),xmax(x,y),'arrayvalue',true);并且它出现了相同的错误….@GingerMonster如果出现错误,请使用
dbstop运行它,并描述您试图在代码停止的行上输入哪些变量。错误停止在“integral”行,并返回函数句柄“fun”。此时的变量为:x=1 y=1 z=0。2502 xmax=1.9428 xmin=1.9104如果有帮助,下面是相同的代码,但没有循环,变量替换为常量:n=7;z=abs(4.3794-1)/1;xmax=1+z*1;xmin=1-z*1;p=1/(1*2.5066);fun=@(z)exp(-1/2*z.^2);q=integral(fun,xmin,xmax);pq=p*q;值=6*1/pq;计数=逻辑(value@GingerMonster您在此评论中发布的函数对我来说运行没有问题。如果您不是这样,请重新启动matlab并重试。--我认为您可能要求
integral
做一些它做不到的事情。请尝试踩踏
help integral
,然后从一个小问题开始,然后从那里开始构建。只是为了合作nfirm,re:您可以毫无问题地运行的代码,是有循环的还是没有循环的代码?我已经重新启动了matlab,没有乐趣(在循环中运行)。我已经阅读了有关Integral和FunctionHandles的帮助(多次!)。感谢您迄今为止的帮助和时间-希望解决方案很快就会出现!