For loop and if statement in MATLAB
이전 댓글 표시


Please, I need a quick help with this problem. If you can guide me on how I can use a "for loop" and "if statement " to solve the problem I would really really appreciate it. Even if you just try to let me know how to use 'if and for' in anything similar. Thank you
댓글 수: 8
Adam
2018년 4월 10일
Have you tried the obvious
doc if
doc for
to look at the help?!
Guillaume
2018년 4월 10일
The question, apart from the typos, is actually very well written since it starts by telling you to solve the most crucial step first:
Create a flowchart
Have you done that yet? Once you've done that the actual usage of if and for is trivially solved using the doc as Adam says.
Note that you won't get much pity from us. The whole purpose of homework and assignments is to prove that you have the skill to solve such problems yourself, not the skill to go and ask somebody else to do it.
Samantha Cepeda
2018년 4월 10일
David Fletcher
2018년 4월 10일
If it's not homework, I wouldn't worry too much about doing a formal flowchart. Just make a list of things that you need to do and calculate in some sort of chronological order and take it from there.
I'll give you another hint.
Since you have an orderly sequence of conditions to evaluate, this would be the FOR loop (0.0, 0.1, 0.2, ... etc). These are fractions of m. (The problem statement even indicates "step=0.1m") But you know that if you get to 1.0m you will have gone too far, so inside the FOR loop, use the IF statement to determine when you have gone far enough and exit the FOR loop.
Samantha Cepeda
2018년 4월 11일
Adam
2018년 4월 12일
doc
is just what you can type on command line, followed by whatever you want, to open the help for that particular function. You can equally well open the help yourself and type 'for' or 'if' in the search field, it's just easier to type
doc for
and go straight there. This is always better than using the online help too (unless you always use the most up to date version of Matlab in which case they are equally good) as the online help is always for the latest version. For something as basic as 'for' or 'if' I doubt the help changes much between versions, but some functions you find online may not exist for you if you are using an older version of the software.
Samantha Cepeda
2018년 4월 13일
답변 (2개)
First of all, when calculating the masses you have to MULTIPLY the volume by the density.
You should always verify this using dimensional analysis. For example: the calculation pi*rc^2*lc is the volume of the cylinder and has units of (m^3) if you divide m^3 by kg/m^3, that's the same as multiplying m^3 by m^3/kg and the units you end up with are m^6/kg. Now if you multiply m^3 by Kg/m^3 you end up with Kg, which is the correct unit for mass. so,
volume_cyl = (pi * rc^2 * lc); % cylinder volume in m^3
mass_cyl = (pi * rc^2 * lc)* rho; % cylinder mass in Kg
% (or)
mass_cyl = volume_cyl * rho; % Cylinder mass in Kg
Now, this cylinder volume and mass represents the cylinder without the hole, so it does not change, and therefore, this calculation can be placed outside the FOR loop.
The FOR loop is intended to vary hole size, so the loop index 'i' must be used to define the size of the hole, in this case it is the length of one side of the square hole. You are instructed to make the step size 0.1m, so this can be built into the loop. But, rather than use "i" as the loop index, you might just as well use the variable name for the hole width, "Wr". This gives you
for Wr = 0:.1:1 % start at 0, step by 0.1 up to 1
Inside the for loop, you calculate the mass of the hole and subtract it from the mass of the cylinder
mass_cyl = (pi * rc^2 * lc)* rho; % cylinder mass (Kg)
% put a print statement before the loop to show the problem variables that don't change
fprintf('lc=%f, rho=%f, mass_cyl=%f ...etc \n ',lc, rho, mass_cyl, ...etc)
for Wr = W0:Ws:rc % Wr starts at W0, steps by Ws up to rc
mass_hole = Wr^2*lc*rho; % mass of hole (Kg)
tmass_cyl = mass_cyl - mass_hole % mass of the cylinder with the hole in it (Kg)
% put a print statement inside the loop to see each loop calculation
fprintf('Wr=%f, mass_hole=%f, tmass_cyl=%f \n ',Wr, mass_hole, tmass_cyl)
end
댓글 수: 11
Samantha Cepeda
2018년 4월 13일
I just noticed that you made an error in the unit conversion of the density from g/cm^3 to Kg/m^3.
It goes like this:
2.7 g/cm^3 x (1 kg)/(1000g) x [(10cm /(1m)]^3
= 2.7 g/cm^3 x 1/1000 (g to Kg) x 1000/1 (per cm^3 to per m^3) = 2.7 Kg/m^3
so 2.7 g.cm^3 = 2.7 Kg/m^3
Samantha Cepeda
2018년 4월 13일
Samantha Cepeda
2018년 4월 13일
you can use a while loop, but to do that you have to include the conditional calculation inside the loop. For example
Wr = W0;
While Wr <= rc
...
...
Wr = Wr + Ws;
end
You see, you have to initialize Wr before the loop, then you have to change Wr inside the loop, or the loop will never end. This loop now will end when Wr is greater than rc.
As you can see, this is all accomplished in a single line in the FOR statement.
Jim Riggs
2018년 4월 13일
Also, if you do get stuck in an infinite loop, just press ctrl + C and it will stop execution.
Samantha Cepeda
2018년 4월 13일
Samantha Cepeda
2018년 4월 14일
Samantha Cepeda
2018년 4월 14일
Samantha Cepeda
2018년 4월 14일
댓글 수: 2
Jim Riggs
2018년 4월 14일
The first thing that I notice is that in your print statement you are printing "mass_h", but this is a vector. This means that each time the print statement is encountered, it is printing all of the mass_h values. What you want is "mass_h(i)".
One other observation: The statement (wr(i)).^2 is a matrix statement that indicates each element in the matrix is to be squared (that's what the dot "." is for). However, using the subscript (i) means it is only referencing one element (the ith element) so this is a scalar. This means that you don't need the "." and can simply write wr(i)^2 as this is performing a scalar operation.
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!