2016-09-22 2 views
1

Zunächst möchte ich nur sagen, dass ich nicht gewohnt bin Matlab zu verwenden, aber ich brauche für eine Aufgabe, ich soll eine "Brownian Bewegung" erstellen. Mein Code sieht derzeit wie folgt aus:Plotten brownian motion 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; 

Meine Sorge ist, wie drucke ich auf jeden Druck wie eine kleine Verzögerung auch wünschen würde, so dass Sie wirklich sehen können, was für die Zuordnung geschieht, ist dies möglich, zu erreichen, aus dem Code, den ich für jetzt geschrieben habe oder sollte etwas geändert werden? Danke im Voraus!

+1

Sie können Ihre erste Schleife durch 'Part = Nullen (2, numParticles) ersetzen;' – EBH

+0

Es gibt die ['Pause'] (https://de.mathworks.com/help/matlab/ref/pause.html) Befehl. –

Antwort

0

Hier sind einige grundlegende Probleme mit Ihrem Code, unabhängig davon, was Sie zu tun versuchen:

  1. Sie size als Variablennamen verwenden. Dies überschreibt die MATLAB-Funktion size.
  2. Die Funktion zeros erstellt ein Array initialisiert durch Nullen, keine Notwendigkeit für eine Schleife dafür.
  3. Anstatt randn für 200-mal in einer Schleife zu berechnen, können Sie es einmal mit tun und dann einfach innerhalb der Schleife auf dxdy(:,:,i) verweisen.
  4. Das gleiche gilt für die Summierung. Anstatt innerhalb einer Schleife zu summieren, um die kumulative Summe zu erhalten, verwenden Sie cumsum wie Part = cumsum(randn(2,numParticles,200),3); und dann innerhalb der Schleife auf Part(:,:,i).

Nun zu Ihrer Aufgabe. Sie sagten, Sie möchten wissen, wie gedruckt wird, aber ich glaube, Sie möchten plot, weil Sie einige Befehle wie axis, clf und hold verwenden, die sich auf Grafikobjekte beziehen. Aber du machst nie wirklich etwas.
Die grundlegende und allgemeine Funktion für das Zeichnen in 2D ist plot, aber es gibt viele andere spezifischere Funktionen. Einer von ihnen ist scatter, und es hat eine Schwesterfunktion gscatter, die Tripel von x, y und group nimmt und plotten jedes (x(k),y(k)) gefärbt durch ihre group(k).

Dieser Code zeichnet die Partikel auf einer Achse, und ihre Bewegung animieren:

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 

Ist das, was Sie suchen?

+0

Entschuldigung, bin gerade nach Hause gekommen und habe angefangen, es nochmal zu studieren, werde deinen Code ausprobieren und sehen, ob ich das auch verstehen kann :) –

+0

Du kannst gerne etwas fragen, das unklar ist – EBH

+1

Denke ich habe es mit deiner Hilfe gelöst, naja, Sie haben es gelöst, aber ich brauche Code, den ich verstehe :), vielen Dank für die Hilfe, sehr geschätzt! –