考虑MATLAB中的以下MWE:
f = @(t) integral(@(x) x.^2,0,t);
integral(f,0,1);
这会产生错误
Error using integral (line 85) A and B must be floating-point scalars.
(还有更多(。我该如何解决这个问题?这可能吗?我认为问题在于可变上限。
如果要使用integral
,请将'ArrayValued'
设置为true
否则t
将是integral(@(x) x.^2,0,t)
中的无效端点。所以它会是:
f = @(t) integral(@(x) x.^2,0,t);
integral(f,0,1,'ArrayValued',true)
% ans =
% 0.0833
或者,由于您正在执行双重集成,因此请使用专用于此目的的功能,即 integral2
.对于您的示例,它将是:
f = @(t,x) x.^2 ;
integral2(f,0,1,0, @(t) t)
% ans =
% 0.0833
如果您有符号数学工具箱,您也可以使用int
作为int(expr,var,a,b)
,但速度会更慢。对于您的情况,它将是:
syms x t;
f = x.^2;
req = int(int(f,x,0,t),t,0,1); % It gives 1/12
req = double(req); % Convert to double if required