我正在尝试让MATLAB集成两个变量的函数,例如fun=@(x,y)x+y;
对一个变量。我可以定义,说fun2=@(y)quad(@(x)fun(x,y),1,2);
,它会给我fun2(1)
,比方说没问题。但是当我尝试评估一个矩阵的fun2
时,它给了我错误。当我尝试使用fun2
集成quad()
时,这就是我需要做的事情,它给了我同样的错误。
我不能只使用quad2d()
,因为(a)我在几个不同的地方需要fun2
之类的东西,(b)我需要计算的积分是4D。
还有其他方法吗?
答案 0 :(得分:0)
因此,您希望将fun2用于数组的每个元素。您可以使用arrayfun并定义fun2来完成此操作。
您可以在http://www.mathworks.com/help/matlab/ref/arrayfun.html上看到有关arrayfun的信息。
答案 1 :(得分:0)
而不是quad
,请将integral
与' 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')。