Conditional Statement with 3 different ranges
16 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am given the three ranges
h < r
r≤h<H−r
H − r ≤ h ≤ H
I am trying to make the program run v1 when the first range applies, then v2 when the second range applies, and v3 when the third range applies. Simulating a tank with rounded ends filling up. I feel that using the if statements are what's needed.
H is the max height of the tank, h is the current level of the water, and r is the radius of curvature of the ends of the tank.
Then the final values need to be plotted.
-------------------
r = 2; %ft
H = 7; %ft
h = 0:.1:H;
if (h<r)
v1 = (1/3)*pi*h^2*(3*r-h)
elseif (r<=h<(H-r))
v2 = (2/3)*pi*r^3+pi*r^2*(h-r)
else ((H-r)<=h<=H)
v3 = (4/3)*pi*r^3+pi*r^2*(H-2*r)-(1/3)*pi*(H-h).^2*(3*r-H+h)
end
plot(h,v?)
Any help is much appreciated as I don't know where to go next.
0 commentaires
Réponses (1)
Guillaume
le 1 Fév 2016
You cannot use the notation if a<b<c to check that b is between a and c in matlab (in fact, I'm not aware of any programming language where that is valid). a<b<c is interpreted as (a<b)<c. The result of (a<b) is either true (1) or false(0), so your comparison ends up as being 0<c or 1<c. To express what you want you need to use logical operators (& or && if scalar, in this case).
Therefore your tests are:
h < r
r <= h & h < (H-r)
(H-r) <= h & h < H
You can't use these test with if though because h is a vector. The simplest way to obtain what you want is to use logical indexing:
r = 2; %ft
H = 7; %ft
h = 0:.1:H;
v = zeros(size(h));
%temporary variables to help with logical indexing:
v1 = 1/3*pi*h.^2.*(3*r-h); %Important: note the .^2 and .* to work with vectors
v2 = 2/3*pi*r.^3+pi*r.^2.*(h-r); %Again .^3 .^2 and .*
v3 = 4/3*pi*r.^3+pi*r.^2*(H-2*r)-1/3*pi.*(H-h).^2.*(3*r-H+h);
%use logical indexing to assign v1, v2 and v3 to the relevant portion of v
v(h < r) = v1(h < r);
v(r <= h & h < (H-r)) = v2(r <= h & h < (H-r));
v((H-r) <= h & h < H) = v3((H-r) <= h & h < H);
plot(h, v);
Voir également
Catégories
En savoir plus sur Inputs dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!