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

lsqnonlin Ausgleichsproblem

 

savr1484
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2014, 12:35     Titel: lsqnonlin Ausgleichsproblem
  Antworten mit Zitat      
Hallo Leute, ich habe da mal eine Frage.

Ich habe vier nicht lineare Gleichungen mit 4 Unbekannten und möchte diese mit einem möglichst geringem Fehler lösen.
Hierfür wurde mir die "lsqnonlin"- Funktion geraten.

Diese habe ich dann mit Hilfe des Youtube-tutuorials http://www.youtube.com/watch?v=9GH1ndXMhJU
benutzt. Jedoch spuckt er mir immer irgend welche Fehler aus. Weiß jemand vielleicht was ich falsch gemacht habe??

Vielen Dank für eure Hilfe im vor raus.

Kugeilgleichung_2014_27_5.m
 Beschreibung:

Download
 Dateiname:  Kugeilgleichung_2014_27_5.m
 Dateigröße:  1.32 KB
 Heruntergeladen:  328 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich würde dringend empfehlen, sich zunächst an der MATLAB-Hilfe statt an irgendwelchen Tutorials zu orientieren. Um es freundlich zu sagen: ich würde den Code nie im Leben so schreiben!

Wenn ich das ausführe, kommt die Fehlermeldung aus der Zeile
"o_store(i,j)=x_s(1)"

Wenn du o_store mit x_s(1) belegen willst, schreibe einfach
Code:
o_store=x_s(1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
savr1484
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2014, 14:26     Titel:
  Antworten mit Zitat      
Hallo Harald,
ich hatte es mit der Matlab-Hilfe probiert, kam damit leider aber nicht weiter.
Wenn ich nun die letzten Zeilen ersetzte durch
o_store=x_s(1)
y_store=x_s(2)
z_store=x_s(3)
w_store=x_s(4)

bibt er mir Zwar Ergebnisse aus diese weichen jedoch sehr stark von der eigentlichen Lösung ab.
Hast du vielleicht eine Idee woran das liegen könnte?

Vielen Dank im vor raus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2014, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit sind schlechte Startwerte. lsqnonlin sucht nämlich nach einem lokalen Minimum.

Du kannst ja als Test mal die tatsächliche Lösung als Startwert angeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
savr1484
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2014, 14:58     Titel:
  Antworten mit Zitat      
Das ändert zwar die Ergebnisse macht diese jedoch nicht unbedingt Besser.

Er sollte ausgeben o=50 y=60 z=2 und w=40.
Gibt jedoch mit X0 =[0,0,0,0] :48.0522 36.9274 0.8925 64.9393 aus
und mit x0=[50,60,2,40]: 81.8097 87.7156 2.0000 78.6555 aus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2014, 16:01     Titel:
  Antworten mit Zitat      
Hallo,

wenn du deinen Wunschpunkt mit dem x_s bei [0,0,0,0] als Startwert vergleichst, dann kommt bei x_s etwas besseres raus:
Code:
norm(FW([50,60,2,40]))
norm(FW(x_s))


Vielleicht hast du dich bei den Gleichungen vertan?

Wenn die auskommentierten Gleichungen stimmen, dann müsste doch bei den tatsächlichen bei Termen wie (time(2)-time(1))*c_w ein - vorne dran stehen?

Unabhängig davon wirklich die Empfehlung, das so wie in der Doku umzusetzen statt mit dem merkwürdigen Umweg über syms und inline.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
savr1484
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2014, 16:08     Titel:
  Antworten mit Zitat      
Hallo Harald

Ich habe den Code jetzt so geschrieben, wie er im Handbuch steht, jedoch verändert er die Ergebnisse nicht, wenn ich den Startwert verändere hast du vllt eine Idee woran das liegen könnte?

Vielen Dank für deine Hilfe

Ort_2014_06_05.m
 Beschreibung:

Download
 Dateiname:  Ort_2014_06_05.m
 Dateigröße:  144 Bytes
 Heruntergeladen:  350 mal
myfun.m
 Beschreibung:

Download
 Dateiname:  myfun.m
 Dateigröße:  879 Bytes
 Heruntergeladen:  372 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.06.2014, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es mit deinem Startwert und [0 0 0 0] probiert, und ich bekomme leicht unterschiedliche Werte. Das heißt einfach, dass das Problem von beiden Startwerten zum selben Minimum konvergiert.

Ich habe auch mal [100 100 100 100] als Startwert probiert, und ich bekomme komplett andere Ergebnisse.

Ich kann das Problem also nicht so recht nachvollziehen.

Welches Release nutzt du?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
savr1484
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2014, 16:34     Titel:
  Antworten mit Zitat      
Achso, vielen Dank ich hatte nur (0 0 0 0) und den echten Punkt ausprobiert und da den Unterschied in der letzten Nachkommastelle nicht gesehen.

Ist es eigentlich möglich aus den harten Grenzen weiche zu machen? Soll heißen, der Algorithmus guckt sich die Grenzen an um ein besseres Ergebnis zu erhalten kann diese jedoch trotzdem unter bzw überschreiten?
Und kann ich die Genauigkeit von lsqnonlin noch irgend wie verbessern?

Vielen vielen Dank für deine Hilfe Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.06.2014, 16:42     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ist es eigentlich möglich aus den harten Grenzen weiche zu machen? Soll heißen, der Algorithmus guckt sich die Grenzen an um ein besseres Ergebnis zu erhalten kann diese jedoch trotzdem unter bzw überschreiten?

Meinst du Nebenbedingungen? Der Solver wird zunächst darauf achten, dass die Nebenbedingungen erfüllt sind und dann die Zielfunktion verbessern.
Wenn du die Nebenbedingungen aufweichen willst, dann am besten über Strafterme in der Zielfunktion:

zielneu = ziel + faktor*(Verletzung NB)

Grüße,
Harald
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
.





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

Hosted by:


Copyright © 2007 - 2025 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.