Description Usage Arguments Details Value Author(s) Examples
Esta funci<c3><b3>n resuelve el sistema de ecuaciones diferenciales, es llamada dentro de la funci<c3><b3>n principal ODE_Sys con el fin de hallar los valores que conforman la soluci<c3><b3>n.
1 | solucion (d, vars, init, h, n, method, point)
|
d |
Representa al vector de las ecuaciones diferenciales que componen el sistema a solucionar. Ejemplo -> ["Eqn1","Eqn2","Eqn3", ...] |
vars |
Representa al vector con los nombre de la variables incluyendo la variable independiente (t) al final del vector. Ejemplo -> ["x1","x2","x3", ...,"t"] |
init |
Vector con los valores iniciales incluyendo la variable indepediente (t) al final del vector. Ejemplo -> [x1_0,x2_0,x3_0, ...,t_0] |
h |
Constante. |
n |
N<c3><ba>mero de puntos de la soluci<c3><b3>n que se requieren. |
method |
M<c3><a9>todo para encontrar la soluci<c3><b3>n. Se encoge entre las siguientes opciones -> ["euler","midpoint",rk4"] |
point |
Punto deseado para evaluar la soluci<c3><b3>n. |
La soluci<c3><b3>n claramente depender<c3><a1> principalmente del m<c3><a9>todo a implantar para resolver el sistema de ecuaciones diferenciales.
La funci<c3><b3>n retorna una lista de valores correspondientes a la soluci<c3><b3>n num<c3><a9>rica para cada valor de la variable independiente.
Pablo Millan y Oscar Fonseca
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # Ejemplos:
#sol=solucion(c("x*y","x*y-1"),c("x","y","t"),c(0.5,0.5,0),0.1,500,"euler",0.62)
#sol=solucion(c("x*y","x*y-1"),c("x","y","t"),c(-2,1,0),0.01,400,"midpoint",0.5)
#sol=solucion(c("x*y","x*y-1"),c("x","y","t"),c(-2,2,0),0.01,700,"rk4",0.674)
#sol=solucion(c("x-y+z","x*y-1","z+3*x"),c("x","y","z","t"),c(0,1,1,0),0.01,450,"euler",0.5)
##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
Solucion <- function(d, vars, init, h, n, method, point){
if (method=="euler"){
values=matrix(init,ncol = 1)
for (i in 1:length(d)){
assign(vars[i],init[i])
}
npoints=1
values=cbind(values,numeric(length(d)+1))
while (npoints<n) {
for (i in 1:length(d)){
values[i,npoints+1]=values[i,npoints]+h*eval(parse(text=d[i]))
}
for (i in 1:length(d)){
assign(vars[i],values[i,npoints+1])
}
values[length(d)+1,npoints+1]=values[length(d)+1,npoints]+h
assign(vars[length(d)+1],values[length(d)+1,npoints+1])
values=cbind(values,numeric(length(d)+1))
npoints=npoints+1
}
values=values[,-npoints-1]
}
if (method=="midpoint"){
values=matrix(init,ncol = 1)
for (i in 1:length(d)){
assign(vars[i],init[i]+h/2)
}
npoints=1
values=cbind(values,numeric(length(d)+1))
while (npoints<n) {
for (i in 1:length(d)){
values[i,npoints+1]=values[i,npoints]+h*eval(parse(text=d[i]))
}
for (i in 1:length(d)){
assign(vars[i],values[i,npoints+1]+h/2)
}
values[length(d)+1,npoints+1]=values[length(d)+1,npoints]+h
assign(vars[length(d)+1],values[length(d)+1,npoints+1])
values=cbind(values,numeric(length(d)+1))
npoints=npoints+1
}
values=values[,-npoints-1]
}
if (method=="rk4"){
values=matrix(init,ncol = 1)
for (i in 1:length(d)){
assign(vars[i],init[i]+h/2)
}
npoints=1
values=cbind(values,numeric(length(d)+1))
while (npoints<n) {
k1=numeric(length(d))
k2=numeric(length(d))
k3=numeric(length(d))
k4=numeric(length(d))
for (i in 1:length(d)){
k1[i]=h*eval(parse(text=d[i]))
assign(vars[i],values[i,npoints]+k1[i]/2)
}
for (i in 1:length(d)){
k2[i]=h*eval(parse(text=d[i]))
assign(vars[i],values[i,npoints]+k2[i]/2)
}
for (i in 1:length(d)){
k3[i]=h*eval(parse(text=d[i]))
assign(vars[i],values[i,npoints]+k3[i])
}
for (i in 1:length(d)){
k4[i]=h*eval(parse(text=d[i]))
}
for (i in 1:length(d)){
values[i,npoints+1]=values[i,npoints]+ k1[i]/6 + k2[i]/3 + k3[i]/3 + k4[i]/6
}
for (i in 1:length(d)){
assign(vars[i],values[i,npoints+1])
}
values[length(d)+1,npoints+1]=values[length(d)+1,npoints]+h
assign(vars[length(d)+1],values[length(d)+1,npoints+1])
values=cbind(values,numeric(length(d)+1))
npoints=npoints+1
}
values=values[,-npoints-1]
}
return (values)
}
{ ~kwd1 }
{ ~kwd2 }
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.