Side 1 av 1

Integrering i Python

Lagt inn: 04/03-2013 13:30
av Tor Olav
Hei. Sitter med ei oppgave her eg ikkje får til. har fått funksjonen
f(t)=exp(-t)*sin(2*Pi*t)

Oppgava går ut på å lage eit plot av den integrerte funksjonen og den dobbel integrerte funksjonen.

Eg har laget dette programmet:

from scitools.all import *

def dydt(t):
return (exp(-t)*sin(2*pi*t))

a=0.0
b=4.0
N=50
dt=(b-a)/N
time=linspace(a,b,N+1)
yTrue=exp(-time)*sin(2*pi*time)
y=zeros(len(time))
y[0]=0

for i in range(0,len(time)-1,1):
y[i+1]=y+dt*dydt(time)

plot(time,yTrue,'k',time,y,'k--')



---------------------------------------------------------------------------------

Og når eg da plotter dette, så får eg opp plot for den funksjonen eg har gitt.(sjekket med maple)

Noen inteligente der ute som kan hjelpe meg videre? Står bom fast her, og kan på ingen måte skryte på meg noe kunnskap med Python.

på Forhånd takk :)

-Tor Olav-

Lagt inn: 04/03-2013 13:53
av Gustav
Er meningen at du skal integrere funksjonen numerisk med python? Eller er det tillatt å bruke innebygde funksjoner? (quad i scipy f.eks.)

Lagt inn: 04/03-2013 14:03
av Nebuchadnezzar
Har brukt python ekstremt lite, med litt googling antar jeg at
om du laster inn pakken integrate fra scipy burde ting fungere greit.

Kode: Velg alt

from scipy import integrate 
http://stackoverflow.com/questions/1197 ... tion-array

Noe slikt burde funke, ellers kan du bare bruke Rieman-summer om funksjonen din er rimelig pen.

Lagt inn: 04/03-2013 16:52
av Tor Olav
beklager litt tynn beskrivelse tidligere, er meiningen å gjøre det numerisk, med Eulers metode.

det er har fått til til nå er:

from scitools.all import *

def dvdt(t):
return (exp(-t)*sin(2*pi*t))

a = 0.0
b = 4.0
N = 50
dt=(b-a)/N
time=linspace(a,b,N+1)
#yTrue=exp(-time)*sin(2*pi*time)
v = zeros(len(time)); v[0] = 0
x = zeros(len(time)); x[0] = 0

for i in range(0,len(time)-1,1):
x[i+1] = x + dt*v
v[i+1] = v + dt*dvdt(time)

plot(time,x,'k--')
figure()
plot(time,v,'k--')



Har her utviklet eit "program" som viser hastigheten med hensyn på tiden. da har eg igjen å integrere ein gang til for å få den til å vise for posisjonen.

Lagt inn: 04/03-2013 17:08
av dan
Eulers metode bruker du vel for å løse difflikninger. Bruk heller trapesmetoden eller noe liknende

Lagt inn: 04/03-2013 17:54
av Tor Olav
enda litt manglende info frå min side, det skal brukes euler

Lagt inn: 04/03-2013 23:47
av Brahmagupta
Å løse differensialligningen er jo det samme som å integrere i dette tilfellet, selv foretrekker jeg å gjøre som du har gjort her.

Programmet ditt løser diff. ligningen F''(t) = f(t) for F og F'(t), hvor x tilsvarer F og F'(t) tilsvarer v. Du har altså integrert funksjonen to ganger allerede og trenger ikke å gjøre det igjen! Hvis akselerasjonen a= f(t) så har du funnet både hastighet og posisjon.

Lagt inn: 05/03-2013 08:37
av Tor Olav
når eg kjører gjennom funksjonen og får opp plottene, så får eg ein med "svingninger" og eit der den begynner litt "rart", før den "retter" seg ut og blir lineær. noe eg da leser at blir hastigheten, etter som den vil bli konstant når akselrasjonen avtar.