我希望整合这个表达式:
但是我似乎在设置功能时遇到了问题。正如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
输入必须是标量和方阵
答案 0 :(得分:5)
您已正确设置所有内容以进行集成。错误在于函数本身的定义。当将变量用于将要集成的函数时,“。” (句点)在应用于变量时必须位于^
和*
等运算符之前:
function [y] = NDfx(x)
y = (1/sqrt(2*pi))*exp(-.5*(x.^2));
end
答案 1 :(得分:0)
Krono和user57368是正确的。他们已经正确回答了您的实际问题。我的回答只是回答你没有问过的问题。也就是说,为什么你在这里使用四核?关键是许多人想要整合该形式的功能,并且已经完成了!使用现有工具来解决您的问题,因为这些工具通常是由知道如何准确有效地解决问题的人编写的。
在这种情况下,现有工具由erf和erfc功能组成。它们为您的问题提供准确,高效,矢量化的解决方案。你唯一需要做的就是弄清楚如何将这些积分转换成你当前的问题,通过简单地将输入缩放到erf和输出来完成。