Necesito: posición $x$, velocidad $v$, masa $m$, [carga $q$, color...]
In [5]:
x = 3.
v = 1.
m = 1.
Out[5]:
Mover la partícula:
In [8]:
function mover(x, v, δt)
x = x + v*δt
end
Out[8]:
In [7]:
mover(1)
Out[7]:
In [15]:
x
In [16]:
x2 = 1
v2 = 3
Out[16]:
Otra representación:
In [17]:
particula = [3, 4., "particulita"]
# son [x, v, etiqueta]
Out[17]:
In [18]:
dt = 0.5
particula[1] = particula[1] + dt * particula[2]
# NO SE ENTIENDE NADA
Out[18]:
Voy hacer una caja que contiene cosas con nombres:
In [19]:
type Particula
x
v
m
end
In [20]:
Particula
Out[20]:
In [21]:
methods(Particula)
Out[21]:
In [22]:
p = Particula(1, 2, 3)
Out[22]:
In [23]:
p
Out[23]:
In [24]:
p.x
Out[24]:
In [25]:
p.v
Out[25]:
In [26]:
p.m
Out[26]:
In [27]:
dt = 0.5
p.x += p.v*dt # equivalente a p.x = p.x + p.v*dt
Out[27]:
In [28]:
p2 = Particula(4, 5, 6)
Out[28]:
In [29]:
p
Out[29]:
In [30]:
p2
Out[30]:
In [31]:
p2.x, p2.v, p2.m
Out[31]:
In [32]:
p3 = Particula("hola", "soy", "yo")
Out[32]:
In [33]:
type Particula2
x::Real
v::Real
m::Real
end
In [34]:
Particula2("HOLA", "y", "eso")
In [35]:
Particula2(-3, 10, Inf)
Out[35]:
In [36]:
p
Out[36]:
In [42]:
function mover!(p::Particula, dt)
p.x += p.v * dt
end
function mover!(p::Particula2, dt)
p.x += p.v * 3*dt
end
Out[42]:
In [43]:
methods(mover!)
Out[43]:
In [44]:
methods(+)
Out[44]:
In [39]:
mover(p, 1.)
Out[39]:
In [40]:
p
Out[40]:
In [46]:
p1 = Particula(1, 2, 3)
p2 = Particula(4, 5, 6)
Out[46]:
In [47]:
p1 + p2
Sólo como ejemplo:
In [48]:
function +(p1::Particula, p2::Particula)
Particula(p1.x+p2.x, p1.v+p2.v, p1.m+3*p2.m)
end
Out[48]:
In [49]:
p1 + p2
Out[49]:
In [50]:
+(p1, p2)
Out[50]:
In [51]:
methods(+)
Out[51]:
In [52]:
using ValidatedNumerics
In [53]:
a = Interval(1, 2)
Out[53]:
In [54]:
b = Interval(3, 4)
Out[54]:
In [55]:
a + b
Out[55]:
In [56]:
a - b
Out[56]:
In [57]:
Interval(0.1)
Out[57]:
In [58]:
big(0.1)
Out[58]:
In [59]:
@interval(0.1)
Out[59]:
In [60]:
macroexpand(:(@interval(0.1)))
Out[60]:
In [61]:
ValidatedNumerics.big_transf(0.1)
Out[61]:
In [64]:
s = "x + y"
Out[64]:
In [66]:
typeof(s)
Out[66]:
In [67]:
expr = parse(s)
Out[67]:
In [69]:
typeof(expr)
Out[69]:
In [70]:
dump(expr)
In [71]:
expr.args
Out[71]:
In [72]:
expr.args[2] = :z
Out[72]:
In [73]:
expr
Out[73]:
In [74]:
z
In [75]:
y
In [76]:
z = 3
y = 4
Out[76]:
In [77]:
eval(expr)
Out[77]:
In [78]:
expr
Out[78]:
In [79]:
z
Out[79]:
In [80]:
:z
Out[80]:
In [81]:
z = [3, 4]
y = [4, 5]
Out[81]:
In [82]:
eval(expr)
Out[82]:
In [83]:
z = Particula(1,2,3)
y = Particula(10, 20, 30)
Out[83]:
In [85]:
eval(expr)
Out[85]:
In [86]:
Out[86]:
In [91]:
macro transf(expr)
@show expr
expr.args[2] = :z
@show expr
end
In [92]:
@transf(x+y)
Out[92]:
In [93]:
@transf(x+x)
In [95]:
macro transf(expr)
@show expr
for i in 2:length(expr.args)
if expr.args[i] == :x
expr.args[i] = :z
end
end
@show expr
end
In [96]:
@transf(x+y)
Out[96]:
In [97]:
@transf(x+x)
Out[97]:
In [98]:
@transf(2*x)
In [100]:
z = 3
Out[100]:
In [101]:
@transf(2*x)
Out[101]:
In [102]:
macroexpand(:(@transf(x+y)))
Out[102]:
In [103]:
macroexpand(:(@time sin(10)))
Out[103]:
In [104]:
s = :x
Out[104]:
In [105]:
typeof(s)
Out[105]:
In [107]:
ex = :(x + y)
Out[107]:
In [108]:
typeof(ex)
Out[108]:
In [109]:
ex = :(x + 3y^2 - sin(16))
Out[109]:
In [110]:
typeof(ex)
Out[110]:
In [111]:
dump(ex)
In [112]:
ex = :(eig(M))
Out[112]:
In [113]:
dump
Out[113]:
In [114]:
dump(ex)
In [115]:
Meta.show_sexpr(ex)
In [ ]: