Gegeben seien in der Ebene drei feste Punkte , und , die nicht auf einer Linie liegen. Zusätzlich sei ein beliebiger Startpunkt.
Umgesetzt werden soll die folgende Iterationsvorschrift:
wobei in jedem Schritt zufällig aus gewählt wird. Schreiben Sie dazu ein Octave--Programm, welches den Startzustand und die ersten 5000 Iterierten visualisiert.
Und jetzt zur eigentlichen Frage. Ich möchte nicht, dass irgendjemand die Aufgabe löst, sondern will wissen, mit welchem Befehl ich Punkte überhaupt eingeben kann. Ich habe jetzt schon mehrere Stunden mit der Suche im Internet zugebracht und leider keine Lösung gefunden :/
Wenn ich wenigstens diesen Anfang hätte, könnte ich immerhin weiter herumprobieren, aber so habe ich nicht einmal einen Start von dem ich ausgehen kann. Mein Editor ist also noch vollkommen leer
Statt lange im Internet zu suchen, würde ich empfehlen die Getting Started Kapitel der Matlab Dokumentation durch zu lesen. Matlabs "Onramp" erklärt auch viele Details. Das hilft dann auch bei Octave.
for k=2:10 randi([1,3])% Das ist hier sinnfrei. Das Ergebnis wird gar nicht genutzt switchrand([1,3])% Dies erzeugt einen zufälligen [1 x 3] Vektor % im Wertebereich [0, 1]. Switch braucht aber einen Skalar case1
S(k) = (S(k-1) + P1) * 0.5;
case2
S(k) = (S(k-1) + P2) * 0.5;
case3
S(k) = (S(k-1) + P3) * 0.5;
endswitch
plot(S,'r')
endfor
"endswitch", "endfor"? Du arbeitest mit Octave. Bitte erwähne das oder poste in der Kategorie Octave.
Lies dir nochmal die Dokumentation zu
rand
und
randi
durch.
Zitat:
Das Problem ist halt, dass er nicht macht, was er soll, da ich keine Möglichkeit finde, ihm zu sagen, dass S(1) eben gerade (0,0) sein soll.
Allerdings ist das nicht "S(1)", sondern "S(1, :)". S(1) ist das erste Element des Vektors S.
Du könntest die Indices auch einfach weglassen:
Code:
P1 = [17,3];
P2 = [13,7];
P3 = [2,10];
S = [0,0];
plot(S(1), S(2), 'ro'); % Hier werden die Indices benötigt hold('on');
for k = 2:10 switchrandi([1,3])% randi() hier statt rand() case1
S = (S + P1) * 0.5;
case2
S = (S + P2) * 0.5;
case3
S = (S + P3) * 0.5;
end plot(S(1), S(2), 'ro');
end
Also, ich habe jetzt mal diese Variante probiert, da die Werte egal sind, sondern es eigentlich nur um den Plot geht:
Code:
P1 = [17,3];
P2 = [13,7];
P3 = [2,10];
S = [0,0];
plot(S(1), S(2), 'ro'); % Hier werden die Indices benötigt hold('on');
for k = 2:5000% geändert wegen Aufgabenstellung switchrandi([1,3])% randi() hier statt rand() case1
S = (S + P1) * 0.5;
case2
S = (S + P2) * 0.5;
case3
S = (S + P3) * 0.5;
end plot(S(1), S(2), 'b'); % geändert, damit vom Startwert unterscheidbar end
Außerdem habe ich noch k angepasst, da ich vergessen hatte das vor dem einstellen zu machen.
Jetzt entsteht da das Bild, was angehängt ist.
Also ich kann ja erkennen, dass es ein Sierpinski-Dreieck wird (btw soll es ja auch), aber warum liegt das jetzt so komisch schräg in der Ebene?
Zitat:
Du arbeitest mit Octave. Bitte erwähne das oder poste in der Kategorie Octave.
Zum einen dachte ich, da ich das in meiner Hauptfrage schonmal hatte, dass das nicht nochmal nötig ist, aber wenn es hilft, werde ich das natürlich in Zukunft berücksichtigen
Und die Existenz einer eigenen Kategorie war mir leider nicht bekannt, tut mir leid
Okay, danke. Das ist ja mal mehr als dämlich von mir
Gut dann danke ich für die schnellen und guten Antworten. Jetzt funktioniert wirklich alles perfekt, wie es soll
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.