[Haskell-cafe] Yampa integral function
felipe zapata
tifonzafel at gmail.com
Wed Apr 17 00:36:12 CEST 2013
Hello,
I'm trying to write some simulator of
physical systems using Yampa.
The fundamental idea is to integrate
the position and velocity, using
the following algorithm:
1. get the velocity using the formula,
v = v0 + integral ( 0.5 * force * recip mass)
where v0 is the previous velocity.
2. calculate the new position as follows,
x = x0 + integral (v)
and some other steps that are not relevant here.
Therefore I wrote the following piece of
code:
type Pos = Double
type Vel = Double
type Mass = Double
type Force = Double
integralCoordSF :: Force -> Mass -> SF (Pos,Vel) (Pos,Vel)
integralCoordSF force mass = proc (x0,v0) -> do
v <- integralVelSF force mass -< v0
vdt2 <- integral -< v
let x = x0 + vdt2
returnA -< (x,v)
integralVelSF :: Force -> Mass -> SF Double Double
integralVelSF force mass = proc v0 -> do
t1 <- integral -< 0.5 * (force/mass)
returnA -< v0 + t1
Now, let's the speed (velocity), force and the mass equal 1.0. And
the initial potion equal zero. Then using the "embed" function we get that,
*Main> embed (integralCoordSF 1.0 1.0)
((0.0,1.0),[(0.1,Nothing),(0.1,Nothing)])
[(0.0,1.0),(0.1,1.05),(0.20500000000000002,1.1)]
According to the algorithm, if dt = 0.1 then
v = 1.0 + integral (0.5 * 1.0 * recip 1.0) = 1.05
in agreement with the algorithm. But let's see about the position
x = 0 + integral (v)
Using the formula of step 2, the position should be equal to 0.105,
but the result given by embed is 0.1.
As a beginner certainly and missing a lot of concepts and details,
can someone please explain me what's going on here?
Thank you for your help!
Felipe Z
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130417/8e586db6/attachment.htm>
More information about the Haskell-Cafe
mailing list