x - DCC/UFRJ

Propaganda
> restart:
> with(plots):
> with(linalg):
POLINÔMIO DE HERMITE
EXEMPLO1:
Interpole a função e sua derivada pelo Polinômio de Hermite, usando a tabela
abaixo, onde por g(x) estamos denotando a devidada de f(x)
Queremos interpolar a função e sua derivada. Multiplicidade 2. Usando três
pontos o grau do polinômio de Hermite é N=2+2+2-1=5
> x0:=0.0:
> x1:=1.0:
> x2:=2.0:
O valor da função 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:
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA CADA PONTO
UM POLINÔMIO.
NESSE CASO OS PPOLINÔMIOS SÃO 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);
1
0.8
0.6
0.4
0.2
0
0.5
1
x
1.5
2
O Grafico acima é dos 3 polinômios de Lagrange de grau n=3. Note que os polinômios são ortogonais
CÁLCULO DA DERIVADAS DOS POLINÔMIOS DE LAGRANGE
> DL0:=evalf(diff(L0,x),3);
DL0 := 1.00 x K 1.50
> DL1:=evalf(diff(L1,x),3);
DL1 := K2.00 x C2.00
> DL2:=evalf(diff(L2,x),3);
DL2 := 1.00 x K0.500
> D0:=subs(x=x0, DL0);
D0 := K1.50
> D1:=subs(x=x1, DL1);
D1 := 0.
> D2:=subs(x=x2, DL2);
D2 := 1.500
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);
(1)
(2)
(3)
(4)
(5)
(6)
(7)
2
2
PHI0 := 0.250 1. C3.00 x x K1.0
x K2.0
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
2
PHI1 := 1.00 x x K2.0
> PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);
2
2
PHI2 := 0.250 7.00 K 3.00 x x x K1.0
> LPHI0:=plot([PHI0(x)], x=x0..x2, color=[red], style=[line]):
(7)
(8)
(9)
> 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);
1
0.8
0.6
0.4
0.2
0
0
0.5
1
x
1.5
2
O grafico acima é a base da função base que interpola a função f(x). Note novamente que são
polinômios de grau 5 e ortogonais.
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI0:=(x-x0)*(L0*L0);
(10)
2
2
PSI0 := 0.2500000000 x x K1.0
x K2.0
> PSI1:=(x-x1)*(L1)^2;
2
2
PSI1 := 1.000000000 x K1.0 x x K 2.0
> PSI2:=(x-x2)*(L2)^2;
2
2
PSI2 := 0.2500000000 x K2.0 x x K1.0
> LPS0:=plot([PSI0(x)], x=x0..x2, color=[red], style=[line]):
(10)
(11)
(12)
> 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);
0.2
0.1
0
0.5
1
x
1.5
2
K0.1
K0.2
O grafico acima é a base da função base que interpola a função g(x). Note novamente que são
polinômios de grau 5 e são ortogonais.
POLINÔMIO DE HERMITE
Assim o polinômio de Hermite é dado por:( combinação dos elementos da base de f com a combinação
dos elementos da base da derivada)
> P:=simplify(evalf(f0*PHI0+f1*PHI1+f2*PHI2+g0*PSI0+g1*PSI1+g2*
>
PSI2,3)); # ESSE É POLINÔMIO DE HERMITE
2
P := 1.000000 x
CALCULABDO A DERIVADA DO POLINÔMIO DE HERMITE
(13)
> Q:=simplify(evalf(diff(P,x),3));# DERIVADA DO POLINÔMIO DE
HERMITE
Q := 2.00 x
(14)
VERIFICAÇÃO DA INTERPOLAÇÃO 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.000000
(15)
a2 := 4.000000
> b0:=subs(x=0, Q);b1:=subs(x=1, Q);b2:=subs(x=2, Q);
b0 := 0.
b1 := 2.00
(16)
b2 := 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
(17)
> b3:=subs(x=0.6, Q);
b3 := 1.200
(18)
Note que as tabelas foram construídas a partir da função f(x)=x^2. Consequentemente a função g(x)=f´
(x)=2x
Assim é facil de f(0.6)=0.36 e g(0.6)=1.2, tendo assim uma excelente aproimação.
EXEMPLO 2:
INTERPOLAÇÃO DA FUNÇÃO f(x) e sua derivadas, usando três pontos.
Queremos interpolar a função e sua derivada. Multiplicidade 2. Usando três pontos o grau do polinômio
de Hermite é N=2+2+2-1=5
> x0:=0.0:
> x1:=1.0:
> x2:=2.0:
O valor da função f(x)
> f0:=1.00:
> f1:=2.71828:
> f2:=7.389056:
Vamos denotar g valor da derivada g(x)=f ' (x)
> g0:=1.00:
> g1:=2.71828:
> g2:=7.389056:
>
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA CADA PONTO UM POLINÔMIO.
NESSE CASO OS PPOLINÔMIOS SÃO DE GRAU 2
> L0:=evalf((x-x1)*(x-x2)/((x0-x1)*(x0-x2)),3);
L0 := 0.500 x K 1.0 x K2.0
> L1:=evalf((x-x0)*(x-x2)/((x1-x0)*(x1-x2)),3);
L1 := K1.00 x x K 2.0
> L2:=evalf((x-x0)*(x-x1)/((x2-x0)*(x2-x1)),3);
L2 := 0.500 x x K1.0
> LL0:=plot([L0(x)], x=x0..x2, color=[red], style=[line]):
(19)
(20)
(21)
> 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):;
CÁLCULO DA DERIVADAS DOS POLINÔMIOS DE LAGRANGE
> DL0:=evalf(diff(L0,x),3);
DL0 := 1.00 x K 1.50
> DL1:=evalf(diff(L1,x),3);
DL1 := K2.00 x C2.00
> DL2:=evalf(diff(L2,x),3);
DL2 := 1.00 x K0.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
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);
2
2
PHI0 := 0.250 1. C3.00 x x K1.0
x K2.0
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
2
PHI1 := 1.00 x x K2.0
> PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);
2
2
PHI2 := 0.250 7.00 K 3.00 x x x K1.0
As funções acima é a base da função base que interpola a função f(x). {PHI0,PHI1,PHI2}
Note novamente que são polinômios 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]):
> display(LPHI0,LPHI1,LPHI2):;
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA FUNÇÃO f
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
> PSI0:=(x-x0)*(L0*L0);
2
2
PSI0 := 0.250000 x x K1.0
x K2.0
> PSI1:=(x-x1)*(L1)^2;
2
2
PSI1 := 1.0000 x K1.0 x x K2.0
> PSI2:=(x-x2)*(L2)^2;
2
2
PSI2 := 0.250000 x K2.0 x x K1.0
(31)
(32)
(33)
As funções acima é a base da função base que interpola a função g(x). {PSI0,PSI1,PSI2}
Note novamente que são polinômios 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 Polinômio Interpolador de Hermite é dado por:( combinação
dos elementos da base de f com a combinação dos elementos da base da
derivada)
OBERVE QUE O POLINÔMIO TEM GRAU 5
> P:=simplify(evalf(f0*PHI0+f1*PHI1+f2*PHI2+g0*PSI0+g1*PSI1+g2*
PSI2,4)); # ESSE É POLINÔMIO DE HERMITE
4
3
5
2
P := x C1.00000000 C0.0010000 x C0.20800000 x C0.024000 x C0.48500000 x
(34)
CALCULABDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q:=simplify(evalf(diff(P,x),4)); # DERIVADA DO POLINÔMIO DE
HERMITE
3
2
4
Q := 1. C0.004000 x C0.6240 x C0.1200 x C0.9700 x
(35)
VERIFICAÇÃO DA INTERPOLAÇÃO 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.00000000
a1 := 2.71800000
a2 := 7.38800000
> b0:=subs(x=0, Q);b1:=subs(x=1, Q);b2:=subs(x=2, Q);
b0 := 1.
b1 := 2.718000
b2 := 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);
(36)
(37)
(38)
(39)
b3 := 3.667080000
(39)
Note que as tabelas foram construídas a partir da função f(x)=exp(x). Consequentemente a função g(x)=
f´(x)=exp(x)
Assim temos o seguinte valor "exato" para a função exponencial:
> aa3:=evalf(subs(x=1.3, exp(x)));
aa3 := 3.669296668
(40)
> bb3:=evalf(subs(x=1.3, exp(x)));
bb3 := 3.669296668
(41)
Podemos verificar o erro absoluto da aproximação da função e de sua derivada.
> e1:=abs(aa3-a3);
e1 := 0.000704248
(42)
e2 := 0.002216668
(43)
> e2:=abs(bb3-b3);
EXEMPLO 3:
Determine o polinômio de Hermite para os 4 pontos tabelados. Observe que agora
o grau do polinômio é :
São 4 pontos então teremos um polinômio de grau n=2*4-1=7
> x0:=0:
> x1:=0.5:
> x2:=1.0:
> x3:=1.5:
O valor da função f(x)
> f0:=0.0:
> f1:=15.0:
> f2:=22.0:
> f3:=21.0:
Vamos denotar g valor da derivada g(x)=f ' (x)
> g0:=18.86:
> g1:=20.47:
> g2:=19.38:
> g3:=21.00:
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA CADA PONTO UM POLINÔMIO.
NESSE CASO OS PPOLINÔMIOS SÃO DE GRAU 3
> L0:=evalf((x-x1)*(x-x2)*(x-x3)/((x0-x1)*(x0-x2)*(x0-x3)),3);
L0 := K1.33 x K 0.5 x K1.0 x K1.5
> L1:=evalf((x-x0)*(x-x2)*(x-x3)/((x1-x0)*(x1-x2)*(x1-x3)),3);
L1 := 4.00 x x K1.0 x K1.5
(44)
(45)
> L2:=evalf((x-x0)*(x-x1)*(x-x3)/((x2-x0)*(x2-x1)*(x2-x3)),3);
L2 := K4.00 x x K0.5 x K1.5
> L3:=evalf((x-x0)*(x-x1)*(x-x2)/((x3-x0)*(x3-x1)*(x3-x2)),3);
L3 := 1.33 x x K0.5 x K1.0
> LL0:=plot([L0(x)], x=x0..x3, color=[red], style=[line]):
> LL1:=plot([L1(x)], x=x0..x3, color=[blue], style=[line]):
> LL2:=plot([L2(x)], x=x0..x3, color=[green], style=[line]):
> LL3:=plot([L3(x)], x=x0..x3, color=[black], style=[line]):
> display(LL0,LL1,LL2,LL3);
1.0
0.8
0.6
0.4
0.2
0
0.5
1
1.5
x
K0.2
OBSERVE PELO GRÁFICO QUE OS QUATRO POLINÔMIOS DE LAGRANGE SÃO
ORTOGONAIS EM RELAÇÃO AOS PONTOS TABELADOS.
CÁLCULO DA DERIVADAS DOS POLINÔMIOS DE LAGRANGE
> DL0:=diff(L0,x):;
> DL1:=diff(L1,x):;
> DL2:=diff(L2,x):;
(46)
(47)
> DL3:=diff(L3,x):;
> D0:=subs(x=x0, DL0):;
> D1:=subs(x=x1, DL1):;
> D2:=subs(x=x2, DL2):;
> D3:=subs(x=x3, DL3):;
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI0:=(1-2*D0*(x-x0))*(L0)^2;
2
2
2
PHI0 := 1.7689 1 C7.3150 x x K0.5
x K1.0
x K1.5
> PHI1:=(1-2*D1*(x-x1))*(L1)^2;
3
2
2
PHI1 := 32.00000000 x x K1.0
x K1.5
> PHI2:=(1-2*D2*(x-x2))*(L2)^2;
2
2
2
PHI2 := 16.0000 3.00000 K 2.0000 x x x K0.5
x K1.5
> PHI3:=(1-2*D3*(x-x3))*(L3)^2;
2
2
2
PHI3 := 1.7689 11.97250 K 7.3150 x x x K0.5
x K1.0
> #LPHI0:=plot([PHI0(x)], x=x0..x3, color=[red], style=[line]):
(48)
(49)
(50)
(51)
> #LPHI1:=plot([PHI1(x)], x=x0..x3, color=[blue], style=[line]):
> #LPHI2:=plot([PHI2(x)], x=x0..x3, color=[green], style=[line]):
> #LPHI3:=plot([PHI3(x)], x=x0..x3, color=[black], style=[line]):
> #display(LPHI0,LPHI1,LPHI2, LPHI3);
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI0:=evalf((x-x0)*(L0*L0),3);
2
PSI0 := 1.77 x x K 0.5
> PSI1:=evalf((x-x1)*(L1*L1),3);
2
PSI1 := 16.0 x K0.5 x
> PSI2:=evalf((x-x2)*(L2)^2,3);
2
PSI2 := 16.0 x K1.0 x
> PSI3:=evalf((x-x3)*(L3)^2,3);
2
PSI3 := 1.77 x K1.5 x
> #LPS0:=plot([PSI0(x)], x=x0..x3,
x K 1.0
2
x K 1.5
2
(52)
x K 1.0
2
x K 1.5
2
(53)
x K 0.5
2
x K 1.5
2
(54)
2
(55)
2
x K 0.5
x K 1.0
color=[red], style=[line]):
> #LPS1:=plot([PSI1(x)], x=x0..x3, color=[blue], style=[line]):
> #LPS2:=plot([PSI2(x)], x=x0..x3, color=[green], style=[line]):
> #LPS3:=plot([PSI3(x)], x=x0..x3, color=[black], style=[line]):
> #display(LPS0,LPS1,LPS2,LPS3);
POLINÔMIO DE HERMITE
OBSERVE QUE O POLINÔMIO TEM GRAU 7
> P:=simplify(evalf(f0*PHI0+f1*PHI1+f2*PHI2+f3*PHI3+g0*PSI0+g1*
>
PSI1+g2*PSI2+g3*PSI3,4)); # ESSE É POLINÔMIO DE HERMITE
7
6
4
3
P := 18.77625000 x C212.39775 x K987.352750 x K1271.730000 x C346.336188 x
5
2
C1692.901188 x C10.6713750 x
(56)
> LP0:=plot([P(x)], x=x0..x3, color=[black], style=[point]):
> display(LP0);
20
15
10
5
0
0
0.5
1
1.5
x
CALCULANDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q:=simplify(evalf(diff(P,x),5)); # DERIVADA DO POLINÔMIO DE
HERMITE
6
5
3
2
4
Q := 18.776 C1486.8 x K5924.1 x K5086.8 x C1039.0 x C8464.5 x C21.342 x
> LQ0:=plot([Q(x)], x=x0..x3, color=[black], style=[point]):
> display(LQ0);
(57)
30
20
10
0
0.5
1
1.5
x
K10
K20
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA
DERIVADA NOS PONTOS TABELADOS.
> a0:=subs(x=0.0, P);a1:=subs(x=0.5, P);a2:=subs(x=1.0, P);a3:=subs
(x=1.5, P);
a0 := 0.
a1 := 15.00000007
a2 := 22.00000100
(58)
a3 := 20.84463375
> b0:=subs(x=0, Q); b1:=subs(x=0.5, Q); b2:=subs(x=1.0, Q); b3:=
subs(x=1.5, Q);
b0 := 18.776
b1 := 20.4813750
b2 := 19.518000
(59)
b3 := 21.56712
POLINÔMIOS POR PARTES DE HERMITE
Vamos calcular para cada dois pontos consectivos um polinomio de Hermite de grau N=2+2-1=3
> restart:
> with(plots):
> with(linalg):
> x0:=0.0:
> x1:=0.5:
> x2:=1.0:
> x3:=1.5:
O valor da função f(x)
> f0:=0.0:
> f1:=15.0:
> f2:=22.0:
> f3:=21.0:
Vamos denotar g valor da derivada g(x)=f ' (x)
> g0:=18.86:
> g1:=20.47:
> g2:=19.38:
> g3:=21.00:
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA CADA DOIS
PONTOS UM POLINÔMIO.
ASSIM O GRAU SÃO 2*2-1= 3. NESSE CASO OS POLINÔMIOS SÃO
DE GRAU 3;
Primeiro polinômio por partes envolvendo os pontos x0 e x1
> L0:=evalf((x-x1)/((x0-x1)),3);
L0 := K2.00 x C1.00
> L1:=evalf((x-x0)/((x1-x0)),3);
L1 := 2.00 x
(60)
(61)
CÁLCULO DA DERIVADAS DOS POLINÔMIOS DE LAGRANGE
> DL0:=diff(L0,x);
DL0 := K2.00
(62)
DL1 := 2.00
(63)
> DL1:=diff(L1,x);
> D0:=subs(x=x0, DL0);
D0 := K2.00
(64)
D1 := 2.00
(65)
> D1:=subs(x=x1, DL1);
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI0:=(1-2*D0*(x-x0))*(L0)^2;
PHI0 := 1 C 4.00 x K2.00 x C 1.00
> PHI1:=(1-2*D1*(x-x1))*(L1)^2;
2
PHI1 := 4.0000 3.000 K4.00 x x
2
(66)
(67)
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI0:=(x-x0)*(L0*L0);
2
PSI0 := x K2.00 x C1.00
> PSI1:=(x-x1)*(L1*L1);
2
PSI1 := 4.0000 x K0.5 x
(68)
(69)
POLINÔMIO DE HERMITE: Para o primeiro intervalo temos o seguinte
polinômio de grau 3:
> P1:=evalf(f0*PHI0+f1*PHI1+g0*PSI0+g1*PSI1,3); # ESSE É POLINÔMIO
DE HERMITE
2
2
2
P1 := 60.0 3.00 K4.00 x x C18.9 x K2.00 x C1.00 C82.0 x K0.5 x
(70)
CALCULANDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q1:=evalf(diff(P1,x),3); # DERIVADA DO POLINÔMIO DE HERMITE
2
2
Q1 := K158. x C120. 3.00 K4.00 x x C18.9 K2.00 x C1.00 K75.6 x K2.00 x C1.00
C164. x K0.5 x
(71)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA
DERIVADA NOS PONTOS TABELADOS. f(x)= g(x)
> a0:=subs(x=0, P1);a1:=subs(x=0.5, P1);
a0 := 0.
a1 := 15.000000
> b0:=subs(x=0, Q1); b1:=subs(x=0.5, Q1);
b0 := 18.90000
b1 := 20.5000
(72)
(73)
Note que os valores obtidos acima, asseguram que o polinômio interpola corretamente a
função e sua derivada.
A seguir as respostas dos itens do exercício.
Polinômio de Hermite de grau 3 para o segundo intervalo: [X1, X2]
> L1:=evalf((x-x2)/((x1-x2)),3);
L1 := K2.00 x C2.00
> L2:=evalf((x-x1)/((x2-x1)),3);
L2 := 2.00 x K1.00
(74)
(75)
CÁLCULO DA DERIVADAS DOS POLINÔMIOS DE LAGRANGE
> DL1:=diff(L1,x);
DL1 := K2.00
(76)
DL2 := 2.00
(77)
D1 := K2.00
(78)
> DL2:=diff(L2,x);
> D1:=subs(x=x1, DL1);
> D2:=subs(x=x2, DL2);
D2 := 2.00
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI1:=(1-2*D1*(x-x1))*(L1)^2;
2
PHI1 := K1.000 C4.00 x K2.00 x C2.00
> PHI2:=(1-2*D2*(x-x2))*(L2)^2;
2
PHI2 := 5.000 K4.00 x 2.00 x K1.00
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA FUNÇÃO f
> PSI1:=(x-x1)*(L1*L1);
2
PSI1 := x K 0.5 K2.00 x C2.00
> PSI2:=(x-x2)*(L2*L2);
2
PSI2 := x K1.0 2.00 x K 1.00
POLINÔMIO DE HERMITE PARA O SEGUNDO INTERVALO:
> P2:=f1*PHI1+f2*PHI2+g1*PSI1+g2*PSI2; # ESSE É POLINÔMIO DE
HERMITE
2
P2 := 15.0 K1.000 C4.00 x K2.00 x C2.00 C 22.0 5.000 K 4.00 x 2.00 x K1.00
2
2
C20.47 x K0.5 K2.00 x C2.00 C19.38 x K 1.0 2.00 x K1.00
Fazendo uma simplificação temos:
> P22:simplify(P2);
2
3
K107.7400000 x C92.6600000 x K10.32000000 C47.4000000 x
CALCULANDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q2:=diff(P2,x); # DERIVADA
2
Q2 := 80.470 K2.00 x C2.00 K60.000
2
K 68.620 2.00 x K1.00 C88.000
K 0.5 K2.00 x C2.00 C77.5200
Fazendo uma simplificação temos:
> Q22:=simplify(Q2);
DO POLINÔMIO DE HERMITE
K1.000 C4.00 x K2.00 x C2.00
5.000 K 4.00 x 2.00 x K1.00 K81.8800 x
x K 1.0 2.00 x K1.00
(79)
(80)
(81)
(82)
(83)
2
(84)
(85)
(86)
(87)
2
Q22 := 142.2000000 x K215.4800000 x C92.6600000
(87)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA DERIVADA NOS PONTOS
TABELADOS.
f(x)= g(x)=exp(x)
> a0:=subs(x=0.5, P2);a1:=subs(x=1.0, P2);
a0 := 15.00000000
(88)
a1 := 22.00000000
> b0:=subs(x=0.5, Q2); b1:=subs(x=1.0, Q2);
b0 := 20.47000000
(89)
b1 := 19.38000000
Note que os valores obtidos acima, asseguram que o polinômio interpola
corretamente a função e sua derivada.
Note que nos extremos do intervalo em comum com os dois Polinômios por
partes temos:
P1(0.5)=P2(0.5)=22.0 (assegurando a continuidade).
Além disso Q1(0.5)=Q2(0.5)=19.38 (assegurando a continuidade da
derivada)
INTERPOLANDO AGORA NO INTERVALO [X2, X3]: POLINÔMIO
DE HERMITE
> L2:=evalf((x-x3)/((x2-x3)),3);
L2 := K2.00 x C3.00
> L3:=evalf((x-x2)/((x3-x2)),3);
L3 := 2.00 x K2.00
(90)
(91)
CÁLCULO DA DERIVADAS DOS POLINÔMIOS DE LAGRANGE
> DL2:=diff(L2,x);
DL2 := K2.00
(92)
DL3 := 2.00
(93)
D2 := K2.00
(94)
D3 := 2.00
(95)
> DL3:=diff(L3,x);
> D2:=subs(x=x2, DL2);
> D3:=subs(x=x3, DL3);
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI2:=(1-2*D2*(x-x2))*(L2)^2;
PHI2 := K3.000 C4.00 x
> PHI3:=(1-2*D3*(x-x3))*(L3)^2;
PHI3 := 7.000 K4.00 x
K2.00 x C3.00
2.00 x K2.00
2
2
(96)
(97)
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI2:=evalf((x-x2)*(L2*L2),3);
2
PSI2 := x K 1.0 K2.00 x C3.00
> PSI3:=evalf((x-x3)*(L3*L3),3);
2
PSI3 := x K1.5 2.00 x K 2.00
(98)
(99)
POLINÔMIO DE HERMITE: OBERVE QUE O POLINÔMIO
TEM GRAU 3
> P3:=evalf(f2*PHI2+f3*PHI3+g2*PSI2+g3*PSI3,3); # ESSE É POLINÔMIO
DE HERMITE
2
2
P3 := 22.0 K3.00 C4.00 x K2.00 x C3.00 C 21.0 7.00 K 4.00 x 2.00 x K2.00
(100)
2
2
C19.4 x K1.0 K2.00 x C3.00 C21.0 x K 1.5 2.00 x K2.00
Fazendo uma simplificação temos:
> P33:=simplify(P3);
2
3
P33 := K664.400000 x C815.400000 x K306.6000000 C177.6000000 x
(101)
CALCULABDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q3:=evalf(diff(P3,x),3); # DERIVADA DO POLINÔMIO DE HERMITE
2
Q3 := 107. K2.00 x C3.00 K88.0 K3.00 C4.00 x K2.00 x C3.00 K63.0 2.00 x
(102)
2
K 2.00 C84.0 7.00 K4.00 x 2.00 x K2.00 K77.6 x K1.0 K2.00 x C3.00
C84.0 x K1.5 2.00 x K2.00
Fazendo uma simplificação temos:
> Q33:=simplify(Q3);
2
Q33 := 531.20000 x K1324.00000 x C811.80000
(103)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA DERIVADA NOS PONTOS
TABELADOS.
f(x)= g(x)=exp(x)
> a0:=subs(x=1.0, P3);a1:=subs(x=1.5, P3);
a0 := 22.00000000
(104)
a1 := 21.00000000
> b0:=subs(x=1.0, Q3); b1:=subs(x=1.5, Q3);
b0 := 19.0000000
(105)
b1 := 21.0000000
FAZENDO OS GRÁFICO DOS POLINÔMIOS DE HERMITE POR PARTES EM CADA
INTERVALO:
> H01:=plot([P1(x)], x=x0..x1, color=[red], style=[line]):
> H12:=plot([P2(x)], x=x1..x2, color=[blue], style=[line]):
> H23:=plot([P3(x)], x=x2..x3, color=[green], style=[line]):
O gráficos de cada polinômio por partes de Hermite é dado abaixo:
> display(H01,H12,H23);
20
15
10
5
0
0
0.5
1
1.5
x
> G01:=plot([Q1(x)], x=x0..x1, color=[red], style=[line]):
> G12:=plot([Q2(x)], x=x1..x2, color=[blue], style=[line]):
> G23:=plot([Q3(x)], x=x2..x3, color=[green], style=[line]):
Os gráficos da cada derivada do polinômio de Hermite por partes é dado abaixo
> display(G01,G12,G23);
30
20
10
0
0.5
1
1.5
x
K10
Suponhamos que queiramos calcular o valor da função aproximada e de sua derivada nos pontos x=0.3;
x=0.7 e x=1.1. então
> c0:=subs(x=0.3, P1); c1:=subs(x=0.7, P2); c2:=subs(x=1.1, P3);
c0 := 9.15120000
c1 := 18.00760000
c2 := 22.80160000
Para as derivadas temos:
> d0:=subs(x=0.3, Q1); d1:=subs(x=0.7, Q2); d2:=subs(x=1.1, Q3);
d0 := 34.6920000
d1 := 11.50200000
d2 := K1.8480000
(106)
(107)
>?
`?`
EXEMPLO DE POLINOMIO LINEAR POR PARTES
(108)
2
USANDO OS DADOS DA FUNÇÃO f = x
> x0:=0.0:
> x1:=1.0:
> x2:=2.0:
O valor da função 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:
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA INTERVALO [X0, X1]=[0,1]: GRAU DO
POLINÔMIO É IGUAL A TRÊS
PRIMEIRA PARTE
> L0:=(x-x1)/((x0-x1));
L0 := K1.000000000 x C1.000000000
> L1:=(x-x0)/((x1-x0));
L1 := 1.000000000 x
(109)
(110)
> DL0:=evalf(diff(L0,x),3);
DL0 := K1.00
(111)
DL1 := 1.00
(112)
D0 := K1.00
(113)
D1 := 1.00
(114)
> DL1:=evalf(diff(L1,x),3);
> D0:=subs(x=x0, DL0);
> D1:=subs(x=x1, DL1);
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);
PHI0 := 1. C2.00 x K1.00 x C1.00
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
(115)
(116)
2
PHI1 := 1.00 K2.00 x C 3.00 x
(116)
O grafico acima é a base da função base que interpola a função f(x). Note que são polinômios de grau 3
e ortogonais.
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI0:=(x-x0)*(L0*L0);
PSI0 := x K1.000000000 x C1.000000000
> PSI1:=(x-x1)*(L1)^2;
2
PSI1 := 1.000000000 x K1.0 x
2
(117)
(118)
O grafico acima é a base da função base que interpola a função g(x). Note novamente
que são polinômios de grau 5 e ortogonais.
POLINÔMIO DE HERMITE
Assim o polinômio de Hermite é dado por:( combinação dos elementos da base de f com
a combinação dos elementos da base da derivada)
> P1:=simplify(evalf(f0*PHI0+f1*PHI1+g0*PSI0+g1*PSI1,3));
2
P1 := 1.0000 x
CALCULABDO A DERIVADA DO POLINÔMIO DE HERMITE
(119)
> Q1:=simplify(evalf(diff(P,x),3));
Q1 := 0.
(120)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA DERIVADA NOS PONTOS
TABELADOS.
> a0:=subs(x=0, P);a1:=subs(x=1, P);
a0 := P
a1 := P
> b0:=subs(x=0, Q);b1:=subs(x=1, Q);
b0 := Q
b1 := Q
(121)
(122)
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 := P
(123)
b3 := Q
(124)
> b3:=subs(x=0.6, Q);
Note que as tabelas foram construídas a partir da função f(x)=x^2.
Consequentemente a função g(x)=f´(x)=2x
Assim é facil de f(0.6)=0.36 e g(0.6)=1.2, tendo assim uma excelente
aproximação.
***********************************************************************************
*
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA INTERVALO
[X1, X2]=[1,2]: GRAU DO POLINÔMIO É IGUAL A TRÊS
SEGUNDA PARTE
> L1:=(x-x2)/((x1-x2));
L1 := K1.000000000 x C2.000000000
> L2:=(x-x1)/((x2-x1));
L2 := 1.000000000 x K1.000000000
(125)
(126)
> DL1:=evalf(diff(L1,x),3);
DL1 := K1.00
(127)
DL2 := 1.00
(128)
D1 := K1.00
(129)
D2 := 1.00
(130)
> DL2:=evalf(diff(L2,x),3);
> D1:=subs(x=x1, DL1);
> D2:=subs(x=x2, DL2);
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
PHI1 := 2.00 x K1.00 K1.00 x C2.00
> PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);
2
PHI2 := 5.00 K 2.00 x 1.00 x K1.00
(131)
(132)
O grafico acima é a base da função base que interpola a função f(x). Note que são polinômios de grau 3
e ortogonais.
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI1:=(x-x1)*(L1*L1);
PSI1 := x K 1.0
> PSI2:=(x-x2)*(L2)^2;
K1.000000000 x C2.000000000
2
(133)
(134)
PSI2 := x K2.0
1.000000000 x K 1.000000000
2
(134)
O grafico acima é a base da função base que interpola a função g(x). Note novamente que são
polinômios de grau 5 e ortogonais.
POLINÔMIO DE HERMITE
Assim o polinômio de Hermite é dado por:( combinação dos elementos da base de f com a combinação
dos elementos da base da derivada)
> P2:=simplify(evalf(f1*PHI1+f2*PHI2+g1*PSI1+g2*PSI2,3));
2
P2 := 1.0000000 x
(135)
CALCULANDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q2:=simplify(evalf(diff(P2,x),3));
Q2 := 2.00 x
(136)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA
DERIVADA NOS PONTOS TABELADOS.
> a0:=subs(x=1, P2);a1:=subs(x=2, P2);
a0 := 1.0000000
a1 := 4.0000000
> b0:=subs(x=1, Q2);b1:=subs(x=2, Q2);
b0 := 2.00
b1 := 4.00
(137)
(138)
Se desejamos saber o valor aproximado de f(x) e g(x) no ponto x=0.6, temos:
> a3:=subs(x=1.5, P2);
a3 := 2.250000000
(139)
b3 := 3.000
(140)
> b3:=subs(x=1.5, Q2);
Note que as tabelas foram construídas a partir da função f(x)=x^2. Consequentemente a
função g(x)=f´(x)=2x
Assim é facil de f(0.6)=0.36 e g(0.6)=1.2, tendo assim uma excelente aproimação.
> P01:=plot([P1(x)], x=x0..x1, color=[red], style=[line]):
> P12:=plot([P2(x)], x=x1..x2, color=[blue], style=[line]):
Os gráficos da cada derivada do polinômio de Hermite por partes é dado abaixo
> display(P01,P12);
4
3
2
1
0
0
0.5
1
x
1.5
2
Observe que nesse exemplo temos a solução exata, o polinômio de ajuste tem
grau dois tanto no intervalo [0,1] que obtamos o polinômio P1(x) quanto no
intervalo [1,2] que obtivemos o polinômio P2(x). Nesse caso os polinômio
por partes coincidem com o polinômio de Hermite usando todos o spontos
pontos pois o polinômi ótimo encontrado foi de grau 2, veja que o P(x)=x^2.
EXEMPLO 5
No próximo exemplo vamos fazer uma pequena munda nos dados e
ver os resultados usando um único polinômio de Hermite e o
polinômio de Hermite por partes.
VAMOS CONSIDERAR AGORA A SEGUINTE TABELA:
> restart:
> with(plots):
> with(linalg):
>
> x0 d 1.0 :
> x1:=1.5:
> x2:= 2.0:
O valor da função f(x)
> f0:=-1.0:
> f1:=1.35:
> f2:=2.8:
Vamos denotar g valor da derivada g(x)=f ' (x)
> g0:=0.8:
> g1:=-1.0:
> g2:=2.5:
> 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)):;
> DL0:=evalf(diff(L0,x),3);
DL0 := 4.00 x K 7.00
> DL1:=evalf(diff(L1,x),3);
DL1 := K8.00 x C12.0
> DL2:=evalf(diff(L2,x),3);
DL2 := 4.00 x K 5.00
> D0:=subs(x=x0, DL0);
D0 := K3.000
> D1:=subs(x=x1, DL1);
D1 := 0.
> D2:=subs(x=x2, DL2);
D2 := 3.000
> PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);
2
2
PHI0 := 4.00 K5.00 C6.00 x x K1.5
x K2.0
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
2
PHI1 := 16.0 x K 1.0
x K 2.0
> PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);
2
2
PHI2 := 4.00 13.0 K 6.00 x x K1.0
x K1.5
> PSI0:=(x-x0)*(L0*L0);
2
2
PSI0 := 4.000000000 x K1.0 x K1.5
x K2.0
> PSI1:=(x-x1)*(L1)^2;
2
2
PSI1 := 16.00000000 x K1.5 x K1.0
x K2.0
(141)
(142)
(143)
(144)
(145)
(146)
(147)
(148)
(149)
(150)
(151)
> PSI2:=(x-x2)*(L2)^2;
2
2
PSI2 := 4.000000000 x K2.0 x K1.0
x K1.5
>?
`?`
> PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);
2
2
PHI0 := 4.00 K5.00 C6.00 x x K1.5
x K2.0
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
2
PHI1 := 16.0 x K 1.0
x K 2.0
> PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);
2
2
PHI2 := 4.00 13.0 K 6.00 x x K1.0
x K1.5
(152)
(153)
(154)
(155)
(156)
As funções acima é a base da função base que interpola a função f(x). {PHI0,
PHI1,PHI2}
Note novamente que são polinômios 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]):
> display(LPHI0,LPHI1,LPHI2):;
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI0:=(x-x0)*(L0*L0);
PSI0 := 4.000000000 x K1.0
> PSI1:=(x-x1)*(L1)^2;
PSI1 := 16.00000000 x K1.5
> PSI2:=(x-x2)*(L2)^2;
PSI2 := 4.000000000 x K2.0
x K1.5
2
x K2.0
2
(157)
x K1.0
2
x K2.0
2
(158)
x K1.0
2
x K1.5
2
(159)
Assim o Polinômio Interpolador de Hermite é dado por:( combinação
dos elementos da base de f com a combinação dos elementos da base da
derivada)
OBERVE QUE O POLINÔMIO TEM GRAU 5
> P:=simplify(evalf(f0*PHI0+f1*PHI1+f2*PHI2+g0*PSI0+g1*PSI1+g2*
PSI2,4)); # ESSE É POLINÔMIO DE HERMITE PROCURADO NO INTERVALO
[X0,X2].
3
4
5
P := K2221.900000 x K2135.900000 x C715.600000 x K94.00000 x C616.2000000
2
C3119.000000 x
CALCULABDO A DERIVADA DO POLINÔMIO DE HERMITE
(160)
> Q:=simplify(evalf(diff(P,x),4));
2
3
4
Q := K2222. K6408. x C2862. x K470.0 x C6238. x
(161)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA
DERIVADA NOS PONTOS TABELADOS. f(x)
> a0:=subs(x=x0, P);a1:=subs(x=x1, P);a2:=subs(x=x2, P);
a0 := K1.000000
a1 := 1.350000
a2 := 2.80000
> b0:=subs(x=x0, Q);b1:=subs(x=x1, Q);b2:=subs(x=x2, Q);
b0 := 0.
b1 := K3.12500
b2 := K2.00000
(162)
(163)
Se desejamos saber o valor aproximado de f(x) e g(x) no ponto x=1.3, temos:
> P02:=plot([P(x)], x=x0..x2, color=[red], style=[line]):
Os gráficos da cada derivada do polinômio de Hermite por partes é dado
abaixo
> display(P02);
2
1
0
1.2
1.4
1.6
1.8
2
x
K1
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA INTERVALO
[X0, X1]=[0,1]: GRAU DO POLINÔMIO É IGUAL A TRÊS
PRIMEIRA PARTE
> L0:=(x-x1)/((x0-x1));
L0 := K2.000000000 x C3.000000000
> L1:=(x-x0)/((x1-x0));
L1 := 2.000000000 x K2.000000000
(164)
(165)
> DL0:=evalf(diff(L0,x),3);
DL0 := K2.00
(166)
DL1 := 2.00
(167)
D0 := K2.00
(168)
> DL1:=evalf(diff(L1,x),3);
> D0:=subs(x=x0, DL0);
> D1:=subs(x=x1, DL1);
D1 := 2.00
(169)
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI0:=evalf((1-2*D0*(x-x0))*(L0)^2,3);
2
PHI0 := K3.00 C 4.00 x K2.00 x C 3.00
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
PHI1 := 7.00 K 4.00 x 2.00 x K2.00
(170)
(171)
O grafico acima é a base da função base que interpola a função f(x). Note que são polinômios de grau 3
e ortogonais.
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI0:=(x-x0)*(L0*L0);
2
PSI0 := x K 1.0 K2.000000000 x C3.000000000
> PSI1:=(x-x1)*(L1)^2;
2
PSI1 := x K1.5 2.000000000 x K 2.000000000
(172)
(173)
Note novamente que são polinômios de grau 3 e ortogonais.
POLINÔMIO DE HERMITE
Assim o polinômio de Hermite é dado por:( combinação dos elementos da
base de f com a combinação dos elementos da base da derivada)
> P1:=simplify(evalf(f0*PHI0+f1*PHI1+g0*PSI0+g1*PSI1,3)); # ESSE É
POLINÔMIO DE HERMITE PROCURADO NO INTERVALO [X0,X1].
2
3
P1 := 142.2000000 x K 168.4000000 x C63.60000000 K38.40000000 x
(174)
CALCULABDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q1:=simplify(evalf(diff(P,x),3));
2
3
4
Q1 := K2220. K6420. x C2860. x K470. x C6240. x
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA
DERIVADA NOS PONTOS TABELADOS.
(175)
> a0:=subs(x=x0, P);a1:=subs(x=x1, P);
a0 := K1.000000
a1 := 1.350000
> b0:=subs(x=x0, Q);b1:=subs(x=x1, Q);
b0 := 0.
b1 := K3.12500
(176)
(177)
***********************************************************************************
*
CÁLCULO DOS POLINÔMIOS DE LAGRANGE, PARA
INTERVALO [X1, X2]=[1,2]: GRAU DO POLINÔMIO É IGUAL
A TRÊS
SEGUNDA PARTE
> L1:=(x-x2)/((x1-x2));
L1 := K2.000000000 x C4.000000000
> L2:=(x-x1)/((x2-x1));
L2 := 2.000000000 x K3.000000000
(178)
(179)
> DL1:=evalf(diff(L1,x),3);
DL1 := K2.00
(180)
DL2 := 2.00
(181)
D1 := K2.00
(182)
D2 := 2.00
(183)
> DL2:=evalf(diff(L2,x),3);
> D1:=subs(x=x1, DL1);
> D2:=subs(x=x2, DL2);
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO PRIMITIVA f
> PHI1:=evalf((1-2*D1*(x-x1))*(L1)^2,3);
2
PHI1 := 4.00 x K5.00 K2.00 x C4.00
> PHI2:=evalf((1-2*D2*(x-x2))*(L2)^2,3);
2
PHI2 := 9.00 K 4.00 x 2.00 x K3.00
(184)
(185)
CÁLCULO DAS FUNÇÕES BASE PARA A FUNÇÃO g, DERIVADA DA
FUNÇÃO f
> PSI1:=(x-x1)*(L1*L1);
(186)
2
PSI1 := x K 1.5 K2.000000000 x C4.000000000
> PSI2:=(x-x2)*(L2)^2;
2
PSI2 := x K2.0 2.000000000 x K 3.000000000
(186)
(187)
POLINÔMIO DE HERMITE
> P2:=simplify(evalf(f1*PHI1+f2*PHI2+g1*PSI1+g2*PSI2,3));# ESSE É
POLINÔMIO DE HERMITE PROCURADO NO INTERVALO [X1,X2].
3
2
P2 := K17.20000000 x C93.8000000 x K166.3000000 x C 97.8000000
(188)
CALCULANDO A DERIVADA DO POLINÔMIO DE HERMITE
> Q2:=simplify(evalf(diff(P2,x),3)); # DERIVADA DO POLINÔMIO DE
HERMITE
2
Q2 := K51.6 x C188. x K 166.
(189)
VERIFICAÇÃO DA INTERPOLAÇÃO POLINOMIAL E DE SUA
DERIVADA NOS PONTOS TABELADOS.
> a0:=subs(x=x1, P2);a1:=subs(x=x2, P2);
a0 := 1.3500000
a1 := 2.8000000
> b0:=subs(x=x1, Q2);b1:=subs(x=x2, Q2);
b0 := K0.100
b1 := 3.600
(190)
(191)
Se desejamos saber o valor aproximado de f(x) e g(x) no ponto x=0.6, temos:
> a3:=subs(x=1.5, P2);
a3 := 1.3500000
(192)
> b3:=subs(x=1.5, Q2);
b3 := K0.100
(193)
Note que as tabelas foram construídas a partir da função f(x)=x^2. Consequentemente a função g(x)=f´
(x)=2x
Assim é facil de f(0.6)=0.36 e g(0.6)=1.2, tendo assim uma excelente aproXimação.
> P01:=plot([P1(x)], x=x0..x1, color=[green], style=[line]):
> P12:=plot([P2(x)], x=x1..x2, color=[blue], style=[line]):
Os gráficos da cada derivada do polinômio de Hermite por partes é dado abaixo
> display(P01,P12);
2
1
0
1.2
1.4
1.6
1.8
2
x
K1
COMPRANDO OS GRAFICOS DOS POLINÔMIOS LINEAR POR PARTES COM O POLINÔMIO
GLOBAL
`?`
> display P01, P12, P02 ;
(194)
2
1
0
1.2
1.4
1.6
1.8
2
x
K1
Observe que nesse caso os dois polinômios por partes de grau 3 estão próximos do polinômio de grau 5
VALORES APROXIMADOS : OBSERVE QUE A DERIVADAS NÃO
SÃO BEM APROXIMADAS.
> a:=subs(x=1.4, P);
a := 1.364800
(195)
b := K0.70400
(196)
a1 := 1.1824000
(197)
b1 := K24.9120
(198)
C := 2.27960
(199)
DD := 2.69100
(200)
C1 := 1.6312000
(201)
> b:=subs(x=1.4, Q);
> a1
> b1
subs x = 1.4,
P1 ;
subs x = 1.4, Q1 ;
> C:=subs(x=1.9, P);
> DD:=subs(x=1.9, Q);
> C1
subs x = 1.4,
P2 ;
> D1
subs x = 1.4, Q2 ;
D1 := K3.936
>
(202)
���������������������������������������������������������������������������
���������������������������������������������������������������������������������
�����������������������������������������������������
Download