|
|
|
alle Nullstellen in einem bestimmten Intervall berechnen |
|
| Janine |

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 07.01.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.07.2012, 21:30
Titel: alle Nullstellen in einem bestimmten Intervall berechnen
|
 |
| |
 |
|
Hallo,
ich habe mal wieder ein Problemchen. Eingetlich sollte es nicht so schrecklich kompliziert sein, aber ich komme irgendwie auf keinen grünen Zweig.
Nun zu meinem Problem:
Ich löse ein Nullstellenproblem mit fsolve und übergebe hier natürlich einen Startwert. Jetzt möchte ich meine Funktion aber gerne so implementieren, dass ich dieser ein Intervall z.B. in Form eines 2-dim. Vektors übergebe mit unterer und oberer Grenze. Da ich mir aufgrund des Rechenaufwands allerdings nicht leisten möchte z.B. in 0.1-Startwertschritten mein Intervall abzulaufen, dachte ich an eine Art Intervallhalbierungsmethode. Ich nehme mir die beiden Grenzen als Stratwerte und berechne die resultierenden Nullstellen. Sobald 2 Ergebnisse dann gleich sind, kann ich die Suche in diese Richtung abbrechen. Aber genau in der Ümsetzung liegt mein Problem.
1. Ist es überhaupt sinnvoll, das Ganze auf diese Weise zu lösen? Oder gibt es in Matlab vielleicht sogar schon einen Befehö für so etwas (den ich nur nicht gefunden habe)?
2. Wenn es sinnvoll ist, wie implementiere ich das dann? Hab da gerade irgendwie nen Knoten im Hirn, den ich selber nicht auf bekomme
Vielleicht trotzdem schon mal mein Stand der Dinge:
Ich habe eine Funktion mitte(x1,x2) geschrieben, die mir die Nullstelle zum in der Mitte liegenden Startwert m=(x1+x2)/2 berechnet und 1 zurückgibt falls NS(x1)=NS(m),
2 zurückgibt falls NS(x2)=NS(m)
und 0 falls der Wert verschieden ist.
Ich dachte die sei vielleicht hilfreich... Aber eine Schleife, die iterativ prüft bekomme ich irgendwie nicht zu Stande.
Wäre toll, wenn mir jemand einen Tipp geben könnte, oder das Brett vor meinem Kopf wegnehmen!
Viele Grüße,
Janine
|
|
|
|
|
|
| Janine |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 07.01.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2012, 09:05
Titel:
|
 |
| |
 |
|
Ok, ich habe das jetzt gestern mal noch so ausgebaut, dass es funktionieren könnte und bekomme nun die Fehlermeldung, dass die Funktion nach 500 Iterationen abgebrochen wurde. Klar könnte ich diese Zahl erhöhen, aber eigentlich möchte ich ja eine effektive Art finden, um alle Nullstellen auf dem Intervall zu suchen. Vielleicht habe ich auch irgendetwas falsch gemacht.
Auf jeden Fall dachte heute Morgen noch an einen weiteren Ansatz:
1. Ich werte z.B. 10 Stellen aus dem Intervall mit fsolve aus und speichere sie in einer Matrix (immer Wertepaare aus Nullstelle und Startwert)
2. Ich prüfe, ob ob 2 nebeneinanderliegende Einträge eines Vektors identisch sind.
3. Falls nein, wähle ich einen Startwert der zwischen den beiden Startwerten liegt, die auf diese Werte geführt haben und füge das neue Wertepaar zwischen diesen beiden ein.
4. Ich springe solange wieder zu Schritt 2, bis jede Nullstelle mind. 2x in meiner Matrix steht.
5. Lösche mit unique gleiche Werte.
Nun rechnet Matlab allerdings schon einige Minuten munter vor sich hin... Und es scheint nicht so, als würde sich demnächst ein Ende finden. Effektiv nenne ich also was anderes
Hat dazu jemand vielleicht spontan ne Idee? Falls gewünscht, kann ich auch mal meinen Code posten...
|
|
|
|
| Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2012, 09:35
Titel:
|
 |
ich vermute mal das es nicht so einfach ist alle Nullstellen einer beliebigen Funktion zu finden. Was ist z.B. mit f(x) = sin(1/x). Man weiß eigentlich nie ob man auch alle Nullstellen hat.
Wenn man ein bisschen mehr über die Funktion weiß, kann man sicherlich was machen.
Im übrigen hilft dir vielleicht fzero weiter. Wenn man für x0 ein Intervall angibt wird ein Bisektionsverfahren angewandt um eine Nullstelle zu bestimmen.
viele Grüße
Thomas
|
|
|
|
|
|
|
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.
|
|