2015-06-26 2 views
-1
X=randi([1,5],3,1); 
Y=randi([1,5],3,1); 

for i=1:3; 
    Xnew(i)=[X(i,1)+.6]; 
    Xn=Xnew'; 
    Ynew(i)=[Y(i,1)+.4]; 
    Yn=Ynew'; 
end 

plot(Xn,Yn,'kd'); 
grid on; 
hold on; 
D2X=randi([1,5],3,1); 
D2Y=randi([1,5],3,1); 
plot(D2X,D2Y,'ro'); 
hold off; 
axis([1,50,1,50]); 

Моя проблема в том, что в первый день источник генерирует три частицы, затем эти три частицы движутся со скоростью грунтовых вод, на второй день три частицы снова генерируются источником, на третий день снова три частицы по источникам и прежние частицы будут двигаться со скоростью подземных вод, источник генерирует частицы в определенном диапазоне, только скажем (0-5), и это будет продолжаться в течение 365 дней.как я могу использовать для цикла в этой ситуации?

+0

не форматируется –

+0

Редактирование находится в очереди просмотра. Перед тем, как мы сможем ответить на этот вопрос, вам нужно гораздо больше информации. Вы говорите о днях, источниках, скорости и частицах, не представляя свою проблему. – RJFalconer

+0

источник - это не что иное, как 3 генератора частиц, скорость 0,6 м/день в направлении x и 0,4 м/д в направлении y, а частицы - это то, что я написал 3 в коде, который мы должны случайным образом находить эти частицы, поэтому мне нужно использовать randi, дни будут продолжаться до 365 дней. –

ответ

0

Я думаю, что это то, что вы пытаетесь сделать. Пожалуйста, уточните свой вопрос, если я неправильно понял.

xyRange=[1,5];  %// Starting xy range of particles 
numP=3;    %// Number of particles generated each day 
vx=0.6; vy=0.4;  %// x and y velocity 
numDays=365;  %// Number of days to generate particles 

X=[]; Y=[];   %// Vectors start out empty 

for day=1:numDays 
    %// Generate numP particles and add to end of vectors X and Y 
    X=[X;randi(xyRange,numP,1)]; 
    Y=[Y;randi(xyRange,numP,1)]; 

    %// Move all the particles 
    X=X+vx; 
    Y=Y+vy; 
end 

Эта версия перемещает частицы в день их создания. Если вы хотите, чтобы только начать движение частиц в день после того, как они были созданы, вы можете изменить положение вещей вокруг немного:

xyRange=[1,5];  %// Starting xy range of particles 
numP=3;    %// Number of particles generated each day 
vx=0.6; vy=0.4;  %// x and y velocity 
numDays=365;  %// Number of days to generate particles 

%// Generate first numP particles 
X=[randi(xyRange,numP,1)]; 
Y=[randi(xyRange,numP,1)]; 

for day=2:numDays %// Note we've already done Day 1 
    %// Move all pre-existing particles 
    X=X+vx; 
    Y=Y+vy; 

    %// Generate numP particles and add to end of vectors X and Y 
    X=[X;randi(xyRange,numP,1)]; 
    Y=[Y;randi(xyRange,numP,1)]; 
end 

В конце каждой версии, первые частицы, образовавшиеся будут X(1:3),Y(1:3) и последним частиц будет составлять X(end-2:end),Y(end-2:end).

Я не уверен, хотите ли вы строить каждый день или только в конце года, но я уверен, что вы можете это понять.

+0

Большое спасибо за ваш ответ. но да, мы должны держать дни как переменные, потому что в любой момент мы должны иметь возможность построить это, а другое - конечная позиция будет равна начальной позиции плюс скорость * времени. и на этот раз будет ... предположим, что мы предполагаем, что 1 год будет периодом времени, тогда частица, которая была сгенерирована в 1-й день, будет двигаться на 364 дня (t-1), а частицы, которые были сгенерированы на второй день, будут двигаться для 363 дня, как (t-2), частицы, которые были сгенерированы в третий день, будут двигаться в течение 362 дней .... и т. Д. –

+0

в этом коде, который вы написали, мы можем изменить условие цикла для поиска для разных количество дней, потому что оно имеет разницу в один день. –

+0

предположим, что мы сделали это в течение 50 дней (т. Е. Для дня = 1:50), тогда, когда мы построим его как график (X, Y, 'kd'); Ось ([1,50,1,50]); сетка; как мы можем вычислить число частиц в каждой сетке, я имею в виду, какой будет код для него. Я попробовал функцию box = coord (X, Y) для j = floor (X/5) +1; k = пол (Y/5); box = k * 10 + j; end –

Смежные вопросы