die als blaue Kurve in etwa so aussieht( schau Bild an).
Ich brauche eine Schleife, das die blaue Kurve so verändert, das die zur grüne wird und des roten Punkt dann schneidet. "n11" und "n21" sind die Steigungen dieser Funktion.Die muß man so verändern, dass diese grüne Kurve entsteht.
Meine Idee war so:Ich hab einen fest gegeben Punkt und lasse aus meine Funktion einen Punkt ausgeben beim gleichen y-Wert.
so ein Problem hatten wir ja schon mal, aber dieses Mal ist es doch deutlich verständlicher.
Wenn ich das richtig sehe, kannst du allein durch Variation von n11 sämtliche Abläufe abdecken? Die Frage wäre lediglich, wie "schnell" die Kurve durchlaufen wird.
Also... du willst, dass ein Punkt (x0, y0) durchlaufen wird. Für welches theta bzw. i? oder ist das egal...
Insbesondere bei geg. theta ist das für mich ein Optimierungsproblem:
Minimiere Abstand zwischen [x(n11, n21, theta), y(n11, n21, theta)] und (x0, y0)
Wenn es ansonsten keine Einschränkungen gibt, bietet sich fminunc zur Minimum-Suche an.
das theta oder i ist eigentlich egal. Es soll ja quasi so ablaufen:
Die Kurve wird erstellt und prüft ob der Punkt (px,py) auf der Kurve ist, wenn nicht verändere n11 und n21 solange, bis y3=px ist. py ist egal weiö es fest ist. Ich habe das mit schleifen versucht aber das klappt alles nicht.Verzweifle schon seit Tagen an dieses Problem!!!Kannst du mir vielleicht helfen. Das wäre echt super!!
sorry wenn ich so frage, aber: hast du meinen Post eigentlich ganz gelesen? Wie gesagt: ich würde es als Optimierungsproblem auffassen, und zu seiner Lösung fminunc verwenden.
So weit bin ich gekommen. Klappt aber leider nicht so, weil n11 und n21 gegen i gehen.wie kann ich denn schreiben, dass n11 und n21 stoppt, wenn y3=px ist? Ich muß sagen, dass ich nen Anfänger in Matlab bin und dadurch alles mir sehr schwer fällt!!
wenn du Probleme mit dem Programmieren hast, ist es vielleicht besser, wenn du deine Aufgabe in (klaren) Worten beschreibst.
Probleme im Code:
In der while-Schleife werden weder d_LD1 noch px verändert. Das wird also entweder nie ausgeführt, oder führt zu einer Endlosschleife.
Wozu berechnest du x_ga und y_ga, wenn du sie später nicht verwendest?
x und y werden dagegen verwendet, aber nie berechnet.
y3 == px liefert true / false zurück, wird aber nicht weiter verwendet.
Mir ist klar, dass theta bzw. i Vektoren (oder wie du sagtest: laufende Variablen sind). Nur wird es so sein, dass du theta fest wählen musst, wenn du zu einem eindeutigen n11, n21 kommen willst. Ansonsten bekommst du für jedes n11, n21 ein anderes theta.
Ohh sorry.Hat damit zutun, dass ich jedes mal wenn ich was reinstelle, versuche es so einfach wie möglich rein zu stellen und dadurch verändere ich immer die Namen der Variablen.So müßte es richtig heißen:
Ja, der Code ist jetzt stimmiger, aber was du letztlich damit erreichen willst, ist mir immer noch nicht klar.
Insbesondere: was ist mit n11 und n21?
Und wenn man dir helfen soll, wäre es schon gut, auf alle Fragen / Einwände einzugehen, insbesondere:
Code:
Nur wird es so sein, dass du theta fest wählen musst, wenn du zu einem eindeutigen n11, n21 kommen willst. Ansonsten bekommst du für jedes n11, n21 ein anderes theta.
Wie soll ich den theta festlegen?Wenn ich das mache, dann würde das bedeuten, dass ich nur einen einzigen Punkt irgendwo bei zum Beispiel theta=pi bekomme und keine Kurve mehr. Oder habe ich dich jetzt falsch verstanden!!
das theta würde ich fest legen (z.B. auf pi/4), um das n11 und n21 für den einen Punkt zu bestimmen. Danach würde ich theta wieder variabel gestalten, um die Kurve zu bekommen.
Wenn du einen Datensatz von d und h hast, und welcher Punkt auf der Kurve liegen soll, kann ich dir das auch mal zeigen, sofern das bis jetzt nicht klar geworden ist.
ok...
mit den ganzen Werten müßtest du jetzt was anfangen können:
Code:
function[xx,yy] = semiellipse(n11,n21)
n11=2; %fürs erste fest gesetzt
n21=2; % fürs erste fest gesetzt
h=3.5; % Höhe der der Kurve
d=8; % doppelte Breite der Kurve
n= 100; % Stützstellen
px=4.3; % x-Wert an dem die Kurve verändert wird
py=-1; % y-Wert an dem die Kurve verändert wird
for i=1:n+1 if theta(i) <= pi/2
x(i) = d/2 * abs(cos(theta(i))).^(2/n11);
y(i) = -h * abs(sin(theta(i))).^(2/n21);
end end
y3 =interp1(y,abs(x),-1,'nearest');
px = 4.3 ist > d/2, erscheint mir nicht sinnvoll, deswegen px = 3.4 genommen.
Man sieht: der Punkt liegt auf der Kurve. Die Kurve sieht allerdings nicht so aus wie in deinem Bild. Ausserdem bekommst du eine andere Kurve, wenn du theta anders wählst.
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.