制作一个函数文件,从Matlab中的另一个文件调用一个函数

时间:2016-04-08 08:20:30

标签: matlab function

我有这个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输入的函数? 感谢

1 个答案:

答案 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)都可以使用。