4 svar
259 visningar
villsovaa behöver inte mer hjälp
villsovaa 925
Postad: 5 sep 2021 22:11

graf

Hej!

Skriver in följande kod. Vill att den ska plotta en enda graf med alla punkter som loopen gör, men istället kommer det upp flera fönster med en punkt i varje. Vill alltså att det ska vara EN graf med flera punkter och en linje enligt det som jag skrivit. Hur gör jag det och varför blir det inte så?

#Eulers stegmetod

import matplotlib.pyplot as plt
dy = lambda x,y: y*2
xi=0
xf=1
h=0.2
n=int((xf-xi)/h)
x=0
y=1
for i in range(1,n+1):
    y = y + dy(x,y) * h
    x = x + h

    plt.plot(x,y,'o')
    plt.show()
Skaft 2373 – F.d. Moderator
Postad: 5 sep 2021 22:19

Varför blir det inte så: För du skickar bara ett x och ett y till plot-funktionen, och sen ropar på show. Sen upprepas detta via loopen. Det ger många bilder med en punkt uppritad i varje.

Lägg istället alla x-värden i en lista, och alla y i en annan lista (i samma ordning, dvs så att varje punkt har sina koordinater på samma index i båda listor). Kalla sen på plt.plot en enda gång, men ge den båda listor.

villsovaa 925
Postad: 5 sep 2021 22:38
Skaft skrev:

Varför blir det inte så: För du skickar bara ett x och ett y till plot-funktionen, och sen ropar på show. Sen upprepas detta via loopen. Det ger många bilder med en punkt uppritad i varje.

Lägg istället alla x-värden i en lista, och alla y i en annan lista (i samma ordning, dvs så att varje punkt har sina koordinater på samma index i båda listor). Kalla sen på plt.plot en enda gång, men ge den båda listor.

Hej, tack för svaret! Gjorde som nedanstående kod istället, med listor, men nu blir det så att jag får flera grafer där de succesivt får fler och fler punkter. Så jag får liksom inte ut en enda graf bara. 

#Eulers stegmetod
import math
import matplotlib.pyplot as plt
dy = lambda x,y: y*2
f = lambda x: math.exp(2*x)
xi=0
xf=1
h=0.1
n=int((xf-xi)/h)
x=0
y=1
x_lista = []
y_euler = []
y_analys = []
for i in range(1,n+1):
    x_lista.append(x)
    y_euler.append(y)
    y_analys.append(f(x))
    y = y + dy(x,y) * h
    x = x + h

    plt.plot(x_lista,y_euler,x_lista,y_analys)

    plt.show()

Har aldrig gjort listor förut så antar att nåt blivit fel med det. Vet dock inte vad. 

Dr. G 9479
Postad: 5 sep 2021 22:41

Nu plottar du inne i for-loopen. 

villsovaa 925
Postad: 5 sep 2021 22:42
Dr. G skrev:

Nu plottar du inne i for-loopen. 

Jahaaa haha nu blev det rätt! Stort tack!

Svara
Close