- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Polynomfunktionen berechen lassen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49

    Polynomfunktionen berechen lassen

    Anzeige

    Powerstation Test
    Hi,
    ist es möglich Polynomfunktionen von einen Atmega berechnen zu lassen?
    wie z.b.
    y = 0.01499 + 0.00506*x + 1.8892E-6*x^2 + -14249E-10*x^3 + -2.0465E-14*x^4

    x = 1000 bis 7000

    Lg Tryan

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Wenn man's geschickt anstellt, sollte es schon möglich sein.
    Wenns in Bascom gemacht wird, wirds aber in einer Zeile nicht gehen.
    Da brauchst du für jede Operation ne extra Zeile.

    Also für y = ... wärens 11 Zeilen wenn ich mich nicht verzählt hab.
    Falls Bascom x^4 nicht kennt und was in der Art x*x*x*x erwartet wärens 14.
    Je nach Reihenfolge sollte man Rundungsfehler minimieren können.
    #ifndef MfG
    #define MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Meinst du so?
    Code:
    '---------------------------------
    'Deklaration
    '---------------------------------
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    
    Config Porta = Output
    Dim Kw As long
    Dim X As Integer
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
    Config Lcd = 20 * 4
    Initlcd
    Cls
    Cursor Off
    
    X = 2000
    Do
    Kw = 0.1499 + 0.00506
    Kw = Kw * X
    Kw = Kw + 0.000001889
    Kw = Kw * X
    Kw = Kw ^ 2
    Kw = Kw - 0.00000000014249
    Kw = Kw * X
    Kw = Kw ^ 3
    Kw = Kw - 0.00000000000020465
    Kw = Kw * X
    Kw = Kw ^ 4
    
    
    Lcd Kw
    Loop
    End
    Aber muss ich nicht auf Punkt- vor Strichrechnung achten?
    Mfg Tryan

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    eher nicht.
    Da du beim ersten mal "Kw = Kw * X" nicht mehr das berechnest, was du willst. Es wäre dann vergleichbar mit dem:
    y = (0.01499 + 0.00506) *x ... also der Wert 0.01499 kriegt auch ein x verpasst.

    Deine Formel sähe demnach so aus:
    Kw = (((((((((((0.1499 + 0.00506) * x) + 0.000001889) * x) ^2 ) -0.00000000014249)*x ) ^3 ) - 0.00000000000020465)*x)^4)
    Ergibt irgendwas mit x^40 am Ende.


    "Übersichtlicher" wäre es, wenn wirklich einzelne Variablen verwendet werden. Braucht halt einiges mehr an Speicher.

    Wäre in etwa so:

    [Variablentypen nach Bedarf, Annahme x^y wird von Bascom akzeptiert]
    Code:
    a = 0.01499
    b = 0.00506 * x
    c1 = x^2
    c2 = c1 * 1.8892E-9 (falls Bascom die E-Schreibweise versteht; ist schon länger her)
    d1 = x^3
    d2 = d1 * -14249E-10
    e1 = x^4
    e2 = e1 * -2.0465E-14
    y = a + b
    y = y + c2
    y = y + d2
    y = y + e2
    #ifndef MfG
    #define MfG

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Hallo,

    ich wollte noch zu bedenken geben, dass Du den Begriff "komplexe Funktion" bitte nicht verwenden solltest, da es in der Mathematik dabei um was völlig anderes geht...
    Das, was Du suchst, sind Polynomfunktionen.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Vielen Dank, also im Simulator läuft das Programm
    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    
    
    Dim Y As Single
    Dim X As Single
    Dim A As Single
    Dim B As Single
    Dim C1 As Single
    Dim C2 As Single
    Dim D1 As Single
    Dim D2 As Single
    Dim E1 As Single
    Dim E2 As Single
    
    X = 1000
    
    Do
    A = 0.01499
    B = 0.00506 * X
    C1 = X ^ 2
    C2 = C1 * 0.00000188
    D1 = X ^ 3
    D2 = D1 * -0.00000000014249
    E1 = X ^ 4
    E2 = E1 * -0.000000000000020465
    Y = A + B
    Y = Y + C2
    Y = Y + D2
    Y = Y + E2
    
    Loop
    
    End
    Ich bin schon gespannt wie schnell der Atmega das berechnen kann, der Simulator ist ganz schön am Arbeiten....

    Mfg Tryan
    P.S. habe die überschrift geändert

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Tyran,

    mit den wenigsten Rechenoperationen und der kleinsten möglichen Anzahl von Variablen kommst Du so hin, wenn Du die klassische Programmierung aus dem Lehrbuch verwendest:

    Code:
    $regfile = "m16DEF.DAT"
    $crystal = 16000000
    
    
    Dim Y As Single
    Dim X As Single
    
    X = 1000
    
    Y =  -0.000000000000020465
    Y = -0.00000000014249 + Y*X
    Y =  0.00000188 + Y*X
    Y = 0.00506 + Y*X
    Y = 0.01499 + Y*X
    
    End
    Das müsste wesentlich fixer laufen !

    Ciao,

    mare_crisium

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Hallo mare_crisium,
    leider funktioniert dein Programm so nicht. Man kann nur eine Rechenoperation pro Zeile machen...

    mfg Tryan

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Tyran,

    aha, das wusste ich nicht. - Na, wenn ich die Methode an diese Beschränkung anpasse, kommt das hier heraus:

    Code:
    Dim Y As Single
    Dim X As Single
    
    X = 1000
    
    Y =  -0.000000000000020465*X
    Y = -0.00000000014249 + Y
    Y = Y*X
    Y =  0.00000188 + Y
    Y = Y*X
    Y = 0.00506 + Y
    Y = Y*X
    Y = 0.01499 + Y
    
    End
    Das sind dann auch schon 8 Zeilen. Ob das dann noch schneller als Deine Methode ist, hängt davon ab, wieviel Zeit die (X^n)-Operation braucht. Kannst's ja mal versuchen !

    Ciao,

    mare_crisium

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    16.09.2008
    Ort
    Hamburg
    Beiträge
    49
    Ja super danke mare_crisium,

    so läuft das um Welten schneller ab.
    Danke für den Tipp

    Mfg Tryan

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test