【问题标题】:Integrating a function of two variables with respect to one on Matlab在Matlab上整合两个变量的函数
【发布时间】:2014-08-04 06:16:43
【问题描述】:

我正在尝试让 MATLAB 集成两个变量的函数,例如 fun=@(x,y)x+y; 针对一个变量。我可以定义,比如说fun2=@(y)quad(@(x)fun(x,y),1,2);,它会给我fun2(1),比如说,没问题。但是当我尝试评估矩阵的fun2 时,它给了我错误。当我尝试使用quad() 集成fun2 时,这是我需要做的,它给了我同样的错误。

而且我不能只使用 quad2d(),因为 (a) 我在几个不同的地方需要类似 fun2 的东西,并且 (b) 我需要计算的积分是 4D。

还有其他方法可以做到这一点吗?

【问题讨论】:

  • 您能给出一些示例性的 x(和 y)值吗?

标签: matlab


【解决方案1】:

因此,您希望对数组的每个元素都使用 fun2。您可以通过使用 arrayfun 并定义 fun2 来做到这一点。

您可以在以下位置查看有关 arrayfun 的信息:http://www.mathworks.com/help/matlab/ref/arrayfun.html

【讨论】:

  • 不仅如此;我举了一个例子来说明它不能做什么。我需要的是能够将 fun2 与 y 集成,这会产生相同的错误。我不能使用 quad2d,因为 (a) 我需要在几个地方使用 fun2 之类的东西,并且 (b) 我需要计算的积分是 4D。
  • arrayfun 接受数组,无论其尺寸如何。所以,我想也许你必须更好地澄清你想要做什么。
【解决方案2】:

使用 integral 代替 quad,并将 'ArrayValued' 属性设置为 true。

fun2 = @(y)integral(@(x)fun(x,y),1,2,'ArrayValued',true);

对于您的四维问题,您可以使用integral(@(x)integral3(…))arrayfun。请参阅我对this question 的回答如何准确地做到这一点。

无论如何,您都应该使用integral 而不是quad,因为Matlab quad documentation 表示:

quad will be removed in a future release. Use integral instead.

documentation of integral 中,您还可以找到指定结果准确性的选项(“AbsTol”和“RelTol”)。

【讨论】:

  • 愚蠢的问题,但这仍然会提供与 quad 相同的准确度吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
相关资源
最近更新 更多