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

Jam*_*rtz 4 matlab numerical-integration

我想整合这个表达式:

正态分布函数:

但是我似乎在设置功能时遇到了问题.正如 MATLAB解释中所述,我已经定义了一个名为'NDfx.m'的独立函数,如下所示:

    function [ y ] = NDfx(x)

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

    end
Run Code Online (Sandbox Code Playgroud)

但是当我在我的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
Run Code Online (Sandbox Code Playgroud)

我得到的具体错误是:

错误==> mpower

输入必须是标量和方阵

Jam*_*rtz 5

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

function [y] = NDfx(x)

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

end
Run Code Online (Sandbox Code Playgroud)

  • 需要的点,使得幂是每个元素的基础上进行,而不是试图提出一个矩阵到电源(操作``^从操作``^不同).这是必要的,因为数值积分器会将值向量传递给`NDfx`,并且函数需要单独应用于每个值,结果返回到与传入的形状相同的向量中.这是所谓的*向量化*函数,它比为每个需要评估的新值再次调用函数更有效. (4认同)