tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
820
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Hi

    ich weiß nicht wer von euch den Taschenrechner TI89 kennt (großes teures Gerät). Unter den bestimmt 1000 Funktionen die er besitzt, interessiert mich "solve()", eine Funktion um Gleichungen zu lösen. Ich würde die Funktion gerne nachbauen.
    Die Syntax von solve sieht so aus:
    Code :
    1
    2
    3
    4
    
    solve(gleichung, variable/n)
    //Beispiele
    solve(x^2+4*x = 2,x)
    solve(t^3+^t2 = 5*t,t)

    Ich könnte jetzt ja auf 2 herangehensweisen versuchen, diese Gleichung zu lösen.
    a) Alle Variablen auf eine Seite stellen
    b) Einfach einsetzten und gucken wann es stimmt.

    Zu a)
    Das Problem bei a) wäre meiner Meinung der Funktion die Rechenregeln mitzuteilen, sowie diese bei der Gleichungsumstellung zu programmieren:
    Code :
    1
    
    solve(5=7+x,x) // Alle "x" auf die linke Seite bringen
    In diesem Beispiel müsste ich jetzt den rechten Teil nach "x"en absuche, und dann den Rechenoperator davor(wenn es den nicht gibt, den danach) abchecken, und dann den komplenmentären für die linke Seite nutzen. Ich denke dass dies vom Programmieraufwand sehr aufwändig wäre (man denke an Sinus/Kosinus/e/potenzen,Wurzeln...), auch wenn es am Ende die "schönere" Variante wäre.
    Zu b)
    Mein Ansatz bei b) wäre alle Variablen (x) durch Zahlen zu ersetzen und dann zu überprüfen, ob die Variable erhöht oder erniedrigt werden muss. Zwar unschöner, und vielleicht rechenintensiver, aber ich denke vom Programmieraufwand auf jeden Fall einfacher.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    solve(2+x=9,x)
    //Berechnung
    i = 1;
    if( 2+i == 9 )
      return i;
    ...
    //i = 7
    if( 2+i == 9 )
      return i;
    if( 2+i > 9 ) // -> i - 0.5

    Was meint ihr dazu? Habt ihr Ideen? Welche Programmiersprache wäre am besten geeignet?
     
    Napoleon trug rote Kleidung, damit seine Soldaten nicht sahen, dass er verwundet war.
    Die Naz!s trugen braune Hosen ...

  2. #2
    Thinker Tutorials.de Gastzugang
    zu b) würde ich nicht blind einsetzen, sondern zum Beispiel das Newton-Verfahren (http://de.wikipedia.org/wiki/Newton-Verfahren) verwenden, damit kommst du relativ schnell zu einer Lösung. Du mußt vorher nur die Gleichung auf die Form ... = 0 bringen und das ist ja relativ einfach, solange es sich um ein Polynom handelt. Dafür mußt du allerdings Ableitungen bestimmen, etc.
     

  3. #3
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Hi

    das mit den Ableitungen ist eine gute Idee, da bin ich gar nicht drauf gekommen. Ich müsste also den zu berechnenden String nach x^n durchsuchen, und durch n*x^n-1 ersetzen. Bliebe nur noch das Problem wenn ich auf beiden Seiten der Gleichung ein x habe. Aber echt super Idee!
     
    Napoleon trug rote Kleidung, damit seine Soldaten nicht sahen, dass er verwundet war.
    Die Naz!s trugen braune Hosen ...

  4. #4
    Thinker Tutorials.de Gastzugang
    Naja, du wirst die Gleichung irgendwie normalisieren müssen, da hast du recht. Auf beiden Seiten x mit der Form "x +4 = 2x - 8" ist ja noch einfach, man kann ja durch Vorzeichen umdrehen das auf die andere Seite ziehen. "x+4 -2x +8 = 0" ist für den Computer genauso lösbar.

    Aber im Ernst, wenn das mehr als ein Gedankenspiel ist, zum Beispiel Teil eines größeren Programms, dann würde ich nach einer passenden Bibliothek Ausschau halten, das hat _sicher_ schonmal jemand implementiert.
     

  5. #5
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Um die Gleichung analysieren zu können, musst du erst einmal einen Syntaxbaum erstellen, mitt dessen Hilfe du dann auch bestimmen kannst, ob und wie du die Gleichung umformen kannst; es bleibt dir überlassen, ob du dich auf Polynome beschränkst oder zusätzliche Funktionen, eventuell nur für konstante Ausdrücke, mit berücksichtigen willst.
    Jedenfalls wünsche ich dir viel Erfolg bei dieser Fleißarbeit.
     

Ähnliche Themen

  1. [C] Gleichungen lösen - Equation Solver
    Von killerkirsche im Forum C/C++
    Antworten: 32
    Letzter Beitrag: 03.05.10, 21:59
  2. Antworten: 4
    Letzter Beitrag: 04.02.08, 00:26
  3. Gleichungen in Variablen speichern !
    Von GartenUmgraben im Forum .NET Café
    Antworten: 5
    Letzter Beitrag: 04.05.06, 18:56
  4. Mathe: Lösen von lin. Gleichungen in C#? Gauß?
    Von xaitech im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 06.02.06, 14:02
  5. Quadratische Gleichungen zeichen?
    Von Schatti im Forum Java
    Antworten: 5
    Letzter Beitrag: 14.12.03, 22:34