在函数内进行数值标准化

时间:2016-01-14 20:55:03

标签: matlab function anonymous-function

我正在尝试(优雅地)以函数方式对函数进行标准化,具体取决于传递给它的参数。下面的示例给出了一个Gaussian,它试图在函数内进行规范化但失败。

我知道我可以使用额外的几行代码来完成此操作,或者对于此示例进行分析规范化;我特别询问创建一个数字规范化的匿名函数

x = linspace(-10,10,10000);
my_gauss = @(w) exp(-1/(2*w^2) * x.^2) / trapz((x(2)-x(1))*my_gauss(w));

1 个答案:

答案 0 :(得分:1)

优雅的解决方案与高效,清晰,正确的解决方案之间存在很大差异。 MATLAB没有内置的方法来规范化数组。

根据您提供的示例,您尝试对匿名函数执行过多操作,因此实际上并不是一般(不能处理非均匀采样等)。

我认为你最好创建两个匿名函数:一个用于执行规范化,另一个用于计算高斯函数:

x = linspace(-10, 10, 10000);

normalize = @(x, g)g ./ trapz(x, g);
gaussian = @(x, w)exp(-1 / (2 * w^2) * x.^2);

normalized_gaussian = normalize(x, gaussian(x, 10));

disp(trapz(x, normalized_gaussian))

    1

% Or if you want to provide a single anonymous function
ngaussian = @(x, w)normalize(x, gaussian(w));

这更加明确,并将功能分解为更多可以更好理解和测试的逻辑单元。此外,它可以处理随机间隔评估的函数。