Matlab keeps being "busy" when computing the integral of a function

Hello guys,
I'm having a problem running a very simple code and I cannot figure out why.
The code is to find the definite integral of a function whose coefficients are variant. One limit of the integral is also variant.
I have quite a few computations to make but I started with the first two.
syms g z
[a,b] = meshgrid(1.2:.02:1.36,0.54:.02:0.6);
k = ((a./b)+((a./b).^2-4).^(1/2))./(2*a);
for i = 1:1
for j = 1:2
g =(a(i,j)*z)^2/(1+(a(i,j)*z)^2)-b(i,j)*z;
c(i,j) = int(g, z, 0, k(i,j));
end
end
For i=1, j=1, the code works fine but for i=1, j=2, it takes like forever for Matlab to compute. I have to use ctrl+c to stop it.
I don't see any singular behaviours of the function in the interval of integration.
I'm using Matlab R2014a. Maybe there are some stupid errors in the code but for the moment I cannot see it.
Could anyone find the problem?
Thank you!

 Accepted Answer

Just convert symbolic integral (int()) to numerical integral (integral()) using matlabFunction() because the symbolic integrator is finding it difficult to solve.
syms z
[a,b] = meshgrid(1.2:.02:1.36,0.54:.02:0.6);
k = ((a./b)+((a./b).^2-4).^(1/2))./(2*a);
c=zeros(size(k)); % preallocate
for i = 1:size(k,1) % I believe you want to calculate the integral for entire k
for j = 1:size(k,2)
g =matlabFunction((a(i,j)*z)^2/(1+(a(i,j)*z)^2)-b(i,j)*z);
c(i,j) = integral(g, 0, k(i,j));
end
end
Gives:
>> c
c =
Columns 1 through 7
0.0098 0.0177 0.0255 0.0334 0.0413 0.0492 0.0571
-0.0064 0.0007 0.0079 0.0151 0.0225 0.0298 0.0371
-0.0196 -0.0135 -0.0071 -0.0005 0.0062 0.0129 0.0197
-0.0295 -0.0247 -0.0193 -0.0136 -0.0077 -0.0016 0.0047
Columns 8 through 9
0.0649 0.0727
0.0445 0.0518
0.0266 0.0334
0.0110 0.0173
>>

3 Comments

OHHHH...thanks a lot , I had the same problem..I solved with your answer.......Regards from Barcelona-Spain

Sign in to comment.

More Answers (0)

Products

Release

R2014a

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!