Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleichungssystem innerhalb eines Wertebereichs lösen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2019, 10:34     Titel: Gleichungssystem innerhalb eines Wertebereichs lösen
  Antworten mit Zitat      
Hallo zusammen,
ich habe folgendes Problem:
In meiner Studienarbeit befasse ich mich mit dem Doehlert Desing (zur Optimierung der Anzahl meiner wissenschaftlichen Experimente). Aktuell bin ich in der Phase wo ich versuche Rechnungen aus verschiedenen Papern nachzuvollziehen damit ich später selber meine Ergebnisse berechnen kann. Ich bin nun an einem Punkt angekommen, an dem ich ein GLS mit 3 Gleichungen und 3 Unbekannten lösen muss. Das Ergebnis ist mir bekannt, komme aber selber nicht auf die Lösung. Die Lösung die ich Suche ist:
x = -1 & y = -0,577 & z = 0,816

Code:

syms x y z
Y = vpasolve([0.54 + (2*(-1.413)*x) + (1.126*y) + (0.606*z) == 0, (-0.250) + (1.126*x) + (2*(-0.696)*y) + ((-1.005)*z) == 0, (-1.502) + (0.606*x) + ((-1.005)*y) + (2*(-0.267)*z) == 0], [x,y,z],'Random',true)
 


Was mir jedoch
Code:

uSol =
 
-0.509500625273872564931880160871
 
 
uSol =
 
-5.1742486486288612803592179279336
 
 
uSol =
 
6.347120810779098899648491835366
 


ausgibt.

Wenn ich Schranken hinzufüge bekomme ich folgendes Ergebnis:

Code:

Y = vpasolve([0.54 + (2*(-1.413)*x) + (1.126*y) + (0.606*z) == 0, (-0.250) + (1.126*x) + (2*(-0.696)*y) + ((-1.005)*z) == 0, (-1.502) + (0.606*x) + ((-1.005)*y) + (2*(-0.267)*z) == 0], [x,y,z], [-1 1; -1 1; -1 1]);

uSol =
 
Empty sym: 0-by-1
 
 
uSol =
 
Empty sym: 0-by-1
 
 
uSol =
 
Empty sym: 0-by-1
 


Definiere ich vorher x, y und z mit den Werten aus dem gewünschten Ergebnis bekomme ich folgende Ausgabe:

Code:

Y=([0.54 + (2*(-1.413)*x) + (1.126*y) + (0.606*z) == 0, (-0.250) + (1.126*x) + (2*(-0.696)*y) + ((-1.005)*z) == 0, (-1.502) + (0.606*x) + ((-1.005)*y) + (2*(-0.267)*z) == 0])

Y =

  1×3 logical array

   0   0   0
 


Jetzt ist die Frage: Wie komme ich da hin? Übersehe ich was?
Gibt es noch eine Funktion wie vpasolve die hier angebrachter ist?

Bin für jede Hilfe sehr dankbar, komme nämlich nicht weiter!

Vielen Dank und liebe Grüße
biaxialerzug


Harald
Forum-Meister

Forum-Meister


Beiträge: 20.940
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 30.12.2019, 11:05     Titel:
  Antworten mit Zitat      
Hallo,

ich würde eine numerische Lösung über lsqlin versuchen.

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
 
biaxialerzug
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2019, 12:07     Titel:
  Antworten mit Zitat      
Vielen Dank für die Rückmeldung.
Ich habe mich an eine Anleitung gehalten https://scilab.in/fossee-scilab-too.....-toolbox/functions/lsqlin und habe eine weitere Lösung gefunden:

Code:

C =

   -2.8260    1.1260    0.6060
    1.1260   -1.3920   -1.0050
    0.6060   -1.0050   -0.5340

d =

   -0.5400
    0.2500
    1.5020

A =

   -2.8260    1.1260    0.6060
    1.1260   -1.3920   -1.0050
    0.6060   -1.0050   -0.5340

b =

     1
     1
     1


>> [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b);

 

womit
Code:

xopt =

   -0.2560
   -3.2752
    4.0008
 

als eine weitere Lösung rauskommt. Wie kann ich nun die untere Grenze festlegen?

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.940
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 30.12.2019, 12:10     Titel:
  Antworten mit Zitat      
Hallo,

die Wahl von C und d ist gut, die von A und b erscheint mir nicht sinnvoll.
Untere und obere Schranken kannst du als Argumente lb und ub angeben, siehe Doku.

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
 
biaxialerzug
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2019, 12:38     Titel:
  Antworten mit Zitat      
Dann brauche ich Hilfe bei der Wahl von A und b Sad Was wäre sinnvoll?

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.940
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 30.12.2019, 13:04     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die drei Gleichungen so lösen möchtest, dass alle Variablen zwischen -1 und 1 sind, dann hast du keine linearen Ungleichungen, also
Code:
[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d, [], [], [], [], -ones(3,1), ones(3,1))


Damit bekomme ich ein Ergebnis, dessen Residuum besser ist als das des erwarteten Ergebnis. Gibt es zusätzliche Nebenbedingungen, die anfangs nicht erwähnt wurden?

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
 
biaxialerzug
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2019, 13:50     Titel:
  Antworten mit Zitat      
Vielen Dank! Smile Das sieht schon mal besser aus!

Zitat:

Gibt es zusätzliche Nebenbedingungen, die anfangs nicht erwähnt wurden?


Das ist die Frage. Ich hole nochmal ein bisschen aus:
Ich mache eine Parameterstudie in Verbindung mit dem Doehlert Design. Ich bekomme 13 Parametersätze (bei 3 zu variierenden Größen) die ich auswerte. Das was ausgewertet wird ist die relative Dichte eines Werkstoffes, was gleichzeitig den Ergebnisvektor meiner Regression ist.
Wenn ich die 13 Versuche ausgewertet habe, mache ich eine Regression um 10 Koeffizienten zu bestimmen und bekomme eine Gleichung mit 3 Unbekannten. Davon bilde ich jeweils die partiellen Ableitungen und setze diese = 0 um das Minimum/Maximum zu berechnen. In diesem Fall ein Maximum, da die relative Dichte maximal sein soll. Im Doehlert Design selber sind die Parameter codiert und bewegen sich zwischen -1 und 1 (daher die Grenzen).
Ob das Ergebnis nun sinnvoll ist muss also noch interpretiert werden. Wenn bspw. für die Codierung -0,0789 rauskommt, kann ich das a) gar nicht so genau in meinen Parametern später angeben und b) gibt es vllt. schon Parametersätze in denen ein ähnlicher Wert (z.B. 0) vorkam und das Ergebnis bescheiden war.
Ich hoffe die Umgebnung ist ein bisschen deutlich geworden.

Gibt es vllt die Möglichkeit mehrere Lösungen ausgeben zu lassen?

LG und vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.940
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 30.12.2019, 14:39     Titel:
  Antworten mit Zitat      
Hallo,

ich kenne mich mit der Anwendung nicht aus und kann daher nur begrenzt helfen.

Zitat:
Wenn ich die 13 Versuche ausgewertet habe, mache ich eine Regression um 10 Koeffizienten zu bestimmen

Da muss einem bewusst sein, dass die Regression sehr anfällig gegenüber Messungenauigkeiten in den Versuchen sein wird. Normalerweise möchte man deutlich mehr Versuche als Parameter haben.

Die Lösung ist hier (vermutlich) eindeutig. Insbesondere liefert die Lösung von lsqlin ein besseres Residuum als das eigentlich gewünschte Ergebnis. Meine Vermutung ist also, dass eine Herausforderung schon in der Formulierung des Problems liegt, und ich kann leider höchstens bei der Umsetzung in MATLAB helfen.

Wenn es um die Berechnung eines Minimums geht, kann man auch speziell dafür gedachte Funktionen wie linprog oder fmincon verwenden.

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
 
biaxialerzug
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2019, 17:13     Titel:
  Antworten mit Zitat      
Der Sinn dieses Design of Experiments ist es ja, mit einer geringen Anzahl an Versuchen einen möglichst großen Raum halbwegs gut abzudecken. Das die Regression dann anfällig ist muss man hinnehmen.

Gibt es denn eine Möglichkeit, dass lsqlin z.B. 10 unterschiedliche mögliche Ergebnisse auf einmal ausgibt?

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 20.940
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 30.12.2019, 17:59     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Gibt es denn eine Möglichkeit, dass lsqlin z.B. 10 unterschiedliche mögliche Ergebnisse auf einmal ausgibt?

Nein, es sei denn, du passt die Problemstellung (z.B. die Schranken) an.
Die von dir gesuchte Lösung ist jedenfalls keine Lösung dieses Problems, da das Residuum (deutlich) schlechter ist.

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



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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.