2016-09-22 4 views
1

Прежде всего, я просто хочу сказать, что я не так привык использовать Matlab, но мне нужно для задания, я должен создать «коричневое движение». Мой код в настоящее время ищет, как это:Нанесение коричневого движения matlab

clf 
hold on 
prompt = 'Ge ett input'; 
size = input(prompt) ; 
numParticles = input('Ange antal partiklar'); 
axis([-size size -size size]); 
Part = []; 
color = 'brkgmyco'; 
for i = drange(1:numParticles) 
    Part = [Part [0;0]]; 
end 
for i = drange(1:200) 

    dxdy = randn(2,numParticles); 
    k = Part 
    Part = Part + dxdy; 

Моя забота, как печатать, я бы даже хочу как небольшой задержки на каждой печати, так что вы действительно можете увидеть, что происходит на уступки, это можно достичь от кода, который я написал сейчас, или что-нибудь изменить? Заранее спасибо!

+1

Вы можете заменить свой первый цикл 'Part = zeros (2, numParticles);' – EBH

+0

Существует ['pause'] (https://de.mathworks.com/help/matlab/ref/pause.html) команда. –

ответ

0

Вот некоторые основные проблемы, связанные с вашим кодом, независимо от того, что вы пытаетесь сделать:

  1. используется size в качестве имени переменной. Это переопределяет функцию MATLAB size.
  2. Функция zeros создает массив, инициализированный нулями, для этого не требуется цикл.
  3. Вместо того, чтобы рассчитывать randn на 200 раз в цикле, вы можете сделать это один раз, с dxdy = randn(2,numParticles,200), а затем просто обратиться к dxdy(:,:,i) в пределах цикла.
  4. То же самое относится к суммированию. Вместо суммирования в цикле для получения суммарной суммы используйте cumsum, например Part = cumsum(randn(2,numParticles,200),3);, а затем обратитесь к Part(:,:,i), в пределах цикла.

Теперь к вашей задаче. Вы сказали, что хотите знать, как печатать, но я считаю, что вы хотите сделать сюжет, потому что вы используете некоторые команды, такие как axis, clf и hold, которые относятся к графическим объектам. Однако вы никогда ничего не делаете.
Основная и общая функция для построения в 2D - plot, но есть много других более конкретных функций. Один из них - scatter, и у него есть сестра-функция gscatter, которая берет тройки x, y и group и рисует каждый (x(k),y(k)) по цвету от их group(k).

Этот код выражает зависимость частиц по осям, и анимировать их движение:

prompt = 'Ge ett input'; 
scope = input(prompt) ; 
numParticles = input('Ange antal partiklar'); 
N = 500; 
Part = cumsum(randn(2,numParticles,N)*scope/100,3); 
h = gscatter(Part(1,:,1),Part(2,:,1),1:numParticles); 
axis([-scope scope -scope scope]); 
legend off 
for k = 2:N 
    for p = 1:numParticles 
     h(p).XData = Part(1,p,k); 
     h(p).YData = Part(2,p,k); 
    end 
    drawnow 
end 

Это то, что вы ищете?

+0

извините, только что вернулся домой и начал изучать его снова, попробуй свой код и посмотри, смогу ли я его понять :) –

+0

Вы можете попросить что-нибудь непонятное – EBH

+1

Думаю, я решил это с вашей помощью, ну, вы решили, но мне нужен код, который я понимаю :), спасибо за помощь, очень благодарен! –

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