How can I put an integral inside a for loop when the bounds depend on the loop's variable?

Hi, I would like to do this integration where the j of cj is the loop variable.
I tried this but when I calculate Phi_ij1(1,1) for example, Matlab says "unrecognized function or variable 'y' ". Can you help me?
for j=1:13
x_max1 = @(y,j) (-sqrt(3)/3).*y + c(j);
y_min1 = @(j) (sqrt(3)/2)*c(j);
y_max1 = @(j) c(j)*sqrt(3);
Phi_ij1 = @(i,j) integral2(B_zi(i,x,y), 0, x_max1(y,j),0,y_max1(j)) - integral2(B_zi(i,x,y),0, x_max1(y,j),y_min1(j),y_max1(j)) ;
end

5 Kommentare

I missed a 0 here but not in my original code.
Try to specify variables integral depends on
Phi_ij1 = @(i,j) integral2(@(x,y)B_zi(i,x,y), 0, @(y)x_max1(y,j),0,y_max1(j)) - ...
integral2(@(x,y)B_zi(i,x,y), 0, @(y)x_max1(y,j),y_min1(j),y_max1(j)) ;
I tried it and it says XMAX must be a floationg point scalar.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Here is an example for integral3
According to this integration is done from z to x
You have only y. Looks like x=x(y) in your case
So you have to integrate by x first
Try to replace limits of integration
Phi_ij1 = @(i,j) integral2(@(x,y)B_zi(i,x,y), 0, y_max1(j)), 0, @(y)x_max1(y,j) - ...
integral2(@(x,y)B_zi(i,x,y), y_min1(j),y_max1(j), 0, @(y)x_max1(y,j)) ;

2 Kommentare

In the example, the integration of x is from a scalar to a scalar while on mine the integrations are from functions to functions (one depending on y like you said x(y) and the other depending on j y(j))
It now works when I put @(y,x). Thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Phi_ij1 =@(i,j) integral2(@(y,x) B_zi(i,x,y),0,y_min1(j),0,@(y)x_max1(y,j));

7 Kommentare

I already did it but I made a mistake with the indices above, it now works. Thank you!!
Note that @(y,x) B_zi(...) instead of @(x,y) B_zi(...) because you changed the order of x- and y-integration.
This is wrong in Darova's answer.
Note also that you only need to call integral2 once because you can calculate the difference of the two integrals as one integral with new y-limits as shown in my answer.
Oh that's clever. So I have to put all the limits at the same time in the same integral2? Because I don't see y_min1 in your answer. How does it work?
integral 0 -> ymax1 - integral ymin1 -> ymax1 = integral 0 -> ymin1 (outer integral)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by