Para s=4 k1=f(tn,yn)k2=f(tn+c2h,yn+h(a21k1))k3=f(tn+c3h,yn+h(a31k1+a32k2))k4=f(tn+c4h,yn+h(a41k1+a42k2+a43k3))yn+1=yn+h(b1k1+b2k2+b3k3+b4k4)
tabla parametrizada de Butcher desarrollado por Tan Delin y Chen Zhen
012121212−1λ1λ101−λ2λ2164−λ6λ616
si λ=2
0121212012100116131316
reemplazando se obtiene el método clásico de cuarto orden k1=f(tn,yn)k2=f(tn+12h,yn+h(12k1))k3=f(tn+12h,yn+h(12k2))k4=f(tn+h,yn+h(k3))yn+1=yn+h(16k1+13k2+13k3+16k4)
Resolver y′=4e0.8x−0.5yy(0)=2y(1)=?
Para la solución numérica elegimos n=2 h=xf−xin=1−02=0.5
Iteracion 0 y0=2x0=0
Iteración 1 k1=f(x0,y0)=f(0,2)=4e0.8(0)−0.5(2)=3k2=f(x0+12h,y0+h(12k1))=f(0+0.5(0.5),2+0.5(0.5⋅3))=f(0.25,2.75)=4e0.8(0.25)−0.5(2.75)=3.511k3=f(x0+12h,y0+h(12k2))=f(0+0.5(0.5),2+0.5(0.5⋅3.511))=f(0.25,2.878)=4e0.8(0.25)−0.5(2.878)=3.447k4=f(x0+h,y0+h(k3))=f(0+0.5,2+0.5(3.447))=f(0.5,3.724)=4e0.8(0.5)−0.5(3.724)=4.105y1=y0+h(16k1+13k2+13k3+16k4)=2+0.5[0.167(3)+0.333(3.511)+0.333(3.447)+0.167(4.105)]=3.752x1=x0+h=0+0.5=0.5
Iteración 2 k1=f(x1,y1)=f(0.5,3.752)=4e0.8(0.5)−0.5(3.752)=4.091k2=f(x1+12h,y1+h(12k1))=f(0.5+0.5(0.5),3.752+0.5(0.5⋅4.091))=f(0.75,4.775)=4e0.8(0.75)−0.5(4.775)=4.901k3=f(x1+12h,y1+h(12k2))=f(0.5+0.5(0.5),3.752+0.5(0.5⋅4.901))=f(0.75,4.977)=4e0.8(0.75)−0.5(4.977)=4.8k4=f(x1+h,y1+h(k3))=f(0.5+0.5,3.752+0.5(4.8))=f(1,6.152)=4e0.8(1)−0.5(6.152)=5.826y2=y1+h(16k1+13k2+13k3+16k4)=3.752+0.5[0.167(4.091)+0.333(4.901)+0.333(4.8)+0.167(5.826)]=6.195x2=x1+h=0.5+0.5=1
function prueba3(f::Function, n, xi, yi, xf)
h = (xf - xi)/n
y = yi
x = xi
c2 = 1/2
a21 = 1/2
c3 = 1/2
a31 = 0
a32 = 1/2
c4 = 1
a41 = 0
a42 = 0
a43 = 1
b1 = 1/6
b2 = 1/3
b3 = 1/3
b4 = 1/6
@printf("%s %s %8s %8s %8s %7s %8s\n", "i", "k1", "k2", "k3", "k4", "x", "y")
for i = 1:n
k1 = f(x,y)
k2 = f(x + (c2 * h), y + (h * a21 * k1))
k3 = f(x + (c3 * h), y + (h * ((a31 * k1) + (a32 * k2))))
k4 = f(x + (c4 * h), y + (h * ((a41 * k1) + (a42 * k2) + (a43 * k3))))
y = y + (h * ((b1 * k1) + (b2 * k2) + (b3 * k3) + (b4 * k4)))
x = x + h
@printf("%d %f %f %f %f %f %f\n", i, k1, k2, k3, k4, x, y)
end
println("x = $x")
println("y = $y")
end
prueba3 (generic function with 1 method)
prueba3(f,2,0,2,1)
i k1 k2 k3 k4 x y
1 3.000000 3.510611 3.446785 4.105603 0.500000 3.751699
2 4.091449 4.901194 4.799976 5.826320 1.000000 6.195042
x = 1.0
y = 6.1950419941330015
Método regla 38 (Kutta, 1901)
0131323−13111−1118383818
reemplazando k1=f(tn,yn)k2=f(tn+13h,yn+h(13k1))k3=f(tn+23h,yn+h(−13k1+k2))k4=f(tn+h,yn+h(k1−k2+k3))yn+1=yn+h(18k1+38k2+38k3+18k4)
Resolver y′=4e0.8x−0.5yy(0)=2y(1)=?
Para la solución numérica elegimos n=2 h=xf−xin=1−02=0.5
Iteracion 0 y0=2x0=0
Iteración 1 k1=f(x0,y0)=f(0,2)=4e0.8(0)−0.5(2)=3k2=f(x0+13h,y0+h(13k1))=f(0+0.333(0.5),2+0.5(0.333⋅3))=f(0.166,2.5)=4e0.8(0.166)−0.5(2.5)=3.318k3=f(x0+23h,y0+h(−13k1+k2))=f(0+0.667(0.5),2+0.5[(−0.333⋅3)+3.318])=f(0.334,3.16)=4e0.8(0.334)−0.5(3.16)=3.645k4=f(x0+h,y0+h(k1−k2+k3))=f(0+0.5,2+0.5(3−3.318+3.645))=f(0.5,3.664)=4e0.8(0.5)−0.5(3.664)=4.135y1=y0+h(18k1+38k2+38k3+18k4)=2+0.5[0.125(3)+0.375(3.318)+0.375(3.645)+0.125(4.135)]=3.752x1=x0+h=0+0.5=0.5
Iteración 2 k1=f(x1,y1)=f(0.5,3.752)=4e0.8(0.5)−0.5(3.752)=4.091k2=f(x1+13h,y1+h(13k1))=f(0.5+0.333(0.5),3.752+0.5(0.333⋅4.091))=f(0.666,4.433)=4e0.8(0.666)−0.5(4.433)=4.598k3=f(x1+23h,y1+h(−13k1+k2))=f(0.5+0.667(0.5),3.752+0.5[(−0.333⋅4.091)+4.598])=f(0.834,5.37)=4e0.8(0.834)−0.5(5.37)=5.11k4=f(x1+h,y1+h(k1−k2+k3))=f(0.5+0.5,3.752+0.5(4.091−4.598+5.11))=f(1,6.054)=4e0.8(1)−0.5(6.054)=5.875y2=y1+h(18k1+38k2+38k3+18k4)=3.752+0.5[0.125(4.091)+0.375(4.598)+0.375(5.11)+0.125(5.875)]=6.195x2=x1+h=0.5+0.5=1
function prueba4(f::Function, n, xi, yi, xf)
h = (xf - xi)/n
y = yi
x = xi
c2 = 1/3
a21 = 1/3
c3 = 2/3
a31 = -1/3
a32 = 1
c4 = 1
a41 = 1
a42 = -1
a43 = 1
b1 = 1/8
b2 = 3/8
b3 = 3/8
b4 = 1/8
@printf("%s %s %8s %8s %8s %7s %8s\n", "i", "k1", "k2", "k3", "k4", "x", "y")
for i = 1:n
k1 = f(x,y)
k2 = f(x + (c2 * h), y + (h * a21 * k1))
k3 = f(x + (c3 * h), y + (h * ((a31 * k1) + (a32 * k2))))
k4 = f(x + (c4 * h), y + (h * ((a41 * k1) + (a42 * k2) + (a43 * k3))))
y = y + (h * ((b1 * k1) + (b2 * k2) + (b3 * k3) + (b4 * k4)))
x = x + h
@printf("%d %f %f %f %f %f %f\n", i, k1, k2, k3, k4, x, y)
end
println("x = $x")
println("y = $y")
end
prueba4 (generic function with 1 method)
prueba4(f,2,0,2,1)
i k1 k2 k3 k4 x y
1 3.000000 3.320523 3.642290 4.136857 0.500000 3.751581
2 4.091508 4.601670 5.105687 5.877492 1.000000 6.194773
x = 1.0
y = 6.194772995719224