HI,
I've noticed this question appears a lot, and I watched the video here :https://www.mathworks.com/videos/storing-data-in-a-matrix-from-a-loop-97493.html, but I haven't been able to figure it out for my own code. The code outputs a value for the area, however doesn't store it as a variable. Any suggestions?
clc;
clear;
x = [ 0 1 2 3 4 5 6 7 8 9 10 11 12];
y = [0 -0.5 -0.8 -0.8 -1 -1.1 -1.2 -1.2 -1.4 -1.2 -1.1 -1 0];
for h0= -2:0.04:1;
h=ones(size(x))*h0;Int=pchip(x,y);xx=linspace(x(1),x(end),500);
yy=y-h0;yyy=pchip(x,yy,xx);gt=yyy<0;
Area =-trapz(xx(gt), (yyy(gt)))
hold off
area(xx, min(ppval(Int,xx), h(1)), h(1), 'EdgeColor', 'none', 'FaceColor', 'b'),grid,
end

 Réponse acceptée

Alan Stevens
Alan Stevens le 23 Août 2020

0 votes

Something like
...
k = 0;
for h0= -2:0.04:1;
k = k+1;
h=ones(size(x))*h0;Int=pchip(x,y);xx=linspace(x(1),x(end),500);
yy=y-h0;yyy=pchip(x,yy,xx);gt=yyy<0;
Area(k) =-trapz(xx(gt), (yyy(gt)));
...etc.

3 commentaires

Hamzah Mahmood
Hamzah Mahmood le 23 Août 2020
Thanks Alan, that makes a lot of sense now actually. Cheers.
Hamzah Mahmood
Hamzah Mahmood le 23 Août 2020
One more follow up question. Currently h0 is being stored as a single variable that is being overwritten, could I use a similar line of code to store that as the range I'm calculating for?
You could rearrange the coding as follows:
h0= -2:0.04:1;
for k= 1:length(h0);
h=ones(size(x))*h0(k);Int=pchip(x,y);xx=linspace(x(1),x(end),500);
yy=y-h0(k);yyy=pchip(x,yy,xx);gt=yyy<0;
Area(k) =-trapz(xx(gt), (yyy(gt)));
... etc.
(notice that h0 now becomes h0(k) within the loop) then all values of h0 are available after the loop ends.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by