Autor Beitrag
Segelflieger
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124

WinXP Pro
D7 Prof
BeitragVerfasst: So 09.03.03 21:24 
Hallo,

ich schreibe zur Zeit an einem Mathematikprogramm, mit dem man mathematische Funktionen darstellen und untersuchen kann.
Algorithmen, die eine Funktionsgleichung in einen Zahlenwert umwandeln oder Ableitungen erzeugen, habe ich selbst geschrieben. Jetzt stehe ich jedoch noch immer vor einem Problem. Das Programm ist fast fertig, hat jedoch noch eine Schwachstelle: Wenn man gebrochenrationale Funktionen eingibt, kann es vorkommen, dass die 2. und 3. Ableitung SEHR lang wird. Das hat zur Folge, das die Berechnung von z. B. Extrempunkten auch extreme Rechenzeiten benötigt.

Erst mal noch was zu meinem Ableitungsalgorithmus:
Da er nach allgemeinen Ableitungsregeln arbeitet, sehen Ableitungen in der 'Rohform' etwa so aus:

f(x)=2*x^3 ---> f'(x)=(2*3)*x^(3-1)

Um diese Unschönheiten zu beseitigen, habe ich einen Algorithmus entwickelt, der die Gleichung wieder in eine lesbare Form umwandelt, also:

f(x)=2*x^3 ---> f'(x)=6*x^2

Allerdings kann dieser Algorithmus Terme, wie etwa

3*x+4*x

nicht zu 7*x vereinfachen. Darum kommen bei den Ableitungen gebrochenrationaler Funktionen Ungetüme wie z. B.

((x+3*x)*x^2-4*x+3*x)/(x+x^2-3*x^2)^4 heraus.

Also, lange Rede, kurzer Sinn: Ich suche also einen Algorithmus, der auch solche Ausdrücke noch vereinfachen kann. Ich wäre schon über einen Tip :idea: froh, da ich mir das natürlich am liebsten selbst ausdenken würde. Bis jetzt habe ich dazu im Internet noch nichts gefunden, man findet nur viel über einfache Parser, aber so was hab ich ja schon. Nun ja, ich hoffe, jemand hatte die Geduld, sich das hier durchzulesen :wink: und kann mir helfen.

cu

_________________
Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: So 09.03.03 21:33 
Vielleicht solltest du etwas genauer werden, was dein Programm betrifft, denn sonst kann man dir nicht helfen. Beispiel: Würdest du mit Koeffizienten-Matrizen arbeiten, wäre es ja kein Problem
Zitat:
3*x+4*x

zusammenzufassen...
Nur weiss ich ja eben nicht, wie dein Programm aussieht... :?
Segelflieger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124

WinXP Pro
D7 Prof
BeitragVerfasst: So 09.03.03 21:43 
Momentan sieht es so aus, dass eine Funktiona als String eingeben wird und die Ableitung ein weiterer String ist.
Ich meine also '3*x+4*x'.
Dummerweise weiß ich mit Koeffizientenmatrizen nichts anzufangen, da wir das in der Schule noch nicht hatten... (werd mich informieren).
Wie gesagt, alle Gleichungen sind Strings. Hilft dir das?

cu

_________________
Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: So 09.03.03 22:33 
Mit Koeffizienten-Matrix meinte ich beispielsweise ein Array of Integer, wobei: Index->Grad von x.
Also zB: 0->-6, 1>-5...6->0, 7->1 usw.
Dann kanns du die Summanden deiner Funktion einfach in diese Matrix eingeben. Beispiel:
3x^2-12x+5->
Array:
[8]:=3; [7]:=-12; [6]:=5

Weiss nicht ob dich das viel weiterbringt. Wollte dir nur zeigen, was ich unter Koeffizienten-Matrix verstehe :)