POLINÔMIO DE HERMITE EXEMPLO1 - dcc.ufrj.br rincon/Disciplinas/Metodos Numericos/POLINOMIO... · polinômios…

Embed Size (px)

Text of POLINÔMIO DE HERMITE EXEMPLO1 - dcc.ufrj.br rincon/Disciplinas/Metodos Numericos/POLINOMIO... ·...

  • > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    restart:

    with(plots):

    with(linalg):

    POLINMIO DE HERMITEEXEMPLO1:

    Interpole a funo e sua derivada pelo Polinmio de Hermite, usando a tabela abaixo, onde por g(x) estamos denotando a devidada de f(x)Queremos interpolar a funo e sua derivada. Multiplicidade 2. Usando trs pontos o grau do polinmio de Hermite N=2+2+2-1=5.note que f(x)=x^2 e g(x)=f(x)=2xx0:=0.0:

    x1:=1.0:

    x2:=2.0:

    O valor da funo f(x)=x^2

    f0:=0.0:

    f1:=1.0:

    f2:=4.0:

    Vamos denotar g valor da derivada g(x)=f ' (x)

    g0:=0.0:

    g1:=2.0:

    g2:=4.0:

    CLCULO DOS POLINMIOS DE LAGRANGE, PARA CADA PONTO UM POLINMIO.NESSE CASO OS PPOLINMIOS SO DE GRAU 2

    L0:=(x-x1)*(x-x2)/((x0-x1)*(x0-x2)):;

    L1:=(x-x0)*(x-x2)/((x1-x0)*(x1-x2)):;

    L2:=(x-x0)*(x-x1)/((x2-x0)*(x2-x1)):;

    LL0:=plot([L0(x)], x=x0..x2, color=[red], style=[line]):

    LL1:=plot([L1(x)], x=x0..x2, color=[blue], style=[line]):

    LL2:=plot([L2(x)], x=x0..x2, color=[green], style=[line]):

    display(LL0,LL1,LL2);

  • > >

    (2)(2)> >

    (1)(1)> >

    > >

    (4)(4)

    (3)(3)

    > >

    > > (6)(6)

    > >

    (7)(7)

    (5)(5)

    x0.5 1 1.5 2

    0

    0.2

    0.4

    0.6

    0.8

    1

    O Grafico acima dos 3 polinmios de Lagrange de grau n=3. Note que os polinmios so ortogonais

    CLCULO DA DERIVADAS DOS POLINMIOS DE LAGRANGE

    DL0:=evalf(diff(L0,x),3);DL0 := 1.00 xK1.50

    DL1:=evalf(diff(L1,x),3);DL1 := K2.00 xC2.00

    DL2:=evalf(diff(L2,x),3);DL2 := 1.00 xK0.500

    D0:=subs(x=x0, DL0);D0 := K1.50

    D1:=subs(x=x1, DL1);D1 := 0.

    D2:=subs(x=x2, DL2);D2 := 1.500

    CLCULO DAS FUNES BASE PARA A FUNO PRIMITIVA f

    PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);

  • > >

    (8)(8)> >

    (10)(10)

    (9)(9)> >

    > >

    > >

    (7)(7)

    > >

    > >

    PHI0 := 0.250 1.C3.00 x xK1.0 2 xK2.0 2

    PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);

    PHI1 := 1.00 x2 xK2.0 2

    PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);

    PHI2 := 0.250 7.00K3.00 x x2 xK1.0 2

    LPHI0:=plot([PHI0(x)], x=x0..x2, color=[red], style=[line]):

    LPHI1:=plot([PHI1(x)], x=x0..x2, color=[blue], style=[line]):

    LPHI2:=plot([PHI2(x)], x=x0..x2, color=[green], style=[line]):

    display(LPHI0,LPHI1,LPHI2);

    x0 0.5 1 1.5 2

    0

    0.2

    0.4

    0.6

    0.8

    1

    O grafico acima a base da funo base que interpola a funo f(x). Note novamente que so polinmios de grau 5 e ortogonais.

    CLCULO DAS FUNES BASE PARA A FUNO g, DERIVADA DAFUNO fPSI0:=(x-x0)*(L0*L0);

  • > >

    > >

    (11)(11)

    > >

    > >

    > >

    (10)(10)

    > >

    > >

    (12)(12)

    PSI0 := 0.2500000000 x xK1.0 2 xK2.0 2

    PSI1:=(x-x1)*(L1)^2;

    PSI1 := 1.000000000 xK1.0 x2 xK2.0 2

    PSI2:=(x-x2)*(L2)^2;

    PSI2 := 0.2500000000 xK2.0 x2 xK1.0 2

    LPS0:=plot([PSI0(x)], x=x0..x2, color=[red], style=[line]):

    LPS1:=plot([PSI1(x)], x=x0..x2, color=[blue], style=[line]):

    LPS2:=plot([PSI2(x)], x=x0..x2, color=[green], style=[line]):

    display(LPS0,LPS1,LPS2);

    x0.5 1 1.5 2

    K0.2

    K0.1

    0

    0.1

    0.2

    O grafico acima a base da funo base que interpola a funo g(x). Note novamente que so polinmios de grau 5 e so ortogonais.

    POLINMIO DE HERMITEAssim o polinmio de Hermite dado por:( combinao dos elementos da base de f com a combinao dos elementos da base da derivada)

    P:=simplify(evalf(f0*PHI0+f1*PHI1+f2*PHI2+g0*PSI0+g1*PSI1+g2*

  • > >

    > >

    (16)(16)

    > >

    > >

    > >

    (14)(14)

    (15)(15)

    > >

    > >

    (13)(13)

    > >

    (17)(17)

    > >

    > >

    > >

    > >

    > >

    (18)(18)

    PSI2,3)); # ESSE POLINMIO DE HERMITE

    P := 1.000000 x2

    CALCULABDO A DERIVADA DO POLINMIO DE HERMITE

    Q:=simplify(evalf(diff(P,x),3));# DERIVADA DO POLINMIO DE

    HERMITE Q := 2.00 x

    VERIFICAO DA INTERPOLAO POLINOMIAL E DE SUA DERIVADA NOS PONTOS TABELADOS.

    a0:=subs(x=0, P);a1:=subs(x=1, P);a2:=subs(x=2, P);a0 := 0.

    a1 := 1.000000a2 := 4.000000

    b0:=subs(x=0, Q);b1:=subs(x=1, Q);b2:=subs(x=2, Q);b0 := 0.

    b1 := 2.00b2 := 4.00

    Se desejamos saber o valor aproximado de f(x) e g(x) no ponto x=0.6, temos:

    a3:=subs(x=0.6, P);a3 := 0.36000000

    b3:=subs(x=0.6, Q);b3 := 1.200

    Note que as tabelas foram construdas a partir da funo f(x)=x^2. Consequentemente a funo g(x)=f(x)=2xAssim facil de f(0.6)=0.36 e g(0.6)=1.2, tendo assim uma excelente aproimao.

    EXEMPLO 2:

    INTERPOLAO DA FUNO f(x) e sua derivadas, usando trs pontos. Queremos interpolar a funo e sua derivada. Multiplicidade 2. Usando trs pontos o grau do polinmiode Hermite N=2+2+2-1=5.

    NOTE QUE EM PARTICULAR SABEMOS QUE f(x)=e^x e g(x)=f(x)=e^x

    x0:=0.0:

    x1:=1.0:

    x2:=2.0:

    O valor da funo f(x)

    f0:=1.00:

    f1:=2.71828:

    f2:=7.389056:

    Vamos denotar g valor da derivada g(x)=f ' (x)

    g0:=1.00:

  • > >

    (29)(29)

    > >

    > >

    > >

    > > (19)(19)

    (22)(22)

    (21)(21)

    > >

    > >

    > >

    (28)(28)

    > >

    (30)(30)

    (24)(24)

    > >

    > >

    (23)(23)

    > >

    > >

    (26)(26)

    (20)(20)

    > >

    (25)(25)

    > >

    > >

    (27)(27)

    > >

    > >

    > >

    > >

    > >

    g1:=2.71828:

    g2:=7.389056:

    CLCULO DOS POLINMIOS DE LAGRANGE, PARA CADA PONTO UM POLINMIO.NESSE CASO OS PPOLINMIOS SO DE GRAU 2

    L0:=evalf((x-x1)*(x-x2)/((x0-x1)*(x0-x2)),3);L0 := 0.500 xK1.0 xK2.0

    L1:=evalf((x-x0)*(x-x2)/((x1-x0)*(x1-x2)),3);L1 := K1.00 x xK2.0

    L2:=evalf((x-x0)*(x-x1)/((x2-x0)*(x2-x1)),3);L2 := 0.500 x xK1.0

    LL0:=plot([L0(x)], x=x0..x2, color=[red], style=[line]):

    LL1:=plot([L1(x)], x=x0..x2, color=[blue], style=[line]):

    LL2:=plot([L2(x)], x=x0..x2, color=[green], style=[line]):

    display(LL0,LL1,LL2):;

    CLCULO DA DERIVADAS DOS POLINMIOS DE LAGRANGE

    DL0:=evalf(diff(L0,x),3);DL0 := 1.00 xK1.50

    DL1:=evalf(diff(L1,x),3);DL1 := K2.00 xC2.00

    DL2:=evalf(diff(L2,x),3);DL2 := 1.00 xK0.500

    D0:=evalf(subs(x=x0, DL0),3);D0 := K1.50

    D1:=subs(x=x1, DL1);D1 := 0.

    D2:=subs(x=x2, DL2);D2 := 1.500

    CLCULO DAS FUNES BASE PARA A FUNO PRIMITIVA f

    PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);

    PHI0 := 0.250 1.C3.00 x xK1.0 2 xK2.0 2

    PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);

    PHI1 := 1.00 x2 xK2.0 2

    PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);

    PHI2 := 0.250 7.00K3.00 x x2 xK1.0 2

    As funes acima a base da funo base que interpola a funo f(x). {PHI0,PHI1,PHI2}Note novamente que so polinmios de grau 5 e ortogonais.

    LPHI0:=plot([PHI0(x)], x=x0..x2, color=[red], style=[line]):

    LPHI1:=plot([PHI1(x)], x=x0..x2, color=[blue], style=[line]):

    LPHI2:=plot([PHI2(x)], x=x0..x2, color=[green], style=[line]):

  • > >

    > >

    (32)(32)

    (33)(33)

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    > >

    (39)(39)

    (31)(31)

    (34)(34)

    > >

    (35)(35)

    > >

    (38)(38)

    (37)(37)

    > >

    (36)(36)

    > >

    display(LPHI0,LPHI1,LPHI2):;

    CLCULO DAS FUNES BASE PARA A FUNO g, DERIVADA DA FUNO f

    PSI0:=(x-x0)*(L0*L0);

    PSI0 := 0.250000 x xK1.0 2 xK2.0 2

    PSI1:=(x-x1)*(L1)^2;

    PSI1 := 1.0000 xK1.0 x2 xK2.0 2

    PSI2:=(x-x2)*(L2)^2;

    PSI2 := 0.250000 xK2.0 x2 xK1.0 2

    As funes acima a base da funo base que interpola a funo g(x). {PSI0,PSI1,PSI2}Note novamente que so polinmios de grau 5 e ortogonais.

    LPS0:=plot([PSI0(x)], x=x0..x2, color=[red], style=[line]):

    LPS1:=plot([PSI1(x)], x=x0..x2, color=[blue], style=[line]):

    LPS2:=plot([PSI2(x)], x=x0..x2, color=[green], style=[line]):

    display(LPS0,LPS1,LPS2):;

    Assim o Polinmio Interpolador de Hermite dado por:( combinao dos elementos da base de fcom a combinao dos elementos da base da derivada)

    OBERVE QUE O POLINMIO TEM GRAU 5P:=simplify(evalf(f0*PHI0+f1*PHI1+f2*PHI2+g0*PSI0+g1*PSI1+g2*

    PSI2,4)); # ESSE POLINMIO DE HERMITE

    P := xC1.00000000C0.0010000 x4C0.20800000 x3C0.024000 x5C0.48500000 x2

    CALCULABDO A DERIVADA DO POLINMIO DE HERMITEQ:=simplify(evalf(diff(P,x),4)); # DERIVADA DO POLINMIO DE

    HERMITE

    Q := 1.C0.004000 x3C0.6240 x2C0.1200 x4C0.9700 x

    VERIFICAO DA INTERPOLAO POLINOMIAL E DE SUA DERIVADA NOS PONTOS TABELADOS.f(x)

    a0:=subs(x=0, P);a1:=subs(x=1, P);a2:=subs(x=2, P);a0 := 1.00000000a1 := 2.71800000a2 := 7.38800000

    b0:=subs(x=0, Q);b1:=subs(x=1, Q);b2:=subs(x=2, Q);b0 := 1.

    b1 := 2.718000b2 := 7.388000

    Se desejamos saber o valor aproximado de f(x) e g(x) no ponto x=1.3, temos:

    a3:=subs(x=1.3, P);a3 := 3.668592420

    b3:=subs(x=1.3, Q);

  • > >

    (40)(40)

    (43)(43)

    > >

    > >

    (41)(41)

    > >

    > >