我在这里有一些代码,说明了我想在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
答案 0 :(得分:1)
您的代码存在的问题是您在组合中使用integral2
和integral1
。这种方式integral2
为x
生成网格,y
和integral1
生成t
值。这样,t
和x
值的大小不匹配,即使它们是不同网格的一部分。
如前所述,使用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