WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Keine Lösung bei Anfangsschätzung mit vpasolve

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2021, 18:41     Titel:
  Antworten mit Zitat      
Hallo,

ich habe noch eine weitere Frage.

Gibt es eine Möglichkeit, die Gleichungen alle zusammen aufzustellen und gleichzeitig zu lösen und nicht, wie in meinem Beispiel, jedes y nacheinander?

Viele Grüße


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.03.2021, 22:43     Titel:
  Antworten mit Zitat      
Hallo,

warum sollte das nicht gehen?
Wenn du derzeit allerdings die gewünschten Lösungen bekommst, könnte das einfacher und effizienter sein, da du ausnutzt, dass die Gleichungen entkoppelt sind.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2021, 23:22     Titel:
  Antworten mit Zitat      
Hallo,

da die Punkte voneinander abhängen würde ich gerne ausprobieren, welche Lösungen ich rausbekomme, wenn ich ein Gleichungssystem aufbaue und dies in einem löse.

Wie gehe ich da am besten vor, dass ich das System aufbauen und danach lösen kann?

Vielen Dank.
Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2021, 09:35     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Punkte voneinander abhängen, war es aus meiner Sicht nie sinnvoll, die Gleichungen getrennt voneinander zu lösen (siehe 11.03.2021, 23:59).

Wenn ich das richtig verstehe, möchtest du Gleichungen für die Elemente einer Matrix aufstellen und lösen. fsolve arbeitet aber mit Vektoren, d.h. du musst die Matrix in einen Vektor umwandeln und nach Bedarf zurück, z.B. mit reshape . Ansonsten ist das Prinzip das gleiche wie bisher.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2021, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

ich habe leider noch nicht verstanden, wie ich das Gleichungssystem aufstellen muss, da ja aktuell eine Gleichung jeweils einen Vektor mit 3 Einträgen besitzt und diese an den Solver übergeben werden, um jeden Punkt nacheinander auzurechnen.

Da ich jetzt das komplette Gleichungssystem mit allen Punkten aufstellen möchte, um alle Punkte gleichzeitig zu lösen, muss ich das System doch anders aufbauen oder?

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2021, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

das Prinzip ist das gleiche, nur dass es jetzt n*3 Gleichungen mit n*3 variierbaren Unbekannten sind.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2021, 12:29     Titel:
  Antworten mit Zitat      
Hallo,

dh ich benutze meine Funktion wie vorher und berechne erstmal alle Gleichungen?
Danach löse ich mit fsolve alle Gleichungen gleichzeitig und gebe hierbei einen großen Vektor mit Anfangswerten vor?
Muss ich diese Gleichungen noch anders formulieren oder kann ich den G-Vektor dafür benutzen?

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2021, 13:18     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
dh ich benutze meine Funktion wie vorher und berechne erstmal alle Gleichungen?

Ich würde es so formulieren: deine Funktion sollte einen Vektor der Länge n*3 annehmen. Intern kannst du das mit reshape zu einer Matrix machen. Am Ende muss die Funktion einen Vektor der Länge n*3 zurückgeben. Jedes Element entspricht einer Gleichung, die = 0 gesetzt wird.

Zitat:
Danach löse ich mit fsolve alle Gleichungen gleichzeitig und gebe hierbei einen großen Vektor mit Anfangswerten vor?

Ja.

Zitat:
Muss ich diese Gleichungen noch anders formulieren oder kann ich den G-Vektor dafür benutzen?

Du benötigst einen großen G-Vektor.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2021, 17:36     Titel:
  Antworten mit Zitat      
Hallo,

ich habe jetzt folgenden Code geschrieben.
Ist dies richtig?


Code:
clear; close all; clc;

 n=10; % Verbindungen
 L=25; % Länge
 l=L/n; % Länge jeder Verbindung
 A= 2000000; %Steifigkeit 1
 B= 3000000; % Steifigkeit 2
 x=zeros(3, n+3);
 x(:,2)= [0;10;0]; % Startpunkt
 x(:,1)= [0;12.5;0]; % Punkt davor
 x(:,n+2)= [20;0;0]; % Endpunkt
 x(:,n+3)= [0;-2.5;0]; % Punkt danach
 
 
 a=((x(1, n+2)-x(1,2)))/(n);
 b=((x(2,n+2)-x(2,2)))/(n);
 
 % Startwerte
 for j=3:(n+2)
x(1,j)=x(1,j-1)+a;
x(2,j)=x(2,j-1)+b;
 end
 
for k=1:2 %Iterationen

    G= @(currentX) fun(currentX, x,l,A,B,n);
x0=reshape(x,[1 3*(n+3)]);
for i = 1:6
o = length(x0);
x0(o) = [];
end
x = fsolve(G,x0);
x=reshape(x,[3 n+1]);
 x(:,n+2)= [20;0;0]; % Endpunkt
 x(:,n+3)= [0;-2.5;0]; % Punkt danach
end  

function G = fun(currentX, x,l,A,B,n)
for i=3:(n+1)
y=currentX;

V(:,i)=y(:,i)-x(:,i-1); % Vektor von xi-1 zu xi
 Abstand(i)= sqrt(V(1,i)^2+V(2,i)^2+V(3,i)^2); % Abstand zwischen xi-1 und xi

 V(:,i+1)=x(:,i+1)-y(:,i); % Vektor von xi zu xi+1
 Abstand(i+1)= sqrt(V(1,i+1)^2+V(2,i+1)^2+V(3,i+1)^2); % Abstand zwischen xi und xi+1
 
 % Koeffizienten
 c_1(i)=(A)/Abstand(i);
 c_2(i)=(B)/Abstand(i);

 d(:,i)=V(:,i)/Abstand(i); % Einheitsvektor von Punkt i-1 zu Punkt i
 d(:,i+1)=V(:,i+1)/Abstand(i+1); % Einheitsvektor von Punkt i zu Punkt i+1
 
 F_1(:,i)=c_1(i)*(Abstand(i)-l)*d(:,i); % Kraft 1
 
 % 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));

% Kraft 2
 F_2(:,i)=(c_2(i)*e(i))*(cross(d(:,i),cross(d(:,i),d(:,i+1))))/(Abstand(i)*sin(e(i)));
 F_2(isnan(F_2))=0;
 
G(:,i)= F_1(:,i)+F_2(:,i);
end
G=reshape(G,[1 3*(n+1)]);

end



Viele Grüße
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2021, 17:46     Titel:
  Antworten mit Zitat      
Hallo,

ich glaube es müsste einen Fehler mit reshape geben, da die Anfangs- und Endwerte auch verändert werden.

Außerdem hatte ich noch einen Fehler in meinem Code:

Code:
x(:,n+3)= [20;-2.5;0]; % Punkt danach



Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2021, 18:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ist dies richtig?

Das kannst du besser beurteilen als ich.
Läuft der Code ohne Fehlermeldung durch? Wenn nicht, dann ist etwas nicht richtig. Um zu sehen was, wäre es hilfreich, wenn du die Fehlermeldung angibst.
Liefert der Code sinnvolle Ergebnisse? Falls nicht, bitte genau die Abweichungen von den erwarteten Ergebnissen erläutern.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2021, 18:40     Titel:
  Antworten mit Zitat      
Hallo,

ich bekomme keine Fehlermeldung, bei der das Matlab abbricht, mir wird jedoch folgendes angezeigt:

No solution found.

fsolve stopped because the last step was ineffective. However, the vector of function
values is not near zero, as measured by the value of the function tolerance.

<stopping criteria details>


Außerdem möchte ich die ersten beiden und letzten beiden x-Vektoren nicht verändern und nur die dazwischen liegenden berechnen. Also x(1), x(2), x(n+2), x(n+3) konstant halten.

Für die letzten beiden werden keine Gleichungen erstellt, deswegen gebe ich auch keine Anfangswerte vor.
Die ersten beiden Werte werden jedoch in der Berechnung ebenfalls verändert. Hier weiß ich nicht, wie ich das verhindern kann. Da die Erstellung der Gleichungen bei i=3 anfängt habe ich somit ja zwei leere Gleichungen vorher, die auch mit in die Berechnung eingehen.

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2021, 19:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die ersten beiden Werte werden jedoch in der Berechnung ebenfalls verändert. Hier weiß ich nicht, wie ich das verhindern kann.

Du musst die zu variierenden und die konstant zu haltenden Parameter getrennt übergeben. Ich nannte das in meinem Code-Vorschlag currentX (zu variierend) und x (konstant). Am klarsten dürfte es sein, wenn du currentX, leftBound und rightBound übergibst und dann x = [leftBound, currentX, rightBound] zusammensetzt und damit weiterarbeitest.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2021, 23:41     Titel:
  Antworten mit Zitat      
Hallo,

da innerhalb meiner Funktion die for Schleife erst bei 3 beginnt übergebe ich doch das currentX erst für x(3) oder liege ich da falsch?

Muss ich sonst die Schleifen vorher auch erstellen und hierbei das aktuelle x mit leftBound erstellen?


Außerdem habe ich noch das Problem, dass nur die erste Hälfte der x-Werte mittels fsolve verändert wird und die hinteren Werte auch nach mehreren Iterationen gleich bleiben. Woran kann dies liegen?

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.03.2021, 09:58     Titel:
  Antworten mit Zitat      
Hallo,

es ist für mich schwierig nachzuvollziehen, was du mit diesen Fragen meinst. Wenn man gemeinsam vor dem Rechner sitzen würde, würdest du wohl auf die entsprechenden Code-Zeilen zeigen, aber das geht hier ja schlecht bzw. begrenzt.

Zitat:
da innerhalb meiner Funktion die for Schleife erst bei 3 beginnt übergebe ich doch das currentX erst für x(3) ?

Vermutlich...

Zitat:
Muss ich sonst die Schleifen vorher auch erstellen und hierbei das aktuelle x mit leftBound erstellen?

Was meinst du mit "Schleifen vorher erstellen"?! leftBound sollte ja immer gleich bleiben, muss also außerhalb der an fsolve übergebenen Funktion erstellt und an diese übergeben werden.

Zitat:
Außerdem habe ich noch das Problem, dass nur die erste Hälfte der x-Werte mittels fsolve verändert wird und die hinteren Werte auch nach mehreren Iterationen gleich bleiben. Woran kann dies liegen?

Das kann z.B. daran liegen, dass eine Veränderung der hinteren Werte nicht zu besseren Zielfunktionswerten beitragen würde. Für eine genauere Analyse würde man deinen aktuellen Code benötigen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.