Attempting to Plot Multiple Answers from a Loop
    4 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
I'm rather new/inexperienced in MatLab and was wondering if I could get any help!
I have to create a while loop within a for loop to determine what breaking system should be implimented in a rollercoaster for it to stop on time, safely. My code looks like this:
Tm = 13000 %kg, total mass of coaster
g = 9.81 %m/s^2, gravity
m = 75 %kg, mass of passenger
h = 130 %m, height of coaster
for n = 1:3
   %Part B
          %Opt. 1     Opt. 2        Opt. 3
   Brake=[0 0 10000; 0 100 10000; -10 1000 100];
   % Part C
    xo = 0 %m, starting position
    Ti = 10 %m/s, inital value at top of hill
    Di = 0 %m/s^2, inital de-acceleration at bottom of the hill
    Pi = 0 %m, inital position at the bottom of the hill
   %Part D
    Vb = sqrt(Ti^2+2*g*h) % motion down the track
   %Part E
   Vn=Vb
   xn=xo
   i=0
   t=0
    while Vn>0
        deltat=0.0001
        i=i+1
        t=t+deltat*i
        T(i)=t
        Fb(n)=(Brake(n,1)*Ti^2)+(Brake(n, 2)*Ti)+Brake(n, 3) %apply breaks
        ac(n) = -Fb(n)/Tm %acceleration
        Fp = abs(m*ac(n)) %force exerted on passenger
        Vn=(ac(n)*T(i))+Vn %new velocity
        xn=(V*T(i))+xn %new position
    end 
    figure(1)
    plot(T(i),V(1)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
    hold on
    plot(T(i),V(2)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
    hold on
    plot(T(i),V(3)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
    hold off
end
Every time I attemped to graph each possible breaking system, the graphs appear blank. I'm unsure if it has something to do with my code, or what I'm trying to graph, or something else entierly. 
Any help is appreciated, thank you!
1 Kommentar
Antworten (2)
  Walter Roberson
      
      
 am 12 Dez. 2019
        You do not define a variable V in your code, but you use it in the line
xn=(V*T(i))+xn
and you attempt to plot it several times in
plot(T(i),V(1)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
plot(T(i),V(2)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
plot(T(i),V(3)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
The way you use it as the Y component suggests that you expect V to be an output of the loop. The fact that you expect your plot to be in time suggests that you expect that V(1), V(2), V(3) will each be vectors.
Note that the variable named V has nothing to do with the variable named Vn
It looks to me as if you are attempting to use dynamic variable names. Don't do that. http://www.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval
plot(T(i),V(1)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
After your while  loop, i will have a specific scalar value, so T(i) will be a scalar. So in each of your three plots, you are plotting a scalar versus a scalar. MATLAB only ever draws lines when there are two adjacent finite values, and since you only plot one point at a time, it will not draw anything.
    plot(T(i),V(1)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
    hold on
    plot(T(i),V(2)), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
You are not creating new figures or sub-plots, and you are using hold on so all three of your plots are going to get plotted on the same axes. I would suggest to you that there is no value in setting the title() or *label() multiple times for the same axes.
If you do succeed in plotting three lines, how do you expect the user to be able to tell which of the lines has which meaning? Perhaps you should consider using legend()
0 Kommentare
  Ridwan Alam
      
 am 12 Dez. 2019
        
      Bearbeitet: Ridwan Alam
      
 am 12 Dez. 2019
  
      I believe you missed to track the V inside your loops. Also, please lookup the documentation for plot() for a better manipulation.
Tm = 13000 %kg, total mass of coaster
g = 9.81 %m/s^2, gravity
m = 75 %kg, mass of passenger
h = 130 %m, height of coaster
for n = 1:3
   %Part B
          %Opt. 1     Opt. 2        Opt. 3
   Brake=[0 0 10000; 0 100 10000; -10 1000 100];
   % Part C
    xo = 0 %m, starting position
    Ti = 10 %m/s, inital value at top of hill
    Di = 0 %m/s^2, inital de-acceleration at bottom of the hill
    Pi = 0 %m, inital position at the bottom of the hill
   %Part D
    Vb = sqrt(Ti^2+2*g*h) % motion down the track
   %Part E
   Vn=Vb
   xn=xo
   i=0
   t=0
    while Vn>0
        deltat=0.0001
        i=i+1
        t=t+deltat*i
        T(i)=t
        Fb(n)=(Brake(n,1)*Ti^2)+(Brake(n, 2)*Ti)+Brake(n, 3) %apply breaks
        ac(n) = -Fb(n)/Tm %acceleration
        Fp = abs(m*ac(n)) %force exerted on passenger
        Vn=(ac(n)*T(i))+Vn %new velocity
        xn=(Vn*T(i))+xn %new position
        V(i) = Vn;
    end 
    figure(1)
    plot(T,V), title('Train Coaster Velocity in Time'), xlabel('Time, sec'), ylabel('Velocity, m/s'), grid
    hold on
end
This generates the figure: (you can add legend to it using legend())

0 Kommentare
Siehe auch
Kategorien
				Mehr zu Parallel for-Loops (parfor) finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


