zu doof für MATLAB?

Fireball89

Captain
Registriert
Aug. 2007
Beiträge
3.498
Hallo,

habe bereits etwas im Bereich Mechatronik mit Simulink gearbeitet.
Jetzt will ich n ganz einfachen plot in MATLAB machen.
n hängt von p und mehreren definierten konstanten ab.

jetzt möchte ich n über p plotten mit p=0.0001 bis 1

Wie schwer kann das sein? ich hab alles probiert. Wenn ich einen Bereich für p angeben will, ist p gleich ein Vektor und meine n-Funktion kann mit Vektoren nichts anfangen.
Definiere ich p als konstante Zahl, hat das Plot-Fenster keine Kurve -.-

Ich habe bereits 2 std. gegoogelt und kriegs einfach nicht auf die Reihe!

Verrät mir einer die Lösung?
 
Das einfachste ist wenn du deiner Funktion den Umgang mit Vektoren beibringst. Wie das für deine Funktion aussieht kann ich ohne deren Kenntnis nicht verraten, allerdings ist ein wesentlicher Punkt die punktweise Ausführung von diversen Operationen. Für zwei Vektoren x,y der selben Länge bekommst du etwa eine punktweise Multiplikation durch "x.*y". Analog funktioniert das für viele andere Operationen.
 
Soweit ich das richtig verstehe, hast du also n = f(p) und willst einen Plot (p,n) erstellen. Wenn deine Funktion keine vektorwertigen p akzeptiert, dann kannst du die "harte" Methode verwenden, sprich den Vektor mittels einer for-Schleife auflösen. Die Lösung sieht dann in etwa so aus:

p=0.0001:0.0001:1;
for i=1:length(p)
n(i)=f(p(i))
end
plot(p,n)

Durch die for-Schleife ist immer nur ein Skalar die Eingabegröße von f, das sollte hoffentlich funktionieren.

Der Vollständigkeit halber will ich nur anmerken, dass eine derartige Auflösung von Vektoren nur eine Notlösung ist. Von der Rechenzeit her ist das ziemlich ineffizient, weswegen man sowas normalerweise vermeiden sollte. In dem Fall ist die von dOM89DoM vorgeschlagene Vorgehensweise zu empfehlen.
 
sehr gut, die Lösung von Faluröd funktioniert schon mal.

Aber jetzt bin ich am "richtigen Weg" interessiert.
Also:

n = (a*r) / ((a*r+b*r+2*d)*(1+2*p)+2*p*timeout);

Durch die Division klappts nicht mit Vektoren. Was muss ich nun ändern?
 
Für skalare Grössen a, r, b, d, timeout sollte
n = (a*r) ./ ((a*r+b*r+2*d)*(1+2*p)+2*p*timeout);
das gewünschte sein.
 
...und lieber mal zu oft den Punkt setzen.
Ich habe mir angewöhnt fast immer den Punkt zu setzen. (wenn du keinen Vektor hast, funktionierts einwandfrei, und wenn du skalar rechnen willst gehts nur so)
 
wunderbar, funktioniert. Vielen Dank!
Der Punkt steht also für "komponentenweise"?
 
Zurück
Oben