Processing math: 100%

 

 

 

Métodos de cuarto orden

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

0121212121λ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.8x0.5yy(0)=2y(1)=?

Para la solución numérica elegimos n=2 h=xfxin=102=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.53))=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.53.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.54.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.54.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)

0131323131111118383818

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(k1k2+k3))yn+1=yn+h(18k1+38k2+38k3+18k4)

Resolver y=4e0.8x0.5yy(0)=2y(1)=?

Para la solución numérica elegimos n=2 h=xfxin=102=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.3333))=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.3333)+3.318])=f(0.334,3.16)=4e0.8(0.334)0.5(3.16)=3.645k4=f(x0+h,y0+h(k1k2+k3))=f(0+0.5,2+0.5(33.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.3334.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.3334.091)+4.598])=f(0.834,5.37)=4e0.8(0.834)0.5(5.37)=5.11k4=f(x1+h,y1+h(k1k2+k3))=f(0.5+0.5,3.752+0.5(4.0914.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