For loop and if statement in MATLAB

2 次查看(过去 30 天)
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
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
Samantha Cepeda 2018-4-13
got it! thank you. I ended up doing this but I'm not sure how to print the Wr(i) like the current value for the side of my square.
clear, clc
rc = input ('Enter the radius of the cylinder in meters: '); lc = input ('Enter the length of the cylinder in meters: '); wo = input ('Enter the initial width of the hole in meters: '); ws = input ('Enter the step size of the hole in meters: ');
rho = 2700; %kg/m^3 wr = wo:ws:rc;
if wo < rc
for i = 1:length(wr)
mass_cyl = (pi * (rc)^2 * lc)/ rho;
mass_hole = ((wr).^2 * lc)/ rho;
tmass_cyl = mass_cyl - mass_hole;
end
end
fprintf ( '\nThe radius and length are %0.1f m and %0.1f m respectively.\nThe density of the cylinder material is %0.3f kg/m^3.\nThe rectangular hole width is %0.3f m.\nThe total mass remaining is %0.5f kg.\n\n', rc, lc, rho, wr(i), tmass_cyl)

请先登录,再进行评论。

回答(2 个)

Jim Riggs
Jim Riggs 2018-4-13
编辑:Jim Riggs 2018-4-13
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
Samantha Cepeda 2018-4-14
No, you're good. When I tried to use the fprintf inside the for loop it doesn't print all the values but the last one. I ended up using the i symbol that I'm still unsure if I'm using it right and I got the same last mass as your code gives me but I see that the wr varies sooo much and if I use numbers from rc=3,lc=5,wo=1 and ws=0.5 I should get wr= 1, 1.5,2,2.5,3 nothing else but I got 54000.00. DO you have an idea what's going on there? here's my code:
hmm.. when it asks for the current value, it means the last value right? or all the current values? this task is somehow not well written from my perspective.
clear, clc
rc = input ('Enter the cylinder radius: ')
lc = input ('Enter the cylinder length: ')
wo = input ('Enter the initial width of the hole: ')
ws = input ('Enter the increment of the hole size: ')
rho = 2700
wr = wo:ws:rc
mass_c = pi * (rc)^2*lc*rho
if wo < rc
for i = 1:length(wr)
mass_h(i) = (wr(i)).^2 *lc*rho
tmass = mass_c - mass_h
fprintf(' wr=%f, masshole=%f, totalmass=%f \n', wr(i),mass_h,tmass )
end
end
Samantha Cepeda
Samantha Cepeda 2018-4-14
I put it betwen the two last 'end' and it worked well. I'm just unsure if the i that I'm using because I couldn't print all your the values out in your code, it's correctly used. Also I read that using array I need to use the .^ or .* or ./. the control + C did work out! thanks haha I was going crazy! I'm gonna do a while loop now I think I undertand how the for loop works using an if statement now. it's just the operators (symbols) and know how and where to place f printf.

请先登录,再进行评论。


Samantha Cepeda
Samantha Cepeda 2018-4-14
No, you're good. When I tried to use the fprintf inside the for loop it doesn't print all the values but the last one. I ended up using the i symbol that I'm still unsure if I'm using it right and I got the same last mass as your code gives me but I see that the wr varies sooo much and if I use numbers from rc=3,lc=5,wo=1 and ws=0.5 I should get wr= 1, 1.5,2,2.5,3 nothing else but I got 54000.00. DO you have an idea what's going on there? here's my code:
clear, clc
rc = input ('Enter the cylinder radius: ')
lc = input ('Enter the cylinder length: ')
wo = input ('Enter the initial width of the hole: ')
ws = input ('Enter the increment of the hole size: ')
rho = 2700
wr = wo:ws:rc
mass_c = pi * (rc)^2*lc*rho
if wo < rc
for i = 1:length(wr)
mass_h(i) = (wr(i)).^2 *lc*rho
tmass = mass_c - mass_h
fprintf(' wr=%f, masshole=%f, totalmass=%f \n', wr(i),mass_h,tmass )
end
end
  2 个评论
Jim Riggs
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)".
Jim Riggs
Jim Riggs 2018-4-14
编辑:Jim Riggs 2018-4-14
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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Graphics Object Programming 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by