• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kurvendiskussion

bushit

Hacker
Hi, eigentlich wolte ich ja selbst ein Script zur Kurvendiskussion in Python schreiben, allerdings bin ich dazu noch nicht weit genug, daher meine Frage: Kennt ihr ein Script, das ich kopieren und veränderen darf für die Kurvendiskussion in Python. Fixpunkte sind: Nullstellen, Extremstellen, usw.
Ich würde mich freuen, wenn ihr einen Tipp hättet.
Lg bushit
 

TeXpert

Guru
erst mal, nein ich kenn kein fertiges Script ;) aber

1. entweder symbolisch, da würde ich wahrscheinlich eher mit prolog als mit Python rangehen

2. numerisch -> Nullstellen mit Newton-Methode (sollte über google schnell zu finden sein oder zumindest in jedem Buch über algorithmen erwähnt sein)

3. diskretisieren -> sample Deine Funktion und versuche die Ableitungen ganz stumpf durch Differenzen zu approximieren.
 
OP
B

bushit

Hacker
Erstmal danke, ich verstehe zwar nur die Hälfte, aber ich werde versuchen mir mal einige Informationen zu diesen Punkten zu beschaffen. Das Problem ist allerdings, dass ich erst seit wenigen Wochen Python lerne. Ich dachte so eine arithmetische Folgerung dürfte kein Problem sein, was soll ich sagen, es ist doch eines. :D
Lg bushit
 

TeXpert

Guru
Nein das Problem ist eher der Ansatz.

Wie gesagt, algebraisch ist das machbar (CAS-Systeme können das ja auch :) ) also wenns nix selbst gebautes sein muss einfach mal in octave reinschauen.

ansonsten: sobald es nicht mehr algebraisch ist sondern numerisch, dann musst Du entsprechende Numerik-Algorithmen implementieren...

Hier ist halt das Newton-Verfahren für Nullstellen das bekannteste, es basiert auf Approximationen... (--> http://de.wikipedia.org/wiki/Newton-Verfahren)

die anderen Extrema können immer darauf zurückgeführt werden indem in der nächsten Ableitungsebene die Nullstelle berechnet wird...
 
OP
B

bushit

Hacker
Nein, das ist noch zu hoch für mich. Ich will es nicht übertreiben, da ich sonst die Lust daran verliere. Ich hätte nun ein Script gefunden, allerdings weiß ich nicht, wie ich es starte! :oops:
Kein Witz! In dem Ordner sind zwei Dateien enthalten mit den Endungen .mws und .m.
Kann mir jemand sagen wie ich diese ausführen kann und ob sie auch unter Windows lauffähig sind.
Danke für eure Hilfe!
Lg bushit
 

deepak

Member
...ich schalte mich mal grad dazu...

1. Eine Trial Version fuer maple gibt es nicht. Allerdings bieten viele Universitaeten eine sogenannte "student licence" an, d.h. im Klartext, du bekommst die student version von maple umsonst. Vielleicht lohnt es, sich dort mal umzuhoeren...

2. Kurvendiskussionen sind dann unter maple trivial (ok, es kommt natuerlich immer auf die zu untersuchenden Funktionen...). Dazu brauchst du i.A. keine zusaetzlichen Sachen aus dem Netz herunterzuladen.

3. Gerade fuer numerische Probleme bietet sich dann, wie schon von TeXpert beschrieben, octave an, allein schon da es umsonst ist.

dp
~
 
Studentenversionen von Maple kosten zumindest an meiner Uni 50€. Ich glaube kaum, daß andere Unis Verträge haben, die sie dazu berechtigen, die CDs für lau rauszugeben :roll:
 

Grothesk

Ultimate Guru
Code:
apt policy maxima
maxima:
  Installiert: (nichts)
  Kandidat: 5.9.2-0.pm.0
  Versionstabelle:
     5.9.2-0.pm.0 0
        500 ftp://ftp.gwdg.de SuSE/10.0-i386/packman pkglist
Ist maxima nicht brauchbar?
 
OP
B

bushit

Hacker
Danke für eure Tipps! Ich werde mir dieses Wochenende mal eure Vorschläge genauer anschauen, allerdings kann ich gleich vorraus schicken, dass ich leider noch kein Student bin und daher auch keinen Zugang zu diesen vergünstigten Versionen habe. Außerdem bezweifle ich, dass ich mit anderen Scriptsprachen zurecht kommen werde, da Python momentan meine ganze Aufmerksamkeit benötigt.
Danke füt eure kompetente Hilfe!
Lg bushit
 

TeXpert

Guru
ich versteh echt nicht, wo Dein Problem ist....

Ableitung numerisch: Differentialquotient betrachten (TeX-Notation)
f'(x) = \fract{df(x_0)}{dx} \approx lim_{x->x_0} \fract{f(x) -f(x_0)}{x - x_0} und das kannst Du ja wohl mit python + handbuch in 5 Minuten realisieren ;) wenn nicht dann dann ist Programmieren evtl. nicth ganz das richtige...

und das erweiterst Du dann passend, so dass Du mit Newton Nullstellen berechnen kannst (die Differenz x - x_0 ruhig etwas variieren um ein Gefühl zu bekommen...


das macht Du jetzt für genügend viele x_i dann kannst Du diese Punkte als Funktionswerte der Ableitung nehmen und auch die Ableitung entsprechend als "kontinuierlich annehmen..." Du könntest natürlich auch durch die Punkte eine entsprechende Polynom oder Spline-Interplolation machen um eine kontinuierliche Darstellung zu erhalten.
 
OP
B

bushit

Hacker
Danke füt deine genauen Ausführungen. Allerdings geriet ich ein wenig ins Stocken, wie ich las, dass man das auch auf meinem Niveau erwarten kann. Meinst du wirklich, dass man als Python-Anfänger mit den mathematischen Kenntnissen der elften Schulstufe eines humanistischen Gymnasiums solche Konstrukte und Gedankenmodelle auf Anhieb verstehen muss? Wenn das wirklich so ist, dann kann ich meinen Vorzug in den Mülleimer kippen. :D
Was ich sagen will: Es ist nicht immer für einen Anfänger leicht, auch wenn er sich noch so bemüht. Ich bin allerdings lernwillig und werde mich mal dieses Wochenende damit beschäftigen. Die Zusammenhänge sind mir noch nicht ganz klar.
Danke für eure Hilfe!
Lg bushit
 
Also Deinen (mathematischen) Kenntnisstand hast Du gerade zum ersten Mal erwähnt ...
Im übrigen versagt auch schon mal das Newtonverfahren, wenn man Nullstellen finden möchte. Also wenn das Verfahren nicht irgendwann eine untere Schranke durchbricht, einfach eine erste Näherung nehmen.
 

TeXpert

Guru
bushit schrieb:
Danke füt deine genauen Ausführungen. Allerdings geriet ich ein wenig ins Stocken, wie ich las, dass man das auch auf meinem Niveau erwarten kann. Meinst du wirklich, dass man als Python-Anfänger mit den mathematischen Kenntnissen der elften Schulstufe eines humanistischen Gymnasiums solche Konstrukte und Gedankenmodelle auf Anhieb verstehen muss?

*Du* willst Kurvendiskussion betreiben...
d.h. für mich, dass *Du* die Idee der Ableitung verstehst (Grenzübergang, Bildlich Tangente wird zur Sekante) und wie man das berechnet (durch die f(x)-f(x_0) / (x - x_0) Geschichte nimmst Du ja eine Tangente... daher bin *ich* davon ausgegangen, dass die mathematische Umsetzung trivial verständlich ist ;)

so und dann haben wir so komische Dinger (f(x_0)) d.h. du definiierst die passenden python-Operationen, die x_0 geeignet auf f(x_0) abbilden und fertig... *das* sind ein paar float-Datentypen und ein wenig Grundrechnung... d.h. 2-5 Seiten in einem beliebigen Pythonbuch.

Wie Cauchykriterium (sorry, aber bei Deinen Posts muss ich mich immer schütteln, da denke ich an die grausamsten Mathevorlesungen in der Uni......) schon schrieb, Numerische Probleme sind jetzt erst mal aussen vor ;) hier spielt neben den strukturellen Problemen je nach Funktion dann auch Python wieder rein, wie genau rechnet Python... welche Rundungsfehler bekommst Du etc....

An diesem Beispiel kannst Du aber eine Sache lernen: Zum programmieren musst Du nicht nur eine Sprache sprechen, sondern auch den Algorithmus formulieren können. Die Sprache ist völlig irrelevant! beliebig austauschbar!

Verfasse den Algo mit Papier und Bleistift in einer Pseudosprache z.B. (extra sehr langatmig ;) )

Code:
 funktionswert (DEZIMAL)
FUNKTION: f 
    Parameter: x (DEZIMAL)
    rückgabe: F-Wert (DEZIMAL)
    blah = 3 * blah + 1


funktionswert = f von 3.45

und das lässt sich später trivial in echten Code giessen...
 
bushit schrieb:
[...]dass ich leider noch kein Student bin[...]
Da kann ich Dir noch einen Tipp geben: wenn Du mal studieren wirst, dann richte Dich darauf ein, etwas selbständiger zu werden. Die Zeit der goldenen Teller, auf denen Dir Informationen, wie z.B. der etwas mathematischere Post von TeXpert, vollständig präsentiert werden, ist dann vorbei. Ich finde es ja gut, daß Du aus eigenem Antrieb eine Kurvendisskussion mit Python programmieren möchtest, aber die schönste/beste Idee nützt nichts, wenn Du Dich nicht selbständig in ein Näherungsverfahren für Nullstellen einarbeiten möchtest.

Da gibt es nur zwei Möglichkeiten:
i) Du lernst Python anhand eines Beispieles, daß Du inhaltlich komplett verstehst, damit Du Dich auf Python konzentrieren kannst oder
ii) Du konzentrierst Dich auf die numerischen Verfahren, die Du dafür brauchen wirst (betreibst also Mathematik) und später suchst Du Dir eine fast x-beliebige Sprache dazu aus (wie schon TeXpert schrieb).

Zwei Probleme auf einmal zu bewältigen, erscheinen zumindest mir erst einmal unangemessen. In diesem Falle kann man die Probleme disjunkt aufteilen (ganz nebenbei: Man kann auch alle Sandwichzutaten, auch wenn sie im Supermarkt oder sonstwo liegen, mit einer Hyperebene so teilen, daß jede Zutat von der Hyperebene volumenmäßig geteilt wird ;-)). Ich bin sicher, daß das zusammengesetzte Ergebnis wesentlich besser sein wird, als wenn alles in einem Aufwasch erschlägst.
 

TeXpert

Guru
Cauchykriterium schrieb:
ganz nebenbei: Man kann auch alle Sandwichzutaten, auch wenn sie im Supermarkt oder sonstwo liegen, mit einer Hyperebene so teilen, daß jede Zutat von der Hyperebene volumenmäßig geteilt wird ;-))

hmm, aber i.A. sind Sandwichtoasts, Tomaten und Salatblätter reell betrachtet auf der Grenzfläche nicht eben ;) so dass man hier evtl. mit einem \epsilon-Abstand oder Stochastik argumentieren müsste
 
Oder mit Mathematica: :D
Code:
f=Function[x, x^5 - 6*x^3]
Plot[f[x], {x, -10, 10}]

# Wertebereich
{Limit[f[x], x -> -Infinity], Limit[f[x], x -> Infinity]}

# Nullstellen
Solve[f[x] == 0, x]

# Extrema
Solve[f'[x] == 0 && f''[x] != 0, x]

# Extrema/Hochstellen
Reduce[f'[x] == 0 && f''[x] < 0, x]  

# Extrema/Tiefstellen
Reduce[f'[x] == 0 && f''[x] > 0, x]

# Wendepunkte
Solve[f''[x] == 0 && f'''[x] != 0, x]

# Sattelpunkte
Solve[f'[x] == 0 && f''[x] == 0 && f'''[x] != 0, x]

# Symmetrie: Spiegelung an Y-Achse:
f[x] == f[-x]

# Symmetrie: Punktspiegelung
f[x] == -f[-x]
Hm, Python ist es zwar nicht gerade... :roll:
 
Oben