Προς το περιεχόμενο

matlab


TASOS60

Προτεινόμενες αναρτήσεις

Δημοσ.

προσπαθώ να υλοποιήσω σε γλωσα matlab ενα πρόγραμμα για την προσομοίωση κίνησης τραινων (με κυψελιδωτα αυτοματα).

Χρεισημοποίω κυψελίδες που μεσα μπορει να εχει ενα τραίνο.

Εντοπίζει αριχκα ενα τραινο μετα βρησκει τι υπαρχει μετα το τραίνο δηλαδη τραίνο ή σταθμός τραινου και κινηταί αναλογα.

Ο αλγοριθμος κινινησης ειναι λιγο μεγαλος βαζω βασικα στοχεία και παραθέτω τον κωδικα που εκανα αν νιωθει κανενας θα είναι πολυτιμη η βοηθεια του(Δεν βγαζει σωστα αποτελέσματα)

 

>%0:κενο
%1:τραινο
%2:σταθμος
%3:τρενο στον σταθμο




%Dx:αποστση μεταξυ τραίνων
%gap:αρισθμος κενων

%xs:αποσταση απο τον σταθμο


l=20;                    %κυψελιδες
xc=2;                    %αποσταση που αρχιζει να επιβραδινει το τρενο
p=[];                    %πινακας τιμων t*l (20*20)
v=[];                    %ταχύτητα
sm=1;                    %αποσταση ασφαλείας
vmax=4;                  %μεγιστη ταχύτητα
dn=9;                    %ελαχιστη αποσταση dn=(vmax^2)/2*b+sm 
s=0;                     %βοηθητιος δεικτης χρονου παραμονής τραινου
a=1;                     %επιταχυνση
b=1;                     %επιβράδυνση
td=2;                    %χρονος παραμονης τρενου στον σταθμό

%αρχικες συνθηκες...
p(1,1)=1;
p(1,2)=0;
p(1,3)=1;
p(1,4)=0;
p(1,5)=0;
p(1,6)=1;
p(1,7)=0;
p(1,8)=0;
p(1,9)=0;
p(1,10)=0;
p(1,11)=1;
p(1,12)=0;
p(1,13)=2;
p(1,14)=0;
p(1,15)=1;
p(1,16)=0;
p(1,17)=0;
p(1,18)=0;
p(1,19)=1;
p(1,20)=0;

v(1)=3;
v(2)=0;
v(3)=1;
v(4)=0;
v(5)=0;
v(6)=2;
v(7)=0;
v(8)=0;
v(9)=0;
v(10)=0;
v(11)=2;
v(12)=0;
v(13)=0;
v(14)=0;
v(15)=4;
v(16)=0;
v(17)=0;
v(18)=0;
v(19)=1;
v(20)=0;


for t=2:l   
           i=1;
           

   
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       switch 	p(t-1,i)
           case 1           %τρενο case(1)
  j=i+1;
check = true;
while check
       switch 	p(t-1,j)  
           
           %case(a) τρενο με τρενο  
               
           case 1      
             Dx=j-i;    %αποσταση μεταξυ τραινων 
      %Step 1 acceleration:
       if Dx > dn
		v(i) = min(v(i) + a,vmax);
 	elseif Dx < dn
		v(i) =max(v(i)- b,0);
	else
		v(i) = v(i);
	end
	%Step 2 slowing down:
		v(i) = min(v(i),Dx);
	%Step 3 movement:
		i= i + v(i);
                	p(t,i)=1;
	     if v(i)~=0 
                p(t,i-v(i))=0;
            end
                   i=j; %ελεγχος στο προπορεύον τρενο
                   check = false;
    %case( τραινο σταθμός          
 case 2
         xs=j-i;
	
       %Step 1 acceleration:
	    if xs>xc
		v(i) = min(v(i) + a, vmax);
	    elseif xs < xc
		v(i) = max(v(i) - b, 0);
	    else
	    	v(i) = v(i);
           end
     %step 2 slowing down:
		v(i) = min(v(i),xs);
	  %Step 3 movement:
		 i = i + v(i);
         p(t,i-v(i))=0;
            check = false;
		if i~=j p(t,i)=1; end     %den ftanei to treno ston sta8mo
		if i==j p(t,i)=3; end	  %treno ftanei ston sta8mo
           
  %case (c):δεν εχει ουτε σταθμο ουτε τρενο ειναι στα ακρα βγαινει απο το συστημα το τρενο
   case 0 
           p(t,i)=0; % v=vmax
           if j==20 %den yparxei allo traino 
               check = false;
               i=i+vmax;
               p(t,i)=1;
               p(t,i-vmax)=0;
               v(i)=vmax;
               
           else
               check = true;
           end
           j=j+1;
           
           
           
    otherwise
       disp('error') 
      
       end
       
  end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%case(2)  :το τρενο βρισκεται στον σταθμό
% if p(t,i)==3 
%            s=s+1;
% if s==td

 
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    case 0
       p(t,i)=0;
       i=i+1;
       
    case 2
       p(t,i)=2;
       i=i+1;
    otherwise
       disp('system eror');
   end	               
 
end

 

ευχαριστω

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...