Slice-Operation (Schaubild)

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.
Antworten
archilleus
User
Beiträge: 4
Registriert: Dienstag 20. Mai 2008, 12:19

Ich habe hier eine Aufgabe, bei der ich etwas hänge. Ich hoffe, ihr könnt mir n bisschen weiterhelfen. (erforderlich: numpy und pylab)
http://img251.imageshack.us/i/41151404.jpg/

Wie erzeuge ich die Darstellung nur jeden 10. Punktes in Aufgabe 2?

Code: Alles auswählen

print "Aufgabe 1"
from numpy import*
from pylab import* 
x=linspace(-2*pi, 2*pi, 1000)
a=sin(1/x)
b=arctan(x)
c=exp((-x**2)/(2*pi))*cos(8*x)
amin=min(a)
amax=max(a)
bmax=min(b)
bmin=max(b)
cmin=min(c)
cmax=max(c)

print "Die Minimalwerte sind a) %.4f, b) %.4f und c) %.4f" % (amin, bmin, cmin)
print "Die Maximalwerte sind b) %.4f, b) %.4f und c) %.4f" % (amax, bmax, cmax)


plot(x, a, label="sin(x)")
plot(x, b, label="arctan(x)")
plot(x, c, linestyle="dotted", linewidth=2.5, label="exp((-x**2)/(2*pi))*cos(8*x)") # Funktion c) wird ab hier geplottet.
xlabel ("x")
ylabel ("y")
title("Schaubilder der Funktionen")
legend(loc="lower right")
grid()
ylim(-1.5,1.5)
xlim(-2*pi,2*pi)
sleep(1)
print
print "Aufgabe 2"
print "siehe Schaubild"
x2=linspace(-2*pi, 2*pi, 100)
a2=sin(1/x2)
figure()
plot(x, a, color="blue", linestyle="dotted", linewidth=2.5, label= "Aufgabe 1a)")
plot(x2, a2, color="red", label="Aufgabe 2)")
xlim(-.5,.5)
ylim(-.4,.4)
title("gezoomt!")
legend()
grid()
show()
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Das wird dir helfen ;)

Code: Alles auswählen

>>> x = range(1000)
>>> x[::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, 910, 920, 930, 940, 950, 960, 970, 980, 990]
the more they change the more they stay the same
archilleus
User
Beiträge: 4
Registriert: Dienstag 20. Mai 2008, 12:19

ich steh grad auf dem schlauch :? wie bau ich die range richtig in a2 und x2 ein? und wo liegt der denkfehler bei den "100"?
kannst mir bitte noch n bisschen weiterhelfen? hab die aufgabe vor langem bearbeitet und nehme sie jetzt wieder auf...
BlackJack

@archilleus: `range()` baust Du da nirgends ein. Das "slicing" brauchst Du. Das ist jetzt aber echt zu trivial um es Dir da tatsächlich einzubauen. Lies Dir die Dokumentation zur "sclice"-Syntax durch und probier einfach mal ein wenig in einer Python-Shell herum. Ruhig auch direkt mit `x2` und `a2`. Von denen willst Du ja jeden 10. Wert haben.
archilleus
User
Beiträge: 4
Registriert: Dienstag 20. Mai 2008, 12:19

tut mir leid, ich bin echt nicht die leuchte. mit der sufu find ich leider auch keine "dokumentation". hast du vllt nen link dazu?
jetzt erwirke ich nen syntax error mit:

Code: Alles auswählen

a2=sin(1/x2)
...
x2=linspace(-2*pi, 2*pi, 1000)
x3=x2[::10]
...
plot(x3, a2, color="red", label="Aufgabe 2)")
im shell-fenster klappt das prima, im kontext mit a2 nich -.-

Code: Alles auswählen

ValueError: x and y must have same first dimension
jetzt vertragen sich x3 und a2 nicht?


EDIT: sin(1/x3) natürlich statt x2.

DONE!
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Der Fehler steht doch da: a2 und x3 haben nicht die selbe Größe.
Matplotlib braucht eine Liste von x- und eine von y-Koordinaten um einen Plot zu zeichnen. D.h. Jedes Paar stellt einen Punkt mit einer eindeutigen Koordinate dar. Was passiert nun wenn eine x-Koordinate vorhanden ist, aber kein y-Koordinate? Ein Fehler natürlich.
Damit es funktioniert muss also deine x und deine y-koordinaten-Liste die selbe Größe haben. D.h. du musst musst den slice auch auf a2 anwenden.
Nochmal: Matplotlib ist kein symbolischer Funktionsplotter. Matplotlib nimmt entsprechend nur eine Liste von Koordinaten und zeichnet Punkte (bzw. verbundene Punkte) an die entsprechende Stelle im Plot.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

archilleus hat geschrieben:tut mir leid, ich bin echt nicht die leuchte. mit der sufu find ich leider auch keine "dokumentation". hast du vllt nen link dazu?
Der erste Treffer bei Google ;-)
Das Leben ist wie ein Tennisball.
Antworten