ANEDP AULA 12 MAIO 2020

39 

Texto

(1)

ANEDP

(2)

Erro de interpolação -

Elementos Finitos

Vamos estabelecer a seguinte estimativa de erro (local)

Função a

interpolar

é H

m+1

(E)

Polinómio

interpolador

de grau < m

Norma em H

s

(E)

derivadas < s

Parâmetro degenerescência

s=0 norma em L

2

(E)

(3)

Erro de interpolação -

demonstração

Definimos um espaço quociente por polinómios

H

m+1

(

W

) / P

m

onde as funções são iguais a menos de um polinómio de grau < m.

Por exemplo, polinómios de grau < m são identicamente nulos nessa relação de equivalência.

Definimos neste espaço uma

norma

e uma

seminorma

:

É uma variante da

Desigualdade de Poincaré

(a seminorma é norma aqui)

(4)

Erro de interpolação -

demonstração

Iremos precisar de resultados intermédios, para efeitos da demonstração.

(5)

Erro de interpolação -

demonstração

Demonstramos o resultado principal, mas precisamos depois de provar a) e b):

usamos o Teorema 6.1.1 em Ê

b)

(6)

Erro de interpolação -

demonstração

Vejamos a) porque b) é análoga.

Consideramos a seminorma com a derivada de Fréchet, D, que equivale à habitual

c1, c2> 0 são constantes

de equivalência das seminormas

Notando que

(7)
(8)

Erro de interpolação –

1º Exemplo 1D

(9)

Erro de interpolação –

2º Exemplo 1D

(10)

Erro de interpolação –

3º Exemplo 1D

Consideramos

(11)
(12)

Notas das aulas

Normas e seminormas

Seminorma |v|:

|v| ≥ 0, |αv| = |α| |v|, |v + w| ≤ |v| + |w|

Norma ||v|| é uma seminorma, em que se verifica ainda a propriedade ||v|| = 0 ⇔ v = 0

No caso H1(Ω) temos a norma (note-se que H0(Ω) = L2(Ω)) ||v||21,Ω=||v||20,Ω+||∇v||20,Ω=||v||2L2(Ω)+||∇v||2L2(Ω) e temos a seminorma

|v|21,Ω=||∇v||20,Ω

Esta seminorma não verifica |v|1,Ω=0⇐⇒v = 0 porque v = Const. verifica |v|1,Ω=0.

Mas se considerarmos o espaço H1

0(Ω) então a seminorma é uma norma (porque as constantes não são nulas sobre a fronteira, excepto se forem zero). Assim, quando trabalhamos com H1

0(Ω) podemos usar apenas a seminorma, porque aí é uma norma.

Além disso, temos a desigualdade de Poincaré, para funções v ∈ H1 0(Ω) ||v||1,Ω≤ CΩ|v|1,Ω

Espaço quociente e Lema de Bramble-Hilbert

No espaço quociente Hm+1(Ω)/Pmestabelece-se a relação de equivalência v ∼ w ⇔ v − w ∈ Pm

quando m = 0 temos H1(Ω)/P0 =H1(Ω)/R e nesse caso v ∼ w ⇔ v − w = Const.

Já se considerássemos m = 1 seria H2(Ω)/P1e (em dimensão 2): v ∼ w ⇔ ∃a0, a1, a2: v(x) − w(x) = a0+a1x1+a2x2

(13)

Lema de Bramble-Hilbert

Lema de Bramble-Hilbert: ||v||∗m+1,Ω≤ CΩ|v|∗m+1,Ω logo como |v|∗ m+1,Ω=|v|m+1,Ωporque |v|∗m+1,Ω=q∈infP m|v − q|m+1,Ω=q∈infPm|v|m+1,Ω=|v|m+1,Ω(porque ∇ m+1q = 0, para q ∈ Pm) temos |v|m+1,Ω=|v|∗m+1,Ω≤ ||v||∗m+1,Ω≤ CΩ|v|m+1,Ω ou seja a seminorma | • |m+1,Ωé equivalente à norma || • ||∗

m+1,Ω.

Relembrando que duas normas || • || e ||| • ||| são equivalentes se existirem constantes c1, c2 >0 :

c1||v|| ≤ |||v||| ≤ c2||v|| que neste caso são c1=1, c2=CΩ.

Normas de operadores

Temos as normas de operadores

||A||L(X,Y) = sup x∈X,x6=0

||Ax||Y ||x||X ≥

||Ax||Y ||x||X no caso do operador I − Π temos

CΠ=||I − Π||L(Hm+1(ˆE),Hs(ˆE))

||(I − Π)v||Hs(ˆE) ||v||Hm+1(ˆE) logo

||v − Πv||Hs(ˆE)=||(I − Π)v||Hs(ˆE)≤ CΠ||v||Hm+1(ˆE) ≤ CΠCˆE|v|Hm+1(ˆE)

Derivada de Fréchet de ordem superior

Derivada de Fréchet de 1ª ordem é dada como uma aplicação linear T ||A(x + h) − A(x) − Th||Y=o(||h||X)

que normalmente é designada T = A0x

||A(x + h) − A(x) − A0xh||Y=o(||h||X) o que corresponde a uma primeira expansão de Taylor

A(x + h) = A(x) + A0

x(h) + o(||h||X) 2

(14)

Lembrando a expressão clássica de Taylor de 1ª ordem: f (x + h) = f (x) + f0(x)h + o(h) Uma segunda expansão é considerada com uma aplicação bilinear para a 2ª

ordem A(x + h) = A(x) + A0 x(h) +12A00x(h, h) + o(||h||2X) e assim sucessivamente A(x + h) = A(x) + A0 x(h) +12A00x(h, h) + ... +n!1A(n)x (h, ..., h| {z } n vezes ) +o(||h||2X) 3

(15)

Erro de Interpolação por Elementos Finitos (1D)

Usamos rotinas já consideradas antes.

In[1]:= (* Transformação Afim, que vai de Ê=[0,1] para E=[a,b] *) F[x_, ab_] := ab[[2]] - ab[[1]] x + ab[[1]];

iF[x_, ab_] := 1  ab[[2]] - ab[[1]] x - ab[[1]]; In[3]:= (* Funções de Forma para os Elementos Lineares *)

pL1[x_] = 1 - x; pL2[x_] = x;

(* Funções de Forma para os Elementos Quadráticos *)

pQ1[x_] = 1 - 3 x + 2 x ^ 2; pQ2[x_] = 4 x 1 - x; pQ3[x_] = - x + 2 x ^ 2; {Plot[{pL1[x], pL2[x]}, {x, 0, 1}, ImageSize → Medium],

Plot[{pQ1[x], pQ2[x], pQ3[x]}, {x, 0, 1}, ImageSize → Medium]}

Out[5]=  0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 

In[6]:= (* Funções de Forma para os Elementos Cúbicos *) Tablez = {0, 0, 0, 0}; z〚k〛 = 1; Simplify @ InterpolatingPolynomial0, 1  3, 2  3, 1, z, x, {k, 1, 4} Out[6]= 1 -11 x 2 +9 x2-9 x3 2 , 9 2 x 2 - 5 x + 3 x 2, -9 2 -1 + x x - 1 + 3 x, 1 2x - 2 + 3 x - 1 + 3 x

(16)

In[7]:= pC1[x_] = 1 - 11 x 2 +9 x2-9 x3 2 ; pC2[x_] = 9 2 x 2 - 5 x + 3 x 2; pC3[x_] = -9 2 -1 + x x - 1 + 3 x; pC4[x_] = 1 2 x - 2 + 3 x - 1 + 3 x;

ShowPlot[{pC1[x], pC2[x], pC3[x], pC4[x]}, {x, 0, 1}, ImageSize → Medium], ListPlot {0, 0}, 1  3, 0 , 2  3, 0, {1, 0}, PlotStyle → {AbsolutePointSize[8], Red}

Out[9]= 0.2 0.4 0.6 0.8 1.0 -0.2 0.2 0.4 0.6 0.8 1.0

Funções Base

In[10]:= (*Função Base - caso Linear*) ψL[x_, ab1_, ab2_] := Piecewise[

{{pL2[iF[x, ab1]], ab1〚1〛 < x < ab1〚2〛}, {pL1[iF[x, ab2]], ab2〚1〛 < x < ab2〚2〛}}, 0]; Plot[ψL[x, {0.1, 0.2}, {0.2, 0.5}], {x, 0, 1}, PlotRange → All]

Out[11]= 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 2 Aula-A11b.nb

(17)

In[12]:= (*Função Base - caso Quadrático*) ψQ1[x_, ab1_, ab2_] := Piecewise[

{{pQ3[iF[x, ab1]], ab1〚1〛 < x < ab1〚2〛}, {pQ1[iF[x, ab2]], ab2〚1〛 < x < ab2〚2〛}}, 0]; ψQ2[x_, ab_] := Piecewise[{{pQ2[iF[x, ab]], ab〚1〛 < x < ab〚2〛}}, 0];

Plot[{ψQ1[x, {0.1, 0.2}, {0.2, 0.5}], ψQ2[x, {0.2, 0.5}]}, {x, 0, 1}, PlotRange → All]

Out[14]= 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0

In[15]:= (*Função Base - caso Cúbico*) ψC1[x_, ab1_, ab2_] := Piecewise[

{{pC4[iF[x, ab1]], ab1〚1〛 < x < ab1〚2〛}, {pC1[iF[x, ab2]], ab2〚1〛 < x < ab2〚2〛}}, 0]; ψC2[x_, ab_] := Piecewise[{{pC2[iF[x, ab]], ab〚1〛 < x < ab〚2〛}}, 0];

ψC3[x_, ab_] := Piecewise[{{pC3[iF[x, ab]], ab〚1〛 < x < ab〚2〛}}, 0];

Plot[{ψC1[x, {0.1, 0.3}, {0.3, 0.5}], ψC2[x, {0.5, 0.75}], ψC3[x, {0.75, 1}]}, {x, 0, 1}, PlotRange → All] Out[18]= 0.2 0.4 0.6 0.8 1.0 -0.2 0.2 0.4 0.6 0.8 1.0

Interpolação

Por construção vamos admitir que a função f é nula nas extremidades, senão teríamos que

considerar 2 funções adicionais.

In[19]:= InterpolaL = Function{f, ab, n, x}, h = 1. ab〚2〛 - ab〚1〛  n;

xp = Range[ab〚1〛, ab〚2〛, h];

Sum[f[xp〚k〛] ψL[x, {xp〚k - 1〛, xp〚k〛}, {xp〚k〛, xp〚k + 1〛}], {k, 2, n}];

(18)

In[20]:= ft1 = Sin;

fx = InterpolaL[ft1, {0., 1. π}, 12, x];

{Plot[{Sin[x], fx}, {x, 0, π}, ImageSize → Medium], Plot[Sin[x] - fx, {x, 0, π}, ImageSize → Medium]}

Out[22]=  0.5 1.0 1.5 2.0 2.5 3.0 0.2 0.4 0.6 0.8 1.0 , 0.5 1.0 1.5 2.0 2.5 3.0 0.002 0.004 0.006 0.008 

In[23]:= (* n deve ser múltiplo de 2 *) InterpolaQ = Function{f, ab, n, x},

h = 1. ab〚2〛 - ab〚1〛  n; xp = Range[ab〚1〛, ab〚2〛, h]; Sum[f[xp〚k〛] ψQ2[x, {xp〚k - 1〛, xp〚k + 1〛}], {k, 2, n, 2}] +Sum[f[xp〚k〛] ψQ1[x, {xp〚k - 2〛, xp〚k〛}, {xp〚k〛, xp〚k + 2〛}], {k, 3, n - 1, 2}] ; 4 Aula-A11b.nb

(19)

In[24]:= ft1 = Sin;

fx = InterpolaQ[ft1, {0., 1. π}, 12, x];

{Plot[{Sin[x], fx}, {x, 0, π}, ImageSize → Medium], Plot[Sin[x] - fx, {x, 0, π}, ImageSize → Medium]}

Out[26]=  0.5 1.0 1.5 2.0 2.5 3.0 0.2 0.4 0.6 0.8 1.0 , 0.5 1.0 1.5 2.0 2.5 3.0 -0.0010 -0.0005 0.0005 0.0010 

In[27]:= (* n deve ser múltiplo de 3 *) InterpolaC = Function{f, ab, n, x},

h = 1. ab〚2〛 - ab〚1〛  n; xp = Range[ab〚1〛, ab〚2〛, h]; Sum[f[xp〚k〛] ψC2[x, {xp〚k - 1〛, xp〚k + 2〛}], {k, 2, n - 1, 3}] + Sum[f[xp〚k〛] ψC3[x, {xp〚k - 2〛, xp〚k + 1〛}], {k, 3, n, 3}] + Sum[f[xp〚k〛] ψC1[x, {xp〚k - 3〛, xp〚k〛}, {xp〚k〛, xp〚k + 3〛}], {k, 4, n - 2, 3}] ; Aula-A11b.nb 5

(20)

In[28]:= ft1 = Sin[#] # &;

fx = InterpolaC[ft1, {0., 1. π}, 12, x];

{Plot[{ft1[x], fx}, {x, 0, π}, ImageSize → Medium], Plot[ft1[x] - fx, {x, 0, π}, ImageSize → Medium]}

Out[30]=  0.5 1.0 1.5 2.0 2.5 3.0 0.5 1.0 1.5 , 0.5 1.0 1.5 2.0 2.5 3.0 -0.0010 -0.0005 0.0005 

Ordem de Convergência

Definir normas

In[31]:= NormaL2[f_, ab_] := Sqrt @ NIntegrate[f[t] ^ 2., {t, ab〚1〛, ab〚2〛}]; NormaH1[f_, ab_] := Sqrt[NormaL2[f, ab] ^ 2 + NormaL2[f '[#] &, ab] ^ 2]; In[33]:= NormaH1[# &, {0, 1}]

Out[33]= 1.1547

(21)

Cálculo experimental - elementos lineares

In[34]:= ft1 = Sin[#] # &; AB = 1. {0, π}; TbL = Table

fx = InterpolaL[ft1, AB, n, x]; fL = fx /. x → # &;

erroL2 = NormaL2[ft1[#] - fL[#] &, AB]; erroH1 = NormaH1[ft1[#] - fL[#] &, AB]; h = 1.  n; {h, erroL2, erroH1}, {n, 12, 60, 12} Out[35]= {{0.0833333, 0.0232232, 0.281572}, {0.0416667, 0.00581056, 0.140504}, {0.0277778, 0.00258287, 0.0936347}, {0.0208333, 0.00145294, 0.0702169}, {0.0166667, 0.000929905, 0.0561701}} In[36]:= LL2 = Log[10, {TbL[[1]], TbL[[2]]}]; LH1 = Log[10, {TbL[[1]], TbL[[3]]}]; fits = {Fit[LL2, {1, x}, x], Fit[LH1, {1, x}, x]};

{"Norma L2", Show[ListPlot[LL2, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚1〛, {x, - 5, 0}]], fits〚1〛}

{"Norma H1", Show[ListPlot[LH1, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚2〛, {x, - 5, 0}]], fits〚2〛} Out[39]= Norma L2, -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -3.0 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 , 0.523654 + 1.99935 x Out[40]= Norma H1, -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 , 0.530313 + 1.00158 x Aula-A11b.nb 7

(22)

Cálculo experimental - elementos quadráticos

In[41]:= (* usa 2 subintervalos - n tem que ser par*) TbL = Table

fx = InterpolaQ[ft1, AB, n, x]; fL = fx /. x → # &;

erroL2 = NormaL2[ft1[#] - fL[#] &, AB]; erroH1 = NormaH1[ft1[#] - fL[#] &, AB]; h = 1.  n; {h, erroL2, erroH1}, {n, 12, 60, 12}; LL2 = Log[10, {TbL[[1]], TbL[[2]]}]; LH1 = Log[10, {TbL[[1]], TbL[[3]]}]; fits = {Fit[LL2, {1, x}, x], Fit[LH1, {1, x}, x]};

{"Norma L2", Show[ListPlot[LL2, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚1〛, {x, - 5, 0}]], fits〚1〛}

{"Norma H1", Show[ListPlot[LH1, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚2〛, {x, - 5, 0}]], fits〚2〛} Out[45]= Norma L2, -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -4.5 -4.0 -3.5 -3.0 , 0.732546 + 2.99113 x Out[46]= Norma H1, -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 , 0.749764 + 1.99334 x 8 Aula-A11b.nb

(23)

Cálculo experimental - elementos cúbicos

In[47]:= (* usa 3 subintervalos - n tem que ser múltiplo de 3*) TbL = Table

fx = InterpolaC[ft1, AB, n, x]; fL = fx /. x → # &;

erroL2 = NormaL2[ft1[#] - fL[#] &, AB]; erroH1 = NormaH1[ft1[#] - fL[#] &, AB]; h = 1.  n; {h, erroL2, erroH1}, {n, 12, 60, 12}; LL2 = Log[10, {TbL[[1]], TbL[[2]]}]; LH1 = Log[10, {TbL[[1]], TbL[[3]]}]; fits = {Fit[LL2, {1, x}, x], Fit[LH1, {1, x}, x]};

{"Norma L2", Show[ListPlot[LL2, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚1〛, {x, - 5, 0}]], fits〚1〛}

{"Norma H1", Show[ListPlot[LH1, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚2〛, {x, - 5, 0}]], fits〚2〛} Out[51]= Norma L2, -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 , 1.17851 + 4.00005 x Out[52]= Norma H1, -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -4 -3 -2 -1 , 1.20704 + 3.00169 x

Ordem de Convergência -

caso irregular

Vamos aqui ver situações em que a falta de regularidade da função a aproximar, compromete a

ordem de convergência.

Começamos por reescrever abreviadamente a rotina como função variando a interpolação.

(24)

In[53]:= Rotina = Function{interpolacao, nE, f, ab, nn}, TbL = Table

fx = interpolacao[f, ab, n, x]; fL = fx /. x → # &; erroL2 = NormaL2[f[#] - fL[#] &, ab];

erroH1 = NormaH1[f[#] - fL[#] &, ab]; h = nE ab〚2〛 - ab〚1〛  n;

(* nE designa o nº de subelementos num elemento Linear=1, Quad=2, Cubico=3 *) {h, erroL2, erroH1}, {n, nn〚1〛, nn〚2〛, nn〚3〛};

LL2 = Log[10, {TbL[[1]], TbL[[2]]}]; LH1 = Log[10, {TbL[[1]], TbL[[3]]}];

fits = {Fit[LL2, {1, x}, x], Fit[LH1, {1, x}, x]};

Print @ {"Norma L2", Show[ListPlot[LL2, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚1〛, {x, - 5, 0}]], fits〚1〛};

Print @ {"Norma H1", Show[ListPlot[LH1, PlotStyle → {AbsolutePointSize[8], Red}], Plot[fits〚2〛, {x, - 5, 0}]], fits〚2〛};

;

Função descontínua na 1 ª derivada

AB = {- 0.5, 1.};

ft2 = Piecewise[{{Cos[π #], # < 0}, {1 - #, # ≥ 0}}] &;

Print @ {Plot[ft2[x], {x, AB〚1〛, AB〚2〛}, PlotLegends → {f}, ImageSize → Medium], Plot[ft2 '[x], {x, AB〚1〛, AB〚2〛},

PlotLegends → {f '}, ImageSize → Medium, PlotStyle → Red]}; Print"A função é contínua, mas a derivada tem um

salto em x=0. Logo f∈H1 mas f∉H2."; 10 Aula-A11b.nb

(25)

 -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 f , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -1 1 2 3 f′ 

A função é contínua, mas a derivada tem um salto em x=0.

Interpolação com elementos lineares

In[58]:= (* não apresenta problemas se a descontinuidade não estiver nos elementos -aqui basta usar n=3k *)

Rotina[InterpolaL, 1, ft2, AB, {6, 24, 3}] Norma L2, -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 , -0.356281 + 1.99145 x Norma H1, -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -1.0 -0.8 -0.6 -0.4 -0.2 , 0.148377 + 0.995449 x

In[59]:= (* mas a ordem baixa, p.ex. no caso em que n=3k+1

como a função é apenas H1 não garantimos mais que convergência linear L2 *) Rotina[InterpolaL, 1, ft2, AB, {7, 37, 3}]

(26)

Norma L2, -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 , -0.438531 + 1.75359 x Norma H1, -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.8 -0.6 -0.4 -0.2 , 0.0794261 + 0.734222 x

In[60]:= verErro = Function[n, fx = InterpolaL[ft2, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft2[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[8], Cyan}]]];

{verErro[12], verErro[13]}

(* Compara o erro no intervalo. Se usarmos n=3k intervalos, a descontinuidade de f' estando em zero,

aparece no extremo do subintervalo, não afectando a regularidade *)

Out[61]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 0.005 0.010 0.015 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 0.005 0.010 0.015 0.020 0.025 0.030  12 Aula-A11b.nb

(27)

Interpolação com elementos quadráticos

In[62]:= (* não apresenta problemas se a descontinuidade não estiver nos elementos -aqui basta usar n=6k *)

Rotina[InterpolaQ, 2, ft2, AB, {6, 48, 6}] Norma L2, -1.2 -1.0 -0.8 -0.6 -0.4 -4 -3 -2 -1 , -1.06556 + 2.98539 x Norma H1, -1.2 -1.0 -0.8 -0.6 -0.4 -2.5 -2.0 -1.5 -1.0 -0.5 , -0.252254 + 1.98696 x

In[63]:= (* mas a ordem baixa, p.ex. no caso em que n=6k+2 tem que ser par

como a função é apenas H1 não garantimos mais que convergência linear L2 *) Rotina[InterpolaQ, 2, ft2, AB, {8, 50, 6}] Norma L2, -1.2 -1.0 -0.8 -0.6 -3.0 -2.5 -2.0 , -1.07182 + 1.80382 x Norma H1, -1.2 -1.0 -0.8 -0.6 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 , -0.278353 + 0.724852 x Aula-A11b.nb 13

(28)

In[64]:= verErro = Function[n, fx = InterpolaQ[ft2, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft2[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], Graphics[p2xp = xp[[1 ;; - 1 ;; 2]];

{AbsolutePointSize[8], Blue, Point[{#, 0} & /@ p2xp]}], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[5], Red}] ]];

{verErro[12], verErro[14]}

(* Compara o erro no intervalo. Se usarmos n=

6k a descontinuidade fica no extremo do subintervalo, senão,

p.ex. n=6k+2 ou n=6k+4 fica dentro do intervalo, dando piores resultados *)

Out[65]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.004 -0.003 -0.002 -0.001 0.001 0.002 0.003 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.010 -0.005 0.005 0.010 0.015 0.020 

Interpolação com elementos cúbicos

In[66]:= (* não apresenta problemas se a descontinuidade não estiver nos elementos -- aqui basta usar n=9k *)

Rotina[InterpolaC, 3, ft2, AB, {9, 45, 9}]

(29)

Norma L2, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -5.5 -5.0 -4.5 -4.0 -3.5 , -1.82265 + 3.98427 x Norma H1, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -4 -3 -2 -1 , -0.82217 + 2.98479 x

In[67]:= (* mas a ordem baixa, se n=9k+3 tem que ser múltiplo de 3

como a função é apenas H1 não garantimos mais que convergência linear L2 *) Rotina[InterpolaC, 3, ft2, AB, {12, 48, 9}] Norma L2, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -3.0 -2.8 -2.6 -2.4 , -1.53041 + 1.51011 x Norma H1, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -1.05 -1.00 -0.95 -0.90 -0.85 -0.80 , -0.542487 + 0.517036 x Aula-A11b.nb 15

(30)

In[68]:= verErro = Function[n, fx = InterpolaC[ft2, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft2[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], Graphics[p3xp = xp[[1 ;; - 1 ;; 3]];

{AbsolutePointSize[8], Blue, Point[{#, 0} & /@ p3xp]}], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[5], Red}] ]];

{verErro[9], verErro[15]}

(* Compara o erro no intervalo. Se usarmos n=

9k a descontinuidade fica no extremo do subintervalo, senão,

p.ex. n=9k+3 ou n=9k+6 fica dentro do intervalo, dando piores resultados *)

Out[69]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.002 -0.001 0.001 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.020 -0.015 -0.010 -0.005 

Função descontínua na 2 ª derivada

AB = {- 0.5, 1.};

ft3 = Piecewise[{{Cos[π #], # < 0}, {1 - # ^ 2, # ≥ 0}}] &;

Print @ {Plot[ft3[x], {x, AB〚1〛, AB〚2〛}, PlotLegends → {f}, ImageSize → Medium], Plot[{ft3 '[x], ft3 ''[x]}, {x, AB〚1〛, AB〚2〛}, PlotLegends → {f ', f ''},

ImageSize → Medium, PlotStyle → {Red, Magenta}, PlotRange -> All]}; Print"As funções f e f' são contínuas, mas a 2ª derivada

tem um salto em x=0. Logo f∈H2 mas f∉H3."; 16 Aula-A11b.nb

(31)

 -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 f , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -10 -8 -6 -4 -2 2 f′ f′′ 

As funções f e f' são contínuas, mas a 2ª derivada tem um salto em x=0.

Interpolação com elementos lineares

In[94]:= (* não apresenta problemas se a descontinuidade não estiver nos elementos -aqui basta usar n=3k *)

Rotina[InterpolaL, 1, ft3, AB, {6, 24, 3}] Norma L2, -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 , -0.321837 + 1.99267 x Norma H1, -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -1.0 -0.8 -0.6 -0.4 -0.2 , 0.182483 + 0.996378 x

In[75]:= (* também não apresenta no caso em que n=3k+1,

porque a função tem derivada contínua, e ainda é H2 *) Rotina[InterpolaL, 1, ft3, AB, {7, 37, 3}]

(32)

Norma L2, -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -3.0 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 , -0.372109 + 1.95995 x Norma H1, -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 , 0.138758 + 0.967563 x

In[76]:= verErro = Function[n, fx = InterpolaL[ft3, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft3[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[8], Cyan}]]];

{verErro[12], verErro[13]}

(* Compara o erro no intervalo. Se usarmos n=3k intervalos, a descontinuidade de f'' estando em zero,

aparece no extremo do intervalo, não afecta a regularidade,

e no caso n=3k+1 também não porque não há descontinuidade na derivada *)

Out[77]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 0.005 0.010 0.015 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 0.005 0.010 0.015  18 Aula-A11b.nb

(33)

Interpolação com elementos quadráticos

In[78]:= (* não apresenta problemas se a descontinuidade não estiver nos elementos -aqui basta usar n=6k *)

Rotina[InterpolaQ, 2, ft3, AB, {6, 48, 6}] Norma L2, -1.2 -1.0 -0.8 -0.6 -0.4 -4 -3 -2 -1 , -1.06556 + 2.98539 x Norma H1, -1.2 -1.0 -0.8 -0.6 -0.4 -2.5 -2.0 -1.5 -1.0 -0.5 , -0.252254 + 1.98696 x

In[79]:= (* mas a ordem baixa, p.ex. no caso em que n=6k+2 tem que ser par

como a função é H2 só garantimos pelo menos convergência quadrática L2 *) Rotina[InterpolaQ, 2, ft3, AB, {8, 50, 6}] Norma L2, -1.2 -1.0 -0.8 -0.6 -4.0 -3.5 -3.0 -2.5 , -1.0148 + 2.58602 x Norma H1, -1.2 -1.0 -0.8 -0.6 -2.0 -1.5 -1.0 -0.5 , -0.200436 + 1.58418 x Aula-A11b.nb 19

(34)

In[80]:= verErro = Function[n, fx = InterpolaQ[ft3, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft3[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], Graphics[p2xp = xp[[1 ;; - 1 ;; 2]];

{AbsolutePointSize[8], Blue, Point[{#, 0} & /@ p2xp]}], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[5], Red}] ]];

{verErro[12], verErro[14]}

(* Compara o erro no intervalo. Se usarmos n=

6k a descontinuidade fica no extremo do intervalo, senão,

p.ex. n=6k+2 ou n=6k+4 fica dentro do intervalo, dando resultados piores, mas melhores do que para a função anterior, que era menos regular *)

Out[81]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.004 -0.003 -0.002 -0.001 0.001 0.002 0.003 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.002 0.002 0.004 0.006 

Interpolação com elementos cúbicos

In[82]:= (* não apresenta problemas se a descontinuidade não estiver nos elementos -aqui basta usar n=9k *)

Rotina[InterpolaC, 3, ft3, AB, {9, 45, 9}]

(35)

Norma L2, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -5.5 -5.0 -4.5 -4.0 -3.5 , -1.82265 + 3.98427 x Norma H1, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -4 -3 -2 -1 , -0.82217 + 2.98479 x

In[83]:= (* mas a ordem baixa, se n=9k+3 tem que ser múltiplo de 3

como a função é H2 só garantimos pelo menos convergência quadrática L2 *) Rotina[InterpolaC, 3, ft3, AB, {12, 48, 9}] Norma L2, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -4.0 -3.5 -3.0 , -1.71244 + 2.4841 x Norma H1, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -2.2 -2.0 -1.8 -1.6 -1.4 , -0.72136 + 1.48752 x Aula-A11b.nb 21

(36)

In[84]:= verErro = Function[n, fx = InterpolaC[ft3, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft3[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], Graphics[p3xp = xp[[1 ;; - 1 ;; 3]];

{AbsolutePointSize[8], Blue, Point[{#, 0} & /@ p3xp]}], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[5], Red}] ]];

{verErro[9], verErro[12]}

(* Compara o erro no intervalo. Se usarmos n=

9k a descontinuidade fica no extremo do intervalo, senão,

p.ex. n=9k+3 ou n=9k+6 fica dentro do intervalo, dando resultados um pouco piores *)

Out[85]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.002 -0.001 0.001 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.004 -0.002 0.002 0.004 

Função descontínua na 3 ª derivada (TPC)

In[114]:= AB = {- 0.5, 1.};

ft4 = Piecewise{Cos[π #], # < 0}, 1 + π

2#2

2

# -1 - #3, # ≥ 0 &;

Print @ {Plot[ft4[x], {x, AB〚1〛, AB〚2〛}, PlotLegends → {f}, ImageSize → Medium], Plot[{ft4 '[x], ft4 ''[x], ft4 '''[x]},

{x, AB〚1〛, AB〚2〛}, PlotLegends → {f ', f '', f '''}, ImageSize → Medium, PlotStyle → {Red, Magenta, Green}, PlotRange -> All]};

Print"As funções f e f' são contínuas, mas a 2ª derivada tem um salto em x=0. Logo f∈H2 mas f∉H3.";

(37)

 -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.2 0.2 0.4 0.6 0.8 1.0 f , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -30 -20 -10 10 20 f′ f′′ f(3) 

As funções f, f' e f'' são contínuas,

mas a 3ª derivada tem um salto em x=0. Logo f∈H3 mas f∉H4.

Interpolação com elementos cúbicos

(* só apresenta problemas num caso, porque a função é H3 e não é atingida a ordem 4,

com n=9k+3, mas tem-se pelo menos ordem 3 *) Rotina[InterpolaC, 3, ft4, AB, {9, 45, 9}] Rotina[InterpolaC, 3, ft4, AB, {12, 48, 9}]

(38)

Norma L2, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -5.5 -5.0 -4.5 -4.0 -3.5 , -1.82265 + 3.98427 x Norma H1, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -4 -3 -2 -1 , -0.82217 + 2.98479 x Norma L2, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -5.5 -5.0 -4.5 -4.0 -3.5 , -1.7376 + 3.60702 x Norma H1, -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -3.5 -3.0 -2.5 -2.0 , -0.72988 + 2.61209 x 24 Aula-A11b.nb

(39)

In[127]:= verErro = Function[n, fx = InterpolaC[ft4, AB, n, x]; fL = fx /. x → # &; Show[

Plot[ft4[x] - fL[x], {x, AB[[1]], AB[[2]]}, ImageSize → Medium, PlotRange → All], Graphics[p3xp = xp[[1 ;; - 1 ;; 3]];

{AbsolutePointSize[8], Blue, Point[{#, 0} & /@ p3xp]}], ListPlot[{xp, 0 xp}, PlotStyle → {AbsolutePointSize[5], Red}] ]]; {verErro[36], verErro[39]} Out[128]=  -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.00001 -5. × 10-6 5. × 10-6 , -0.4 -0.2 0.2 0.4 0.6 0.8 1.0 -0.00005 -0.00004 -0.00003 -0.00002 -0.00001 0.00001  Aula-A11b.nb 25

Imagem

Referências

temas relacionados :