Derived Function Handle does not support integration operation, frustrating!
1 view (last 30 days)
Show older comments
Try this piece of code, which works fine.
a=1;b=2;
% A two-variate function
f2= @(x,y) x+y;
derivedF2=@(x) integral(@(y) f2(x,y), a,b);
% Test the evaluation of the derived function handle
derivedF2(0);
% Test the integration of the derived function handle
% integralVal=integral(derivedF2,a,b);
% integralVal=integral(@(x) derivedF2(x),a,b);
% Test plotting of the derived function handle
figure(11);
ezplot(@(x) arrayfun(derivedF2,x));
But if you uncomment the lines starting with integralVal. The code breaks.
Apparently, the derived function handle does not support integration operation, or have I missed something?
2 Comments
Accepted Answer
Steven Lord
on 12 Jul 2017
When I ran this line of code (with the typo corrected, using derivedF2 instead of derivedF):
integralVal=integral(derivedF,a,b);
the error message I received said the following. I manually broke the message across two lines, so you don't need to scroll to read the whole thing.
Error using integralCalc/finalInputChecks (line 515)
Output of the function must be the same size as the input. If FUN is an
array-valued integrand, set the 'ArrayValued' option to true.
When I did that:
>> integralVal=integral(derivedF2,a,b, 'ArrayValued', true)
integralVal =
3
I used a = 1, b = 2.
I also recommend checking if integral2 will do what you need rather than calling integral twice.
More Answers (1)
Walter Roberson
on 12 Jul 2017
integralVal = integral(derivedF2, a, b, 'ArrayValued', true);
Or
integralVal = integral( @(X) arrayfun(derivedF2, X), a, b);
The basic problem is that integral() passes a vector as the first argument and the objective function must return a value for each member of the vector, and that happens at both levels when you have a nested integral() call.
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!