wie mach ich ne wertetabelle?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Gast

Beitragvon Gast » Donnerstag 8. September 2005, 21:52

ja danke sehr...
:)
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Donnerstag 8. September 2005, 22:00

@XT@ngel: Deine Werte können nicht stimmen. Für x=0 müsste y = 0.1*x**4 - 0.1*x**3 - 2.4*x**2 + 0.4*x + 8 eigentlich 8 ergeben.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 9. September 2005, 09:38

Ich hätte es ja so gelöst, das macht mehr Eindruck (finde ich) und ist auch irgendwie simpler (bis auf das xlrange, aber das versteht man auch):

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

def xlrange(start,stop=None,step=1):
    """xlrange([start=0,]stop[,step=1]) --> iterator object like xrange for longs"""
    if stop==None:
        stop=start
        start=0
    if step>0:
        while start<stop:
            yield start
            start+=step
    elif step<0:
        while start>stop:
            yield start
            start+=step
    else:
        raise ValueError, "xlrange() arg 3 (step) must not be zero"

def process(x):
    return 0.1 *x ** 4 - 0.1 * x ** 3 - 2.4 * x ** 2 + 0.4 * x + 8

def wertetabelle(start, stop, step):
    for x in xlrange(start, stop + step, step):
        print "x=%0.1f\t y=%0.5f" % (x, process(x))

if __name__ == '__main__':
    wertetabelle(-4.5, 5.5, 0.5)


gibt

Code: Alles auswählen

x=-4.5   y=7.71875
x=-4.0   y=0.00000
x=-3.5   y=-3.50625
x=-3.0   y=-4.00000
x=-2.5   y=-2.53125
x=-2.0   y=0.00000
x=-1.5   y=2.84375
x=-1.0   y=5.40000
x=-0.5   y=7.21875
x=0.0    y=8.00000
x=0.5    y=7.59375
x=1.0    y=6.00000
x=1.5    y=3.36875
x=2.0    y=0.00000
x=2.5    y=-3.65625
x=3.0    y=-7.00000
x=3.5    y=-9.28125
x=4.0    y=-9.60000
x=4.5    y=-6.90625
x=5.0    y=0.00000
x=5.5    y=12.46875

aus.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
XT@ngel
User
Beiträge: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Beitragvon XT@ngel » Freitag 9. September 2005, 10:21

@mawe
xt@ngel als gast hat geschrieben:Jo hab grad festgestellt das ich die Formel falsch hab....
hab die von mawe 1 zu 1 kopiert ohne dein post zu lesen :D

:roll:
1-1-1
User
Beiträge: 12
Registriert: Freitag 9. September 2005, 08:42
Wohnort: München

Noch eine Lösung

Beitragvon 1-1-1 » Freitag 9. September 2005, 14:07

Hallo Jeanne!

Erstens ist es gut, daß Du Fragen dort stellst, wo auch qualifizierte Antworten zu erwarten sind; nur dadurch kannst Du eine Programmiersprache erlernen und später richtig anwenden ...

Zweitens möchte ich Dir eine (wiederverwertbare) Lösung liefern, ohne die Keule der OOP objektorientierten Programmierung auszupacken.

Code: Alles auswählen

def funktion(x): #1
    return (0.1*(x**4)) - (0.1*(x**3)) - (2.4*(x**2)) + (0.4*x) + 8.0 #2

def wertetabelle(f,start,stop,schritt): #3
   h = start #4
   while h <= stop: #5
      print h,'   ',f(h) #6
      h += schritt #7

wertetabelle(funktion,-4.5,5.5,0.5) #8

#1: Die Funktion "funktion" definiere ich selbständig, ist immer gut!
#2: Schaut zwar nach zu vielen Klammern aus, kann manchmal aber
hilfreich sein, wenn Du unerwartete Ergebnisse bekommst.
#3: Hier die Wertetabelle. Der erste Parameter ist die Funktion "f".
#4: "h" ist der momentane Schrittwert beginnend mit "start"
#5: Die "while"-Anweisung solange "h" kleiner oder gleich Endwert
#6: Ausgabe der momentanen "x"/"y"-Paares
#7: Erhöhen um Schrittweite (bzw. h = h + schritt)
#8: Aufruf der "wertetabelle". Der erste Parameter ist die Funktion
    Ergebnisse:
    -4.5 7.71875
    -4.0 1.7763568394e-015
    -3.5 -3.50625
    -3.0 -4.0
    -2.5 -2.53125
    -2.0 8.881784197e-016
    -1.5 2.84375
    -1.0 5.4
    -0.5 7.21875
    0.0 8.0
    0.5 7.59375
    1.0 6.0
    1.5 3.36875
    2.0 8.881784197e-016
    2.5 -3.65625

    3.0 -7.0
    3.5 -9.28125
    4.0 -9.6
    4.5 -6.90625
    5.0 0.0
    5.5 12.46875

Mein Ziel war nicht(!) die Lösung Deiner Hausaufgabe. Du hattest Probleme, bei den Grundlagen und bei der Realisierung.
Meine "Hausaufgabe" an Dich: Diese paar Zeilen Quelltext verstehen! Das hast Du geschafft, wenn Du dieses kleine Grundgerüst für andere Aufgaben mal schnell umstricken kannst.

Viel Spaß

Michael
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 9. September 2005, 14:27

@XT@ngel: Sorry, hab nicht gewusst dass Du das warst (war gestern einfach schon zu spät für mich :))
BlackJack

Beitragvon BlackJack » Freitag 9. September 2005, 23:29

Leonidas hat geschrieben:Ich hätte es ja so gelöst, das macht mehr Eindruck (finde ich) und ist auch irgendwie simpler (bis auf das xlrange, aber das versteht man auch):

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

def xlrange(start,stop=None,step=1):
    """xlrange([start=0,]stop[,step=1]) --> iterator object like xrange for longs"""


Wollte nur mal anmerken das die Doku zu der Funktion etwas zu einschränkend ist. Wie man in diesem Fall sieht ist sie nicht auf `long` beschränkt sondern funktioniert auch prima mit `float`.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 10. September 2005, 12:34

BlackJack hat geschrieben:Wollte nur mal anmerken das die Doku zu der Funktion etwas zu einschränkend ist. Wie man in diesem Fall sieht ist sie nicht auf `long` beschränkt sondern funktioniert auch prima mit `float`.

Ja, durchaus, aber ich habe sie einfach 1:1 von Milan kopiert ohne mir über die Doku Gedanken zu machen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder