Double Integral using Integral2 Error
Show older comments
I am trying to write code for the attached equation in matlab but I am getting errors.

My code is as under;
phi=0.0:0.01:90;
P=sqrt((pi^2*Ef*df^3*rounot*S*(1+n))/(4)+(pi^2*Ef*df^3*Gd)/(2));
p_phi=sin(phi);
p_z=2/Lf;
m1=P*exp(f*phi); %multiplier,inside the integral part of eq#8.
m2=(4*Vf)/(pi*df^2); %multiplier, outside the integral part of eq#8.
myfun_eq8=@(z,phi) m1.*p_phi.*p_z;
I= integral2(myfun_eq8,0,1,0,pi/2);
sigma_b=m2*I;
I am getting the following error, can someone help me correct it.
Error using integral2Calc>integral2t/tensor (line 241) Integrand output size does not match the input size.
Error in integral2Calc>integral2t (line 55) [Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
Error in integral2Calc (line 9) [q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
Error in integral2 (line 106) Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);
Error in myeqsetlin (line 160) I= integral2(myfun_eq8,0,1,0,pi/2);
6 Comments
Andrew Newell
on 17 Apr 2017
I can't reproduce your problem with the code you provided. First, rounot was undefined, so I tried setting it to 0.01. Then I got the error
Error using *
Inner matrix dimensions must agree.
for the line
m1=P*exp(f*phi);
jack carter
on 18 Apr 2017
Andrew Newell
on 18 Apr 2017
There must be something different from what you are showing above because S (and therefore P) has length 3001 while while phi has length 9001, so when you get to the line I mentioned above there is an error.
Andrew Newell
on 18 Apr 2017
Actually, S is not mentioned at all in the statement of the problem, except at the bottom where its values are provided.
Andrew Newell
on 18 Apr 2017
I notice that p(z) is a constant, so integrating p(z)dz gives simply cos(phi). Thus, you really have a one-dimensional integral to solve numerically.
jack carter
on 18 Apr 2017
Accepted Answer
More Answers (2)
David Goodmanson
on 17 Apr 2017
Edited: David Goodmanson
on 18 Apr 2017
1 vote
Hi jack, I believe this is occurring because your definition of myfun_eqn8 uses the two variables z,phi, but the integrand m1.*p_phi.*p_z is not explicitly a function of either of those variables. Matlab does not know how to create the integrand for arbitrary z,phi. You need to define m1, p_phi,p_z explicitly in myfun_eqn8.
Once this gets working the first and third lines of code will probably become superfluous anyway, but right now you are taking the sine of angles in degrees. You can convert to radians or use the sind function there.
5 Comments
jack carter
on 18 Apr 2017
David Goodmanson
on 18 Apr 2017
Hi jack, Before going forward, is it true that p(z) is simply the constant 2/Lf? If so, then as Andrew noted above you can do the z integration at once and get cos(phi). P(delta) does not depend on phi so you can take that out of the integral and arrive at
(function of a bunch of constants and delta) * Integral sin(phi)*cos(phi)*exp(f*phi)dphi.
That seems too simple. Is it true than nothing in the integrand depends on z?
jack carter
on 18 Apr 2017
David Goodmanson
on 18 Apr 2017
Edited: David Goodmanson
on 18 Apr 2017
ok then it does appear to reduce to a one-dimensional integral in the variable phi, and the answer for that only depends on the constant f.
jack carter
on 19 Apr 2017
Shahid Hasnain
on 15 Nov 2018
0 votes
I have following expression with x=[1 2 3 4 5], y=[1 2 3 4 5],
L = 100; % Length of the box
p=1;
q=1;
Ui = @(x,y) sin(pi*x).*sin(pi*y); % An initial distribution for u, i.e. the u(x,y,0)
Vi = @(x,y) sin(pi*x).*sin(pi*y); % An initial distribution for v, i.e. the v(x,y,0)
Wi = Ui(x,y) + Vi(x,y); % Initial condition for w, i.e. w(x,y,0)
% Computation of the b-coefficients
if p < Ntrunc
if q < Ntrunc
my_integrand = @(x,y) 4*Wi.*sin(p.*x).*cos(q.*y)/L^2;
bd(p,q) = integral2(my_integrand(x,y),0,L,0,L);
q = q+1;
end
p = p+1;
end
I got following error,
Error using integral2Calc>integral2t/tensor (line 231)
Input function must return 'double' or 'single' values. Found 'function_handle'.
Error in integral2Calc>integral2t (line 55)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
Error in integral2Calc (line 9)
[q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
Error in integral2 (line 106)
Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);
Correction will be highly appreciated.
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!