在Matlab中嵌套调用integral和integral2

时间:2015-03-11 19:14:31

标签: matlab nested

我在这里有一些代码,说明了我想在matlab中执行的一些积分的嵌套特性。当我运行以下代码时,我收到错误

Error using  .* 
Matrix dimensions must agree.

Error in fun1/integrand (line 7)
   f = x.^2.*t;

似乎我现在设置它的方式不允许integral函数的矢量化输出。我该怎么做才能运行我的代码?我在下面评论了我想要的功能。

我的代码如下:

%主脚本:

z = linspace(0,10,10);
I = zeros(10,1);

for i = 1:10
    I(i) = fun2(z(i));
end

%函数1在单独的文件中:

function I = fun1(x)

I = integral(@integrand,-1,1);

   function f = integrand(t)
   f = x.^2.*t;
   end
end

%功能2在单独的文件中:

function I = fun2(z)

I = integral2(@integrand,-1,1,-1,1);

   function f = integrand(x,y)
       f = z.*fun1(x).*y;    // here fun1 should return the value for all x that is swept through by integral2 during its call.
   end
end

1 个答案:

答案 0 :(得分:1)

您的代码存在的问题是您在组合中使用integral2integral1。这种方式integral2x生成网格,yintegral1生成t值。这样,tx值的大小不匹配,即使它们是不同网格的一部分。

如前所述,使用ingetral3是正确的选择。或者你可以简单地“修复”这个引入一个循环,但这会导致更慢的代码:

function I = fun1(x)
I=nan(size(x));
for ix=1:numel(x)
    I(ix) = integral(@(t)integrand(x(ix),t),-1,1);
end
   function f = integrand(x,t)
   f = x.^2.*t;
   end
end