% Winkel e
Kreuz(:,i)=cross(V(:,i+1),V(:,i)); % Kreuzprodukt für Zähler
e_1(i)=sqrt(Kreuz(1,i)^2+Kreuz(2,i)^2+Kreuz(3,i)^2); % Zähler des Bruchs
e_2(i)=dot(transpose(V(i+1)),V(i)); % Nenner des Bruchs
e(i)=atan(e_1(i)/e_2(i));
Für die Berechnung des Gleichungssystems lösche ich jeweils am Ende des Codes die ersten 6 Gleichungen, also für die ersten beiden x-Werte, die fest sind.
Ich gehe davon aus dass hier leere Gleichungen erstellt werden. Ist dies richtig und darf man dies machen?
Zusätzlich werden auch die ersten beiden x-Vektoren für die Vorgabe bei x0 gelöscht.
Am Ende jeder Iteration setze ich die neuen x-Werte wieder mit der left- und rightBound zusammen.
Mein Problem bei dem ganzen ist, dass ich das statische Gleichgewicht dieses Systems berechnen möchte, es jedoch nur etwa die erste Hälfte der Werte ändert und auch nur bei der ersten Iteration die Werte verändert werden.
Ab der zweiten Iteration bleiben die Werte gleich, obwohl ich ja die neuen x-Werte aus der ersten Iteration als Eingangswerte vorgebe.
Deshalb müsste hier ein Fehler in meinem Code sein, auf den ich leider nicht komme.
% Winkel e
Kreuz(:,i)=cross(V(:,i+1),V(:,i)); % Kreuzprodukt für Zähler
e_1(i)=sqrt(Kreuz(1,i)^2+Kreuz(2,i)^2+Kreuz(3,i)^2); % Zähler des Bruchs
e_2(i)=dot(transpose(V(i+1)),V(i)); % Nenner des Bruchs
e(i)=atan(e_1(i)/e_2(i));
Für die Berechnung des Gleichungssystems lösche ich jeweils am Ende des Codes die ersten 6 Gleichungen, also für die ersten beiden x-Werte, die fest sind.
Ich gehe davon aus dass hier leere Gleichungen erstellt werden. Ist dies richtig und darf man dies machen?
Zusätzlich werden auch die ersten beiden x-Vektoren für die Vorgabe bei x0 gelöscht.
Am Ende jeder Iteration setze ich die neuen x-Werte wieder mit der left- und rightBound zusammen.
Mein Problem bei dem ganzen ist, dass ich das statische Gleichgewicht dieses Systems berechnen möchte, es jedoch nur etwa die erste Hälfte der Werte ändert und auch nur bei der ersten Iteration die Werte verändert werden.
Ab der zweiten Iteration bleiben die Werte gleich, obwohl ich ja die neuen x-Werte aus der ersten Iteration als Eingangswerte vorgebe.
Deshalb müsste hier ein Fehler in meinem Code sein, auf den ich leider nicht komme.
Ich habe an allen Punkten nach der Iteration die Kräfte berechnet und diese sind nicht Null oder nahe Null, deswegen sollte ich auch nach der ersten Iteration nicht das statische Gleichgewicht getroffen haben.
Viele Grüße
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.03.2021, 15:25
Titel:
Hallo,
ich habe herausgefunden, dass innerhalb meiner Funktion durch i=3n+1) nur der dritte bis n+1 Wert aus meinen gewünschten Vektoren verändert werden.
In dem angehängten Bild habe ich es nochmal markiert um es zu zeigen.
Ich vermute das liegt an meinem reshape.
Das Problem ist, dass ich mein Gleichungssystem schon mit Vektoren aufbauen möchte, da meine Kräfte ja von allen 3 Korrdinatenrichtungen abhängen und sich das jeweilige x(i-1) und x(i+1) auf die kompletten Vektoren beziehen soll.
Wie kann man dies machen?
Es war jetzt relativ viel und ich hoffe man kann verstehen was ich alles in meinen Punkten meine.
% Winkel e
Kreuz(:,i)=cross(V(:,i+1),V(:,i)); % Kreuzprodukt für Zähler
e_1(i)=sqrt(Kreuz(1,i)^2+Kreuz(2,i)^2+Kreuz(3,i)^2); % Zähler des Bruchs
e_2(i)=dot(transpose(V(i+1)),V(i)); % Nenner des Bruchs
e(i)=atan(e_1(i)/e_2(i));
Bei deinem Startpunkt wird dann durch 0 dividiert, wobei NaN herauskommt.
Da du im Falle von NaN auf 0 setzt, wird die Gleichung als gelöst betrachtet. Das ist denkbar unklug. Meine Empfehlung wäre stattdessen ein anderer Startpunkt.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.03.2021, 15:20
Titel:
Hallo,
vielen Dank für die Hilfe.
Auch wenn ich andere Start- und Endwerte wähle, ändern sich nach einer Iteration die x-Werte nicht mehr und ich bekomme immer die gleiche Lösung, egal wie viele Iterationen ich wähle.
Ich habe auch für NaN sehr große Werte eingesetzt, es ändert sich aber nichts.
Muss ich noch etwas ändern, damit die Werte in allen Iterationen näher zum statischen Minimum geändert werden.
Gibt es eine Möglichkeit, in die Funktion zusätzlich eine Bedingung einzubauen, dass das Minimum der Energie gefunden wird?
Ich glaube nämlich dass mehrere Lösungsmöglichkeiten vorhanden sind und ich somit eine Bedingung hätte, dass meine gewünschte Lösung gefunden wird.
falls es ein Missverständnis gab: mit Startpunkt meine ich x0. leftBound und rightBound sind ja Teil deines Problems - es bringt nichts, das zu ändern.
Zitat:
egal wie viele Iterationen ich wähle.
Es ist nicht sinnvoll, über fsolve zu iterieren, außer du möchtest unterschiedliche Gleichungssysteme lösen. fsolve iteriert intern.
Zitat:
Muss ich noch etwas ändern, damit die Werte in allen Iterationen näher zum statischen Minimum geändert werden.
Was ist ein "statisches Minimum"?
Zitat:
Gibt es eine Möglichkeit, in die Funktion zusätzlich eine Bedingung einzubauen, dass das Minimum der Energie gefunden wird?
Ich glaube nämlich dass mehrere Lösungsmöglichkeiten vorhanden sind und ich somit eine Bedingung hätte, dass meine gewünschte Lösung gefunden wird.
Das ist dann ein komplett anderes Problem: ein Optimierungsproblem. Das kannst du z.B. mit
fmincon
lösen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.03.2021, 17:14
Titel:
Hallo,
Harald hat Folgendes geschrieben:
Es ist nicht sinnvoll, über fsolve zu iterieren, außer du möchtest unterschiedliche Gleichungssysteme lösen. fsolve iteriert intern.
Meine Idee war bei jeder Iteration als neues x0 die aktuellen x-Werte vorzugeben, wodurch sich der Verlauf nach und nach bildet, da jedes mal neue Anfangswerte vorgegeben werden. Ist dies nicht sinnvoll?
Harald hat Folgendes geschrieben:
Was ist ein "statisches Minimum"?
Sorry meinte das statische Gleichgewicht, also dort, wo an jedem Punkt die Kräfte null oder nahe null sind.
Harald hat Folgendes geschrieben:
Das ist dann ein komplett anderes Problem: ein Optimierungsproblem. Das kannst du z.B. mit
fmincon
lösen.
Okay, das heißt, ich müsste mein System wieder neu aufbauen?
Meine Idee war bei jeder Iteration als neues x0 die aktuellen x-Werte vorzugeben, wodurch sich der Verlauf nach und nach bildet, da jedes mal neue Anfangswerte vorgegeben werden. Ist dies nicht sinnvoll?
Welcher Verlauf denn? Du suchst doch eine Lösung?
fsolve versucht ja, eine Lösung zu finden. Entweder
* hat fsolve schon eine Lösung gefunden. Dann bringt es nichts, die nochmal als Startwert zu verwenden.
* hat fsolve sich festgelaufen. Auch dann bringt es nichts, den Endstand nochmal als Startwert zu verwenden.
* ist fsolve nicht innerhalb der vorgegebenen Abbruchskriterien fertiggeworden. Dann sollte man aber die Abbruchskriterien ändern statt den momentanen Stand als neuen Anfangswert zu verwenden.
Zitat:
Okay, das heißt, ich müsste mein System wieder neu aufbauen?
Nicht komplett neu, aber umschreiben. Die Funktion, die die Gleichungen beschreibt, dürftest du ziemlich direkt als Nebenbedingungsfunktion verwenden können. Und dann benötigst du noch die Zielfunktion.
Du meintest ja, du willst E minimieren, aber das ist ja ein Vektor. Willst du die Summe der Quadrate minimieren, oder was willst du minimieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.03.2021, 20:12
Titel:
Harald hat Folgendes geschrieben:
Welcher Verlauf denn? Du suchst doch eine Lösung?
Ich meinte den Verlauf der Punkte, die ich berechne.
Okay dann habe ich wahrscheinlich fsolve falsch verstanden. Ich wollte dass sich das Ergebnis schrittweise in jeder Iteration ausbildet, womit Schritt für Schritt die neuen Punkte so berechnet werden, dass die Kräfte sich verringern und Null oder fast Null werden.
In meiner Vorlage hatten sie es so mit dem Newton Verfahren und Verfahren der konjugierten Gradienten gemacht und dachte, dass dies mit fsolve auch möglich ist.
Zitat:
Du meintest ja, du willst E minimieren, aber das ist ja ein Vektor. Willst du die Summe der Quadrate minimieren, oder was willst du minimieren.
Okay dann habe ich wahrscheinlich fsolve falsch verstanden.
Darf ich mal fragen, ob du die Dokumentation mal gründlich gelesen hast?
Zitat:
In meiner Vorlage hatten sie es so mit dem Newton Verfahren und Verfahren der konjugierten Gradienten gemacht und dachte, dass dies mit fsolve auch möglich ist.
Nochmal: fsolve macht dies intern. Lies bitte die Referenzen unter "Algorithms", um das im Detail zu verstehen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.03.2021, 20:27
Titel:
Hallo,
Harald hat Folgendes geschrieben:
Darf ich mal fragen, ob du die Dokumentation mal gründlich gelesen hast?
Ja ich habe es gelesen, aber mache gerade zum ersten Mal etwas mit Matlab und habe leider nicht alles direkt verstanden, sorry für die Umstände.
Viele Grüße
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.03.2021, 16:34
Titel:
Hallo,
ich habe doch nochmal eine Frage.
Zur Veranschaulichung würde ich gerne das Ergebnis jeder Iteration plotten lassen und daraus ein Video erstellen.
Ich finde aber leider nur die Möglichkeit, bei fsolve in options durch "'PlotFcn',@optimplotx" mir etwas anzeigen zu lassen. Hätte aber gerne das was ich in der plot Funktion sehen kann.
Ist dies möglich oder kann ich nicht auf die Ergebnisse und dadurch den Plot der einzelnen Iterationen in fsolve zugreifen?
du kannst deine eigenen Plot oder Output Functions definieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.