如何在MATLAB中正确设置数值积分?

时间:2011-02-24 04:29:35

标签: matlab numerical-integration

我希望整合这个表达式:

Normal Distribution function:

但是我似乎在设置功能时遇到了问题。正如this 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

我得到的具体错误是:

  

==&gt;中的错误MPOWER

     

输入必须是标量和方阵

2 个答案:

答案 0 :(得分:5)

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

function [y] = NDfx(x)

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

end

答案 1 :(得分:0)

Krono和user57368是正确的。他们已经正确回答了您的实际问题。我的回答只是回答你没有问过的问题。也就是说,为什么你在这里使用四核?关键是许多人想要整合该形式的功能,并且已经完成了!使用现有工具来解决您的问题,因为这些工具通常是由知道如何准确有效地解决问题的人编写的。

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