【问题标题】:Convert function in Matlab into appropriate form将 Matlab 中的函数转换为适当的形式
【发布时间】:2013-08-16 01:10:02
【问题描述】:

我编写了一个函数feval,它接受两个参数并输出一个数字。

现在我想使用命令integral2 来集成我的函数feval(x,y)

问题似乎是integral2 认为我有一个可以将两个数组作为参数并对其应用成对操作的函数。不幸的是,这种情况并非如此。我的函数只能与 2 个数字一起使用,而不能与完整数组一起使用。是否有任何标准方法可以使这项工作?

实际上,这是我现在的代码,MATLAB 声称 q = 积分2(@(x,y) arrayfun(func_cross_scat,x,y),0,2*pi,0,pi); 我的函数(feval,我重命名为 func_cross_scat 没有获得足够的输入参数)

【问题讨论】:

  • (1) 您可以创建一个包装函数,该函数将为更大数组中的所有值调用您的函数 (2) 您可以在可能的情况下使用. 命令(矢量化)
  • @TryHard 你介意对这个错误采取很多措施吗?

标签: matlab function math


【解决方案1】:

Feed integral2 不是 feval,而是 feval_wrapper 定义为

feval_wrapper = @(x,y) arrayfun(feval, x, y)

xy 现在可以是数组(大小相同)。这是因为arrayfun 为输入数组xy 的每一对元素调用feval 并给出一个数组作为结果。

作为旁注,“feval”可能不是您的函数的好名字,因为 Matlab 有一个内置的 feval

【讨论】:

  • 抱歉出现问题
  • 是的,正如我在最初的问题中所包含的那样。 matlab 现在说,该函数根本没有任何参数。你确定你不需要在那里写参数吗? (你刚刚写了arrayfun(feval,x,y),也许有人必须写一些东西表明feval本身有参数(x,y)。但我不确定这一点。因此我只是想问你是否完全确定您的答案?
  • @Lipschitz 如果您阅读 Luis Mendos 的回答,他解释说您不应该使用“feval”这个名称,因为这会导致混淆。改用 feval_wrapper = @(x,y) arrayfun(myfunction, x, y)...
  • 是的,我知道而且我只是在这里使用了这个名字,所以大家都知道我在说哪个函数。因此,它仍然无法正常工作。
  • @Lipschitz 讨论真实代码会更容易。你能发布你在做什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2014-03-05
  • 2013-05-13
  • 2016-11-07
  • 1970-01-01
相关资源
最近更新 更多