我有这个gaussian2 m文件:
function [g] = gaussian2(t, tau)
g = (1/sqrt(2*pi)) .*(1/tau) .* exp(- (t .^2) / (2 * tau^2));
end
我想创建RMStau的另一个函数m文件:
sqrt( integral( @(t) t.^2 .* gaussian2(t,tau), -inf, inf ) / integral( @(t) gaussian2(t,tau), -inf, inf ))
如何将RMStau m文件作为高斯2输入的函数? 感谢
答案 0 :(得分:0)
您可以像这样传递
@(t) gaussian2(t, 5.5)
然后在RMStau中使用它作为z(t)
,因为它只需要一个参数t。
另一种方法是使用varargin
,它允许您将任何其他参数传递给内部函数。那么你会做
function [anstau] = RMStau(z, varargin)
anstau = sqrt( quad( @(t) t.^2 .* z(t, varargin{:}), -inf, inf ) / quad( @(t) z(t, varargin{:}), -inf, inf ));
end
您可以使用RMStau(@(t, tau) gaussian2(t, tau), 5.5)
调用它。您可能希望使用varargin
的原因是您还可以使用名称而不是函数句柄来传递函数。然后它看起来像这样
function [anstau] = RMStau(z, varargin)
anstau = sqrt( quad( @(t) t.^2 .* feval(z, t, varargin{:}), -inf, inf ) / quad(@(t) feval(z, t, varargin{:}), -inf, inf ));
end
RMStau(@(t, tau) gaussian2(t, tau), 5.5)
和RMStau('gaussian2', 5.5)
都可以使用。