1

我要构建的功能是:

function y = myfunction(data, @f1, @f2, @f3, @f4)
%Fit data using f1,f2,f3,f4 such that data ~ af1+bf2+cf3+df4
end

data数组在哪里。用户将定义f1, f2, f3,f4选择四个功能sin(x), cos(x), ln(x), 1/x, tan(x), tanh(x), 1/ln(x)... 等。

我的目标是拟合data一个函数,使得,系数af1+bf2+cf3+df4在哪里。a,b,c,d问题是我不知道如何将函数作为输入传递并在myfunction. 我怎样才能做到这一点?一个小例子就足够了。

4

3 回答 3

3

您只需将它们设为标准参数,就像使用任何其他参数一样

function y = myfunction(data, f1, f2, f3, f4)
    % ...
end

这些参数是类型变量function_handle(只要您实际传递函数句柄)。要使用一组函数句柄调用此函数,您可以

f1 = @sin; f2 = @cos; f3 = @ln; f4 = @(x)1/x;
myfunction(data, f1, f2, f3, f4);

要创建另一个对所有四个结果求和的匿名函数,您可以

fTotal = @(x)f1(x) + f2(x) + f3(x) + f4(x);

请参阅匿名函数了解更多信息。

于 2013-05-26T09:38:01.980 回答
3

像这样:

function y = myfunction(data, f1, f2, f3, f4)
  fprintf('f1(2) = %d\n', f1(2) );
  fprintf('f2(10) = %d\n', f2(10) );
  fprintf('f3(1) = %d\n', f3(1) );
  fprintf('f4(0.1) = %d\n', f4(0.1) );
end

myfunction(@sin, @cos, @ln, @tan);
myfunction(@cos, @sin, @tanh, @ln);

我刚刚myfunction打印了一些随机值作为演示。

请注意以下事项:

  • 要将函数传递给myfunction,我使用了函数句柄:@sin
  • myfunction 不需要符号的参数@:它们只是普通变量。
  • 一旦你有了一个存储函数句柄的变量,你就可以像函数一样“调用”该变量:f1(x)
于 2013-05-26T09:38:18.840 回答
1

你传递它们就像传递任何其他对象一样。'@' 仅在定义匿名函数时才需要,而不是在它们作为参数传递时。

function y = myfun1(data, f1);
   y = f1(data);
end

f = @(x)(1./x);
d = 1:4;

disp( myfun1(d, f) );

会给你

1.0000    0.5000    0.3333    0.2500

并将其扩展到更多功能很简单。

于 2013-05-26T09:38:29.060 回答