MATLAB: How to improve Numerical Integration Speed

efficiencyfourier transformintegrationnumerical integartionproccessingspeedtime

Hi,
I have created a function which will loop several thousand times. I have noticed the time taken to perform the integration necessary is too long to produce the results I need. My integration method is as follows:
fun1= @(x) exp(-(abs(x)).^(1.73)).*((cos(eta1*x)));
fun2= @(x) exp(-(abs(x)).^(1.96)).*((cos(eta2*x)));
R1 =integral(fun1,0,inf);
R4 =integral(fun2,0,inf);
Here I state the function required to be integrated with respect to x and then perform the integral. How would I do this more efficiently. Thank you.
Pierce

Best Answer

eta1 = 17; % Guessed
fun1 = @(x) exp(-(abs(x)).^(1.73)).*((cos(eta1*x)));
tic
R1 = integral(fun1,0,inf);
toc
Elapsed time is 0.003751 seconds.
It is some percent faster to use a function instead of an anonymous function.
This is not that much, and it was measured on an old Core2Duo. Which speed do you need?
You can reduce the tolerance:
R1 = integral(fun1, 0, inf, 'RelTol', 1e-4, 'AbsTol', 1e-6)
This increases the speed by 10%, but of course it reduces the accuracy.
By the way: Compare these two formulations:
fun1 = @(x) exp(-(abs(x)).^(1.73)).*((cos(eta1*x)));
fun1 = @(x) exp(-(x .^ 1.73)) .* cos(eta1*x);
If the integral has the limits [0, Inf] you can omit the abs. While the two pairs of parentheses around the cos() are not useful, I'd prefer an explicit "-(x .^ y)" to emphasize, that the power has a higher precedence than the unary minus.