Schnittpunkte zweier Funktionen berechnen

Neue Frage »

Bienenmichl Auf diesen Beitrag antworten »
Schnittpunkte zweier Funktionen berechnen
hallo zusammen!

ich habe folgendes Problem:
,
wobei
und .

Davon soll ich die Schnittpunkte berechnen.
Allerdings geht das nur nummerisch und mein Professor meinte mit dem FindRoot-Befehl in Mathematica8 geht das. Ich brauch aber nicht nur einen Wert, den mir Wolfram da ausspuckt, sondern ich sag mal die ersten 200-300.
Kann mir jemand behilflich sein?
Steffen Bühler Auf diesen Beitrag antworten »
RE: Schnittpunkte zweier Funktionen berechnen
Nimm das Newton-Verfahren, das dürfte recht schnell konvergieren. Kommst Du klar damit? Ansonsten melde Dich.

Viele Grüße
Steffen
Bienenmichl Auf diesen Beitrag antworten »
RE: Schnittpunkte zweier Funktionen berechnen
Newton is mir schon klar, aber das gibt mir ja wieder nur einen Punkt, der in der Nähe von meinem startwert liegt. Ich brauche aber mehr Schnittpunkte als den einen. Oder lieg ich da falsch?

Lg michl
Steffen Bühler Auf diesen Beitrag antworten »
RE: Schnittpunkte zweier Funktionen berechnen
Ich hab's jetzt nicht durchprogrammiert, aber der erste Schnittpunkt ist ja bei etwa 62,77, und durch die pi-Periodizität des Tangens kannst Du den Startwert für die nächsten Schnittpunkte immer um etwa 125 weiter nach oben legen, dann sollte automatisch der nächste herauskommen.

Viele Grüße
Steffen
Bienenmichl Auf diesen Beitrag antworten »

Darf ich dich fragen wie du das programmiert hast? Ich habe es nämlich auch versucht und bekomm als ersten Wert ca. 2000 raus und die nächsten alternieren, was absoluter Schwachsinn ist. Kann meines gerade nicht reinstellen weil ich vom Handy aus schreibe.
Das mit 62 und den folgenden um 125 versetzt macht Sinn. Ich kriegs nur eben nicht raus.
Danke für die Mühe
Bienenmichl Auf diesen Beitrag antworten »

Hab in Mathematica weitergetüftelt:
Do[Print[FindRoot[Tan[x*L] == a1/x, {x, i}]], {i, 62.77, 10000, 125}]
kommen "gute" Werte raus.
(62.7, 188.3, 313.8, 439.4, ...)

geb ich allerdings
Do[Print[FindRoot[Tan[x*L] == a1/x, {x, i}]], {i, 62, 10000, 125}]
ein, haut der erste Wert ab.
(941.5, 188,3)
Das so eine minimale Abweichung soviel ausmacht?

Danke Steffen für den Hinweis.
 
 
Bienenmichl Auf diesen Beitrag antworten »
FindRoot in Mathematica
Hallo zusammen. bin mal wieder auf diese Rechnung gestoßen und hab damit wieder mal probleme. Nämlich

h1=41820.7
L=0.025

lambdan =
lambda /.
Table[FindRoot[Tan[lambda*L] == h1/lambda, {lambda, i}], {i, 62.77,
1000, 125}]

gibt mir sauber Werte aus.
{62.7718, 188.315, 313.859, 439.403, 564.946, 690.49, 816.034, \
941.577}

ich brauch aber jetzt viiiiiiiel mehr Werte als diese. Also geb ich

lambdan =
lambda /.
Table[FindRoot[Tan[lambda*L] == h1/lambda, {lambda, i}], {i, 62.77,
100000000, 125}]
ein. dann kommt

FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances. >>

und

General::stop: Further output of FindRoot::lstol will be suppressed during this calculation. >>


Da ich nicht wirklich Ahnung von Mathematica hab hoffe ich dass mit hier jemand helfen kann. Ich habe mit WorkingPrecission und dergleichen herumgespielt, war aber nicht erfolgreich.
für den kleinsten Tipp bin ich dankbar.
Steffen Bühler Auf diesen Beitrag antworten »
RE: FindRoot in Mathematica
Bevor wir das Ganze ins "Programme"-Unterforum verlagern, weil das ja eine sehr spezielle Mathematica-Frage ist, noch mal der Hinweis, dass die genannte Periode von ungefähr 125 ja korrekt der Wert ist. Du liegst also schon beim ersten Startwert um 0,6637... daneben, und dieses Danebenliegen verdoppelt sich mit jedem weiteren Schritt - bis eben der Startwert so hoffnungslos unpassend ist, dass Mathematica keine Chance mehr hat.

Mit der Fehlermeldung selbst kann ich allerdings nichts anfangen, ich habe mit diesem Programm noch nie gearbeitet.

Viele Grüße
Steffen
Huggy Auf diesen Beitrag antworten »
RE: FindRoot in Mathematica
Wenn man FindRoot einen Startwert gibt, verwendet es das Newtonverfahren, falls Mathematica die auftretenden Funktionen ableiten kann. Das Newtonverfahren konvergiert aber nicht immer. Und wenn es konvergiert, konvergiert es nicht unbedingt zu der dem Startwert nächstliegenden Nullstelle. Da muss man also vorsichtig sein.

Wenn die Lösungen im Bereich 10^8 liegen, verschwendet man schon 8 Dezimalstellen für irrelevante Vorkommastellen. Das mag die Ursache sein, dass Mathematica irgendwann Probleme mit der intern geforderten Genauigkeit bekommt.


Setzt man in der Gleichung



, so erhält man



Die Lösungen für y liegen in den Intervallen . Setzt man jetzt , bekommt man



Damit werden alle Lösungen in das Intervall transferiert. Nach dieser Transformation scheint das Newtonverfahren im gesamten Gebiet für x (0 bis 10^8) entsprechend n = 0 bis ca. 80000 zu funktionieren. Sicherer scheint es aber, das Sekantenverfahren zu verwenden. Dazu gibt man FindRoot 2 Startwerte. Ich habe mal beides für ein paar ausgewählte Werte für n gemacht.

[attach]30860[/attach]

Die Rücktransformation der z-Werte in x-Werte ist kein Problem.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »