我正在尝试(优雅地)以函数方式对函数进行标准化,具体取决于传递给它的参数。下面的示例给出了一个Gaussian,它试图在函数内进行规范化但失败。
我知道我可以使用额外的几行代码来完成此操作,或者对于此示例进行分析规范化;我特别询问创建一个数字规范化的匿名函数:
x = linspace(-10,10,10000);
my_gauss = @(w) exp(-1/(2*w^2) * x.^2) / trapz((x(2)-x(1))*my_gauss(w));
答案 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));
这更加明确,并将功能分解为更多可以更好理解和测试的逻辑单元。此外,它可以处理随机间隔评估的函数。