2015-04-11 5 views
0

, поэтому мне нужно создать функцию, которая отображает местоположение в зависимости от времени для человека, который совершает последовательные случайные прыжки. Каждый прыжок - одна единица справа с вероятностью R, а в остальном - одна единица слева. Аргументы должны быть R =, вероятно, прыгать на одну единицу вправо; a = начальное местоположение; и numjumps = число прыжков, которое делает индивид. Мне также необходимо использовать функцию binornd().MATLAB: построение случайного блуждания

Что я закодированы до сих пор:

function plot_sim(a,numjumps,R) 
loc = a; 
time = 0; 
for i = 1:numjumps; 
    loc = loc + (2*binornd(1,R)-1); 
    time = time + 1; 
    hold on; 
    plot(time,loc,'-') 
end 

И я должен оценить его plot_sim(0,25,0.5). И я просто смущен, потому что, хотя у меня есть plot(time,loc,'-'), он не строится как соединительные линии, он просто отображается как отдельные точки. Я попытался включить функцию plot вне цикла for, и это не сработает. Я даже пытался изменить цвета точек, и это даже не работает. Я кодирую это неправильно?

+0

Проблема в том, что вы строите по одной точке за раз. Посмотрите документацию на график, чтобы посмотреть, как строить линии. –

+0

@ A.Donda Я пытаюсь заставить это работать в течение 3 дней, и ничто из этого не поможет, поэтому я не знаю, что еще с ним делать. –

+0

Чтобы построить линию, вам нужно дать сюжет командует несколькими точками * между *, которые должна быть линия, в виде векторов. Посмотрите на первый пример в [plot] (https://www.mathworks.com/help/matlab/ref/plot.html) и попытайтесь увидеть разницу между тем и тем, что вы делаете. –

ответ

2

Решение проблемы довольно простое. Если вы рисуете линии, вы должны иметь не менее двух очков, чтобы вы могли рисовать линии. То, что вам действительно нужно сделать, - , - это предыдущая позиция, так что на каждом шаге вы можете нарисовать линию от предыдущей позиции до текущей позиции.

Что бы я сделал, сначала создайте фигуру, которая генерирует один прыжок, и мы можем нарисовать линию от начального положения до этой точки. После этого запустите цикл, в котором мы отслеживаем предыдущее событие, сгенерируем новое событие на следующем шаге времени, а затем нарисуем строку из предыдущего события в предыдущее время до текущего события в текущее время.

Помните, что время находится на горизонтальной оси и позиция находится на вертикальной оси. Таким образом, события сохраняются как вектор двух элементов, где первым элементом является время, а вторым элементом является позиция.

Поэтому старайтесь делать это:

function plot_sim(a,numjumps,R) 
%// Keep the previous event 
%// x coordinate is time 
%// y coordinate is position 
%// Time = 0 
prev_loc = [0 a]; 

%// Generate the next event 
%// Time = 1 
loc = [1 prev_loc(2) + 2*binornd(1,R)-1]; 

%// Close all figures then open up a new one 
close all; 
figure; 
hold on; 

%// Plot a line from the previous position to the current one 
plot([prev_loc(1) loc(1)], [prev_loc(2) loc(2)]); 

%// For each new position... 
for i = 2:numjumps 
    %// Remember the previous position 
    prev_loc = loc; 
    %// Generate the next position 
    loc = [i prev_loc(2) + (2*binornd(1,R)-1)];  
    %// Plot the position 
    plot([prev_loc(1) loc(1)], [prev_loc(2) loc(2)]); 
end 

Вот что я получаю, когда я пытаюсь запустить его с plot_sim(0.25,10,0.25), так a = 0.25, numjumps = 10, R = 0.25:

enter image description here

Помните, что вы не можете получить тот же участок Я делаю это потому, что это случайный. Каждый раз, когда вы запускаете эту функцию, вы должны получать разные случайные блуждания, и это то, что мы ожидаем.

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