4

我正在寻找整合这个表达式:

正态分布函数:

但是,我似乎在设置该功能时遇到了问题。如MATLAB 说明中所述,我定义了一个名为“NDfx.m”的单独函数,如下所示:

    function [ y ] = NDfx(x)
    
    y = (1/sqrt(2*pi))*exp(-.5*x^2); % Error occurs here
    
    end

但是,当我在我的 main 函数中调用它时,我在上面的注释行中得到一个错误。我的主要功能如下所示:

function[P] = NormalDistro(u,o2,x)

delta = x-u;
dev = abs((delta)/o2);           % Normalizes the parameters entered into function
P_inner = quad(@NDfx,-dev,dev);  % Integrates function NDfx from -dev to dev (error here)
P_outer = 1 - P_inner;           % Calculation of outer bounds of the integral

if delta > 0
    P = P_inner + (P_outer/2);
    
elseif delta < 0
    P = P_outer/2;

elseif dev == 0
    P = .5;
    
end
end

我得到的具体错误是:

==> mpower 中的错误

输入必须是标量和方阵

4

2 回答 2

5

您已正确设置所有内容以进行集成。错误在于函数本身的定义。将变量用于将被集成的函数时,“.” (句点)必须在运算符之前,例如^*当它们应用于变量时:

function [y] = NDfx(x)

    y = (1/sqrt(2*pi))*exp(-.5*(x.^2));

end
于 2011-02-24T04:44:05.740 回答
0

Krono 和 user57368 是正确的。他们已经正确回答了您的实际问题。我的回答只是回答你没有问的问题。也就是说,你为什么在这里使用 quad 呢?关键是很多人都想集成那种形式的功能,而且已经做到了!使用现有工具来解决您的问题,因为这些工具通常是由知道如何准确有效地解决问题的人编写的。

在这种情况下,现有工具由函数 erf 和 erfc 组成。它们为您的问题提供准确、高效、矢量化的解决方案。您唯一需要做的就是弄清楚如何将这些积分转换为您当前的问题,通过简单缩放输入到 erf 和输出来完成。

于 2011-02-24T11:27:25.777 回答