·
Cursos Gerais ·
Outros
Envie sua pergunta para a IA e receba a resposta na hora
Texto de pré-visualização
Cálculo Numérico CAN0001 20222 Prof Fernando Deeke Sasse CCT UDESC Interpolação 1 Interpolação Simples Veremos um exemplo de aplicação do método de interpolação polinomial simples com base monomial Inicialmente carregamos as biblitecas básicas Suponhamos que temos dados tabelados na seguinte forma array1 2 3 4 5 array53 82 72 66 43 Façamos um gráfico para estes dados matplotliblinesLine2D at 0x7fe8e47b3e80 Como temos 5 dados o polinômio que interpola estes pontos deve ser de quarta ordem sendo que seus coeficientes são dados pela solução da equação matricial sendo a matriz de Vandermonde definida por meio da seguinte função In 14 import numpy as np import matplotlibpyplot as plt x yx In 15 x nparray12345 x Out15 In 16 y nparray5382726643 y Out16 In 17 pltplotxyro Out17 c V c y V array 1 1 1 1 1 1 2 4 8 16 1 3 9 27 81 1 4 16 64 256 1 5 25 125 625 Resolvamos o sistema 122 2996666667 1558333333 338333333 026666667 Uma vez que temos os coeficientes podemos determinar o polinômio Definimos uma malha de 30 pontos para traçar o polinômio Finalmente fazemos o gráfico dos pontos juntamente com os polinômios matplotliblinesLine2D at 0x7fe8e484e970 matplotliblinesLine2D at 0x7fe8e484e9a0 In 18 def vandermondex n lenx a nn a npzerosa for i in rangen for j in rangen aij xij return a In 19 V vandermondex V Out19 In 20 import numpylinalg as la In 21 c lasolveVy printc pt In 22 def ptc n lenc return sumciti for i in rangen In 23 t nplinspace09 5130 In 24 pltplotxyro t ptc Out24 O mesmo resultado pode ser obtido diretamente usando o seguinte comando usando a base polinomial de Lagrange por exemplo poly1d 026666667 338333333 1558333333 2996666667 122 Podemos usar diretamente para traçar o gráfico matplotliblinesLine2D at 0x7fe8e4a8b3d0 matplotliblinesLine2D at 0x7fe8e4a8b400 2 Interpolação nãopolinomial Para mostrar que podemos ter uma base de funções de interpolação diferente da polinomial apresentaremos o exemple a seguir Suponhamos que queremos interpolar os dados Façamos um gráfico dos dados matplotliblinesLine2D at 0x7fcc27e124e0 In 28 from scipyinterpolate import lagrange In 30 f lagrangex y f Out30 f In 38 pltplotxyro t ft Out38 In In 99 import numpy as np import matplotlibpyplot as plt In 100 T nparray1234 X nparray34436246 In 101 pltplotTXro Out101 Usaremos a base de funções não polinomiais com as 4 funções pois temos 4 pontos Definimos uma função que gera a matrix de base No presente caso temos Determinemos os coeficientes da combinação linear array020504417 870673594 604303117 1799794139 A função interpolante pode ser definida por Geremos 30 pontos no eixo array09 101034483 112068966 123103448 134137931 145172414 156206897 167241379 178275862 189310345 200344828 21137931 222413793 233448276 244482759 255517241 266551724 277586207 28862069 299655172 310689655 321724138 332758621 343793103 354827586 365862069 376896552 387931034 398965517 41 expt 1 t expt In 102 def basisEx n lenx a nn a npzerosa for j in rangen aj0 npexpxj aj1 1 aj2xj aj3 npexpxj return a In 103 AbasisET In 106 import numpylinalg as la In 107 x lasolveAX x Out107 In 108 def ftc return c0npexptc1c2tc3npexpt t In 109 t nplinspace09 4130 t Out109 Podemos agora visualisar o resultado matplotliblinesLine2D at 0x7fcc27eb1e10 matplotliblinesLine2D at 0x7fcc27eb1f28 Podemos comparar este resultado com o da interpolação polinomial de base monomial Aqui a matriz de base é a matriz de Vandermonde No nosso caso array 1 1 1 1 1 2 4 8 1 3 9 27 1 4 16 64 Os coeficientes de interpolação são 8 885 5 075 Definimos agora o polinômio interpolante Façamos os gráficos comparando este resultado com o anterior In 110 pltplotTXro t ftx Out110 In 115 def vandermondey n leny a nn a npzerosa for i in rangen for j in rangen aij yij return a In 116 V vandermondeT V Out116 In 117 c lasolveVX printc In 118 def ptc n lenc return sumciti for i in rangen Text0 05 xt Os resultados foram bastante similares embora as bases completemene diferentes 3 Spline cúbico interpolação por partes Veja este texto sobre interpolação por partes e splines httpsbitly32B3r82 Usaremos uma biblioteca do Scipy Suponhamos que temos os dados Visualisemos estes dados num gráfico matplotliblinesLine2D at 0x7fe8e460acd0 In 119 pltplotTXrocolor black pltplott ptc color blue pltplott ftx color red pltlegenddados base polinomial base exponencial pltxlabelt pltylabelxt Out119 In 3 from scipyinterpolate import CubicSpline import numpy as np In 4 T nparray1234 X nparray34436246 In 5 import numpy as np import matplotlibpyplot as plt In 6 pltplotTXro Out6 Podemos determinar o spline cúbico para estes pontos como condições nos extremos de que as derivadas primeiras são 1 e 3 por exemplo Façamos o gráfico Text0 05 xt Se desejamos encontrar o valor da função em um ponto qualquer tal como por exemplo basta digitar 5616960000000001 Se escolhermos derivadas nulas nos extermos obteremos uma curva um pouco diferente In 11 cs1 CubicSplineT X bctype1 1 1 3 In 97 ts nplinspace09 41 30 pltfigurefigsize65 4 pltplotT X xcolor red pltplotts cs1tscolor black pltlegenddados spline cúbico pltxlabelt pltylabelxt Out97 x 26 In 13 printcs126 Text0 05 xt Usemos agora o spline natural Text0 05 xt 3 Exercícios In 92 cs2 CubicSplineT X bctype1 0 1 0 In 93 ts nplinspace09 41 30 pltfigurefigsize65 4 pltplotT X xcolor red pltplotts cs2tscolor black pltlegenddados spline cúbico pltxlabelt pltylabelxt Out93 In 94 cs3 CubicSplineT X bctypenatural In 98 ts nplinspace09 41 30 pltfigurefigsize65 4 pltplotT X xcolor red pltplotts cs3tscolor black pltlegenddados spline cúbico pltxlabelt pltylabelxt Out98 1 Implemente a determinação das bases interpolantes de Lagrange usando esta referência httpspythonnumericalmethodsberkeleyedunotebookschapter1704 LagrangePolynomialInterpolationhtml 2 Implemente a determinação das bases interpolantes de Newton usando esta referência httpspythonnumericalmethodsberkeleyedunotebookschapter1705 NewtonsPolynomialInterpolationhtml 3 Dados os pontos 0 01 02 03 04 05 06 07 08 110 113 116 120 122 126 130 135 140 Faça experimentos e escolha os pontos mais próximos de 037 e construa o polinômio interpolante de grau Verifique graficamente qual parece ser a melhor escolha para Use o resultado para estimar Neste problema use comandos do sistema 4 Utilize splines cúbicos para determinar no problema anterior Qual parecer ser o melhor resultado 5 Dados os pontos 0 01 02 03 04 05 110 113 116 120 122 126 Determine o spline cúbico e apresente o gráfico Escolha as condições para mais adequadas nos extremos x fx n n n f037 f037 x fx f x
Envie sua pergunta para a IA e receba a resposta na hora
Texto de pré-visualização
Cálculo Numérico CAN0001 20222 Prof Fernando Deeke Sasse CCT UDESC Interpolação 1 Interpolação Simples Veremos um exemplo de aplicação do método de interpolação polinomial simples com base monomial Inicialmente carregamos as biblitecas básicas Suponhamos que temos dados tabelados na seguinte forma array1 2 3 4 5 array53 82 72 66 43 Façamos um gráfico para estes dados matplotliblinesLine2D at 0x7fe8e47b3e80 Como temos 5 dados o polinômio que interpola estes pontos deve ser de quarta ordem sendo que seus coeficientes são dados pela solução da equação matricial sendo a matriz de Vandermonde definida por meio da seguinte função In 14 import numpy as np import matplotlibpyplot as plt x yx In 15 x nparray12345 x Out15 In 16 y nparray5382726643 y Out16 In 17 pltplotxyro Out17 c V c y V array 1 1 1 1 1 1 2 4 8 16 1 3 9 27 81 1 4 16 64 256 1 5 25 125 625 Resolvamos o sistema 122 2996666667 1558333333 338333333 026666667 Uma vez que temos os coeficientes podemos determinar o polinômio Definimos uma malha de 30 pontos para traçar o polinômio Finalmente fazemos o gráfico dos pontos juntamente com os polinômios matplotliblinesLine2D at 0x7fe8e484e970 matplotliblinesLine2D at 0x7fe8e484e9a0 In 18 def vandermondex n lenx a nn a npzerosa for i in rangen for j in rangen aij xij return a In 19 V vandermondex V Out19 In 20 import numpylinalg as la In 21 c lasolveVy printc pt In 22 def ptc n lenc return sumciti for i in rangen In 23 t nplinspace09 5130 In 24 pltplotxyro t ptc Out24 O mesmo resultado pode ser obtido diretamente usando o seguinte comando usando a base polinomial de Lagrange por exemplo poly1d 026666667 338333333 1558333333 2996666667 122 Podemos usar diretamente para traçar o gráfico matplotliblinesLine2D at 0x7fe8e4a8b3d0 matplotliblinesLine2D at 0x7fe8e4a8b400 2 Interpolação nãopolinomial Para mostrar que podemos ter uma base de funções de interpolação diferente da polinomial apresentaremos o exemple a seguir Suponhamos que queremos interpolar os dados Façamos um gráfico dos dados matplotliblinesLine2D at 0x7fcc27e124e0 In 28 from scipyinterpolate import lagrange In 30 f lagrangex y f Out30 f In 38 pltplotxyro t ft Out38 In In 99 import numpy as np import matplotlibpyplot as plt In 100 T nparray1234 X nparray34436246 In 101 pltplotTXro Out101 Usaremos a base de funções não polinomiais com as 4 funções pois temos 4 pontos Definimos uma função que gera a matrix de base No presente caso temos Determinemos os coeficientes da combinação linear array020504417 870673594 604303117 1799794139 A função interpolante pode ser definida por Geremos 30 pontos no eixo array09 101034483 112068966 123103448 134137931 145172414 156206897 167241379 178275862 189310345 200344828 21137931 222413793 233448276 244482759 255517241 266551724 277586207 28862069 299655172 310689655 321724138 332758621 343793103 354827586 365862069 376896552 387931034 398965517 41 expt 1 t expt In 102 def basisEx n lenx a nn a npzerosa for j in rangen aj0 npexpxj aj1 1 aj2xj aj3 npexpxj return a In 103 AbasisET In 106 import numpylinalg as la In 107 x lasolveAX x Out107 In 108 def ftc return c0npexptc1c2tc3npexpt t In 109 t nplinspace09 4130 t Out109 Podemos agora visualisar o resultado matplotliblinesLine2D at 0x7fcc27eb1e10 matplotliblinesLine2D at 0x7fcc27eb1f28 Podemos comparar este resultado com o da interpolação polinomial de base monomial Aqui a matriz de base é a matriz de Vandermonde No nosso caso array 1 1 1 1 1 2 4 8 1 3 9 27 1 4 16 64 Os coeficientes de interpolação são 8 885 5 075 Definimos agora o polinômio interpolante Façamos os gráficos comparando este resultado com o anterior In 110 pltplotTXro t ftx Out110 In 115 def vandermondey n leny a nn a npzerosa for i in rangen for j in rangen aij yij return a In 116 V vandermondeT V Out116 In 117 c lasolveVX printc In 118 def ptc n lenc return sumciti for i in rangen Text0 05 xt Os resultados foram bastante similares embora as bases completemene diferentes 3 Spline cúbico interpolação por partes Veja este texto sobre interpolação por partes e splines httpsbitly32B3r82 Usaremos uma biblioteca do Scipy Suponhamos que temos os dados Visualisemos estes dados num gráfico matplotliblinesLine2D at 0x7fe8e460acd0 In 119 pltplotTXrocolor black pltplott ptc color blue pltplott ftx color red pltlegenddados base polinomial base exponencial pltxlabelt pltylabelxt Out119 In 3 from scipyinterpolate import CubicSpline import numpy as np In 4 T nparray1234 X nparray34436246 In 5 import numpy as np import matplotlibpyplot as plt In 6 pltplotTXro Out6 Podemos determinar o spline cúbico para estes pontos como condições nos extremos de que as derivadas primeiras são 1 e 3 por exemplo Façamos o gráfico Text0 05 xt Se desejamos encontrar o valor da função em um ponto qualquer tal como por exemplo basta digitar 5616960000000001 Se escolhermos derivadas nulas nos extermos obteremos uma curva um pouco diferente In 11 cs1 CubicSplineT X bctype1 1 1 3 In 97 ts nplinspace09 41 30 pltfigurefigsize65 4 pltplotT X xcolor red pltplotts cs1tscolor black pltlegenddados spline cúbico pltxlabelt pltylabelxt Out97 x 26 In 13 printcs126 Text0 05 xt Usemos agora o spline natural Text0 05 xt 3 Exercícios In 92 cs2 CubicSplineT X bctype1 0 1 0 In 93 ts nplinspace09 41 30 pltfigurefigsize65 4 pltplotT X xcolor red pltplotts cs2tscolor black pltlegenddados spline cúbico pltxlabelt pltylabelxt Out93 In 94 cs3 CubicSplineT X bctypenatural In 98 ts nplinspace09 41 30 pltfigurefigsize65 4 pltplotT X xcolor red pltplotts cs3tscolor black pltlegenddados spline cúbico pltxlabelt pltylabelxt Out98 1 Implemente a determinação das bases interpolantes de Lagrange usando esta referência httpspythonnumericalmethodsberkeleyedunotebookschapter1704 LagrangePolynomialInterpolationhtml 2 Implemente a determinação das bases interpolantes de Newton usando esta referência httpspythonnumericalmethodsberkeleyedunotebookschapter1705 NewtonsPolynomialInterpolationhtml 3 Dados os pontos 0 01 02 03 04 05 06 07 08 110 113 116 120 122 126 130 135 140 Faça experimentos e escolha os pontos mais próximos de 037 e construa o polinômio interpolante de grau Verifique graficamente qual parece ser a melhor escolha para Use o resultado para estimar Neste problema use comandos do sistema 4 Utilize splines cúbicos para determinar no problema anterior Qual parecer ser o melhor resultado 5 Dados os pontos 0 01 02 03 04 05 110 113 116 120 122 126 Determine o spline cúbico e apresente o gráfico Escolha as condições para mais adequadas nos extremos x fx n n n f037 f037 x fx f x