|
|
Iterationsschleife trifft Grenzbereich nicht |
|
corleone13375 |

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 18.09.15
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: R2015b
|
 |
|
|
 |
|
Verfasst am: 02.05.2017, 16:52
Titel: Iterationsschleife trifft Grenzbereich nicht
|
 |
|
 |
|
Hallo,
ich habe ein (vielleicht eher mathematisches) Problem bei dem ich nicht weiter komme.
Für eine Approximation habe ich eine Gleichung welche von den Parametern k_1 und k_2 abhängig ist (Potenzregression). Ich möchte nun über eine Iterationsschleife die Faktoren k_1 und k_2 bestimmen.
Dabei habe ich versehentlich zuerst eine fehlerhafte Gleichung eingebaut, mit der die Iteration funktioniert.
Die Gleichung für q_max_i_iteriert hat jedoch Klammern an den falschen Stellen. Die korrekte Gleichung muss lauten:
Wenn ich die Gleichung in dem Code berichtige, dann funktioniert jedoch meine Iteration nicht mehr. Mit der falschen Gleichung wurde das Ergebnis sofort angezeigt und mit der korrigierten Gleichung ist Matlab Busy, also rechnet die ganze Zeit.
Ich habe mir nun schon soweit Gedanken gemacht, dass wohl der Bereich zwischen den Iterationsgrenzen (untere_Iterationsgrenze und obere_Iterationsgrenze) nicht getroffen werden und die while-Schleife dabei bei einem n-ten Durchlauf von oberhalb der oberen Iterationsgrenze nach unterhalb der unteren Iterationsgrenze springt und somit nicht aus der Schleife raus kommt.
Wenn ich die Iterationsgrenzen vergrößere, dann funktioniert die Iteration wieder. Allerdings ist mir dann das Ergebnis zu ungenau. Die Idee war ja, dass die Abweichung quot_summe_q_t=q_max_iteriert / q_max_i nur +-Ein-Tausendstel beträgt.
Meine nächste Idee war es die Faktoren 0.99 bzw. 1.01 mit denen k_2 iterativ angepasst wird zu verfeinern. Bei einer Änderung auf 0.9999 bzw. 1.0001 funktioniert die Iteration auch nicht. Mehr Nachkommastellen kann ich ja nicht verwenden, oder?
Ich habe keine vpa-Toolbox für symbolisches rechnen.
Hat jemand eine Idee wie ich das Problem lösen kann oder zumindestens eine Einschätzung ob ich bei der Fehlersuche auf dem richtigen Weg bin?
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.05.2017, 22:51
Titel:
|
 |
Hallo,
schau dir doch mal im Debugger an, wie sich die Variablen entwickeln.
Wenn ich das richtig verstehe, willst du letztlich eine Gleichung lösen? Dafür würde sich fsolve oder fzero anbieten.
Grüße,
Harald
|
|
|
corleone13375 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 18.09.15
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: R2015b
|
 |
|
|
 |
|
Verfasst am: 03.05.2017, 10:35
Titel:
|
 |
Ich hab mir die Entwicklung von quot_summe_q_t mit dem Debugger mal angeschaut und denke, dass der Bereich zwischen den Abbruchbedingungen (untere und obere Iterationsgrenze) der Schleife tatsächlich nicht getroffen wird, da die Änderungen zu grob sind.
Ja, ich möchte die Gleichung x=k_1*y^k_2 bei bekanntem x und y lösen, also die Werte für k_1 und k_2 bestimmen.
fsolve kann ich nicht verwenden, da ich keine Optimization Toolbox habe.
fzero könnte ich verwenden, aber ich habe bisher nur Gleichungen mit einer Unbekannten damit gelöst. Ist das auch für mehrere möglich?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.05.2017, 10:43
Titel:
|
 |
Hallo,
da du k_1 in Abhängigkeit von k_2 bestimmst, kann man es so sehen, dass du eigentlich nur k_2 variierst (und k_1 eben entsprechend mit).
Alternativ kannst du fminsearch verwenden und die Abweichung minimieren.
Grüße,
Harald
|
|
|
corleone13375 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 18.09.15
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: R2015b
|
 |
|
|
 |
|
Verfasst am: 03.05.2017, 15:19
Titel:
|
 |
Ich habe es mal mit fminsearch probiert, aber die Werte erscheinen mir nicht so plausibel. Außerdem sind sie ja stark von den gewählten Startwerten abhängig.
Es führt zu der Ausgabe:
Hab ich fminsearch denn richtig implementiert?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.05.2017, 15:24
Titel:
|
 |
Hallo,
Achtung: fminsearch löst keine Gleichung, sondern es minimiert. Wenn du also a = b erreichen möchtest, dann müsstest du (a-b).^2 minimieren.
Davon abgesehen steige ich nicht ganz durch, was hier gemacht werden soll. Die Lösung der Gleichung ist ja offensichtlich: wähle k_1 als x/(y^k_2).
Da muss es dann doch noch andere Einschränkungen geben? Z.B. dass x und y jeweils Vektoren sind und k_1 und k_2 so gewählt werden sollen, dass es insgesamt möglichst gut passt?
Grüße,
Harald
|
|
|
corleone13375 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 18.09.15
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: R2015b
|
 |
|
|
 |
|
Verfasst am: 03.05.2017, 16:56
Titel:
|
 |
Du meinst so:
?
Die Werte erscheinen nun schon realistischer
Allerdings sind sie immer noch stark von den Startwerten abhängig.
Aus
sollen einmal Wertepaare erzeugt werden, welche die Basis für die Approximation bilden. Die Werte entstehen dabei durch dei Wahl eines Wertebereiches von Null bis q_max_i.
Ich dachte aber dass man die Faktoren erstmal für einen Wert bestimmen kann.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.05.2017, 19:16
Titel:
|
 |
Hallo,
Zitat: |
Allerdings sind sie immer noch stark von den Startwerten abhängig. |
Das ist kein Wunder, weil jede Kombination von k1 und k2 eine Lösung ist, falls
k_1 = x/(y^k_2). Anders gesagt, für jedes k2 gibt es ein k1, so dass die Gleichung gelöst wird.
Zitat: |
Ich dachte aber dass man die Faktoren erstmal für einen Wert bestimmen kann. |
Das halte ich aus o.g. Gründen nicht für sinnvoll.
Grüße,
Harald
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|