【问题标题】:create anonymous scalar function from existing vector functions in file从文件中的现有向量函数创建匿名标量函数
【发布时间】:2015-09-24 01:54:13
【问题描述】:

我想创建一个匿名函数,它采用 Matlab 文件中现有向量函数的第一个输出变量。例如,单独的 M 文件中现有的向量函数是

function [y1,y2] = myfun(x1)
    y1 = x1;
    y2 = x1^2;
end

是否可以从 myfun() 创建一个取 y1 值的匿名标量函数?感谢您的任何建议。


附:我这样做是因为实际上我的原始功能更像

function [y1,y2] = myfun(x1,x2)
    y1 = x1+x2;
    y2 = x1^2+x2^2;
end

我想创建一个只有一个参数 x1 的标量函数 y1(将 x2 的已知值传递给匿名函数)。

【问题讨论】:

  • @(x1) myfun(x1) 不能用于第一种情况,@(x1) myfun(x1,x2) 不能用于第二种情况?
  • 那么新函数仍然返回两个值。是否可以只返回 y1 或 y2?
  • 好吧,我尝试了我的建议,它只是返回了y1。很难让它返回y2。也许看看这个:stackoverflow.com/questions/3627107/…paren=@(x,varargin) x(varargin{:}) 然后fun=@(x1) paren(myfun(x1,x2),1) 得到y1fun=@(x1) paren(myfun(x1,x2),2) 得到y2。我尚未对其进行测试,但如果它有效,请将其添加为该问题的答案。
  • this question 与你想做的事情有关吗?
  • @David,感谢您的解决方案,它就像一个魅力。我需要做的唯一调整是将 y1 和 y2 组合成一个向量,否则匿名函数只会将 y1 作为输出

标签: matlab parameter-passing anonymous-function


【解决方案1】:

我想我知道您在寻找什么,但有点不清楚。如果您从这样的函数开始:

function [y1,y2] = myfun(x1,x2)
  y1 = x1+x2;
  y2 = x1^2+x2^2;
end

您可以使用固定值x2(固定为创建匿名函数时的任何变量)创建一个包装匿名函数,如下所示:

newFcn = @(x1) myfun(x1, x2);

现在,您可以使用它从myfun 获取您想要的两个输出中的任何一个。例如:

y1 = newFcn(x1);        % Gets the first output
[~, y2] = newFcn(x1);   % Gets the second output
[y1, y2] = newFcn(x1);  % Gets both

【讨论】:

  • 这并不能真正解决我的问题,但您指出的问题是相关的。该问题的另一个答案与大卫提供的答案相同,对我来说效果很好。谢谢。
【解决方案2】:

根据@David 的方法,我调整了我的代码,它运行良好。

function y = myfun(x1,x2)
    y1 = x1+x2;
    y2 = x1^2+x2^2;
    y = [y1 y2];
end

匿名函数 output1 和 output2 分别返回 y1 和 y2。

paren=@(y,varargin) y(varargin{:});
output1 = @(x1) paren(myfun(x1,x2), 1);
output2 = @(x1) paren(myfun(x1,x2), 2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多