Seite 2 von 2

Verfasst: Donnerstag 8. September 2005, 21:52
von Gast
ja danke sehr...
:)

Verfasst: Donnerstag 8. September 2005, 22:00
von mawe
@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.

Verfasst: Freitag 9. September 2005, 09:38
von Leonidas
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.

Verfasst: Freitag 9. September 2005, 10:21
von XT@ngel
@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:

Noch eine Lösung

Verfasst: Freitag 9. September 2005, 14:07
von 1-1-1
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

Verfasst: Freitag 9. September 2005, 14:27
von mawe
@XT@ngel: Sorry, hab nicht gewusst dass Du das warst (war gestern einfach schon zu spät für mich :))

Verfasst: Freitag 9. September 2005, 23:29
von BlackJack
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`.

Verfasst: Samstag 10. September 2005, 12:34
von Leonidas
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.