Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

NOTEBOOKS TUTORIAL SAGEMATH

Views: 4549
%auto typeset_mode(True, display=False)

INTERPOLAÇÃO E AJUSTE DE CURVAS

Interpolação

Função Interp1d.

‘linear’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic, ‘cubic’ where ‘slinear’, ‘quadratic’ and ‘cubic’ refer to a spline interpolation of first, second or third order) or as an integer specifying the order of the spline interpolator to use. Default is ‘linear’.

x = [0,0.50,1,1.50,2,2.50,3,3.50,4,4.50,5] y = [1,3,4,6,9,7,8,4,3,8,10]
from scipy.interpolate import interp1d
  • **Linear **

f_int_linear = interp1d(x,y,kind = 'linear') f_int_linear
<scipy.interpolate.interpolate.interp1d object at 0x7fb71f17ffc8>
# testando f_int_linear(1.8)
7.87.8
  • Cubica

f_int_spcubic = interp1d(x,y,kind = 'cubic') f_int_spcubic
<scipy.interpolate.interpolate.interp1d object at 0x7fb71f17fba8>
# Testando f_int_spcubic(1.8)
8.279562019148.27956201914
  • Quadratica

f_int_quad = interp1d(x,y,kind = 'quadratic') f_int_quad
<scipy.interpolate.interpolate.interp1d object at 0x7fb71f17f260>
# Testando f_int_quad(1.8)
9.266666666679.26666666667
9.266666666679.26666666667
point(zip(x,y), legend_label='pontos',size = 30,gridlines='minor', figsize=(6, 5)) + plot(f_int_linear,(0,5),legend_label='Int.Linear',color='red',figsize=(6, 5)) + plot(f_int_spcubic,(0,5),legend_label='Int.Cubic',color='black') + plot(f_int_quad,(0,5),legend_label='Int.Quad',color='green')

Função Spline

x = [0,0.50,1,1.50,2,2.50,3,3.50,4,4.50,5] y = [1,3,4,6,9,7,8,4,3,8,10]
pontos = zip(x,y)
point(pontos, legend_label="pontos",size = 30,gridlines="minor", figsize=(6, 5))
f_spline = spline(pontos)

Saber qual é o ponto  correspondente a x = 0.2

f_spline(0.2)
1.896976710991.89697671099
point(pontos, legend_label="pontos",size = 30,gridlines="minor", figsize=(6, 5)) + plot(f_spline,(0,5),legend_label="spline", color = "red", gridlines="minor");

Ajuste de Curvas

Ajuste Linear

reset();
var("a,b,x,y")
(aa, bb, xx, yy)
import csv

faça o upload do arquivo "tabela_reta.csv"

import pandas as pd
dados_reta = pd.read_csv('dados_reta.csv')
pontos = zip(dados_reta.x,dados_reta.y)
points(pontos,color = "red",size=20,legend_label="pontos coletados",gridlines="minor", figsize=(6, 5))
modelo_reta(x) = a*x + b; modelo_reta
x  ax+bx \ {\mapsto}\ a x + b
# A opção solution_dict=True,utilizada para criar o dicionários das constantes, é opcional, mas caso não ocorra erro, coloque-a como true ajuste = find_fit(pontos, modelo_reta,[0.5,0.5],solution_dict=True); ajuste
{a:0.459962266452,b:0.175732173045}\left\{a : 0.459962266452, b : -0.175732173045\right\}
0.175732173045-0.175732173045
modelo_reta_ajustado(x) = modelo_reta.subs(ajuste);modelo_reta_ajustado(x)
0.459962266452x0.1757321730450.459962266452 \, x - 0.175732173045
point(pontos,color = "red",size=20,legend_label="pontos coletados",gridlines="minor", figsize=(6, 5)) + plot(modelo_reta_ajustado(x),(x,0,3.5),legend_label="reta ajustada")

Polinomial (GRAU>1)

ATENÇÃO! É importante resetar as variaveis antes de usar os outros modelos de ajuste de curvas, pois as constantes a,b,c são as mesmas em todos os modelos

reset()
var("a, b, c, x")
(aa, bb, cc, xx)
import pandas as pd
dados_parabola = pd.read_csv('dados_parabola.csv')
pontos = zip(dados_parabola.x,dados_parabola.y)
point(pontos,color = "red",size=20,legend_label="pontos coletados", gridlines="minor", figsize=(6, 5))
modelo_polinomial(x) = a*x^2 + b*x + c; modelo_polinomial
x  ax2+bx+cx \ {\mapsto}\ a x^{2} + b x + c
# A opção solution_dict=True,utilizada para criar o dicionários das constantes, é opcional, mas caso não ocorra erro, coloque-a como true ajuste = find_fit(pontos, modelo_polinomial,[0.5,0.5,0.5],solution_dict=True) ajuste
{a:0.967693528236,b:9.76313986539,c:0.259156519225}\left\{a : -0.967693528236, b : 9.76313986539, c : 0.259156519225\right\}
modelo_polinomial_ajustado(x) = modelo_polinomial.subs(ajuste) modelo_polinomial_ajustado(x)
0.967693528236x2+9.76313986539x+0.259156519225-0.967693528236 \, x^{2} + 9.76313986539 \, x + 0.259156519225
point(pontos,color = "red",size=20,legend_label="pontos coletados",gridlines="minor", figsize=(6, 5)) + plot(modelo_polinomial_ajustado(x) ,(x,0,10),legend_label="curva ajustada")

** Não Polinomial**

ATENÇÃO! É importante resetar as variaveis antes de usar os outros modelos de ajuste de curvas, pois as constantes a,b,c são as mesmas em todos os modelos

reset()
var("a,b,c,x")
(aa, bb, cc, xx)
import pandas as pd
dados_senoide = pd.read_csv('dados_senoide.csv')
pontos = zip(dados_senoide.x,dados_senoide.y)
point(pontos,color = "red",size=20,legend_label="pontos coletados",gridlines="minor", figsize=(6, 5))
modelo_seno(x) = a*sin(b*x + c); modelo_seno(x)
asin(bx+c)a \sin\left(b x + c\right)
# A opção solution_dict=True,utilizada para criar o dicionários das constantes, é opcional, mas caso não ocorra erro, coloque-a como true ajuste = find_fit(pontos, modelo_seno,[0.5,0.5,0.5],solution_dict=true);ajuste
{a:1.19210756633,b:0.494283899862,c:0.198753779578}\left\{a : 1.19210756633, b : 0.494283899862, c : -0.198753779578\right\}
modelo_seno_ajustado(x) = modelo_seno.subs(ajuste);modelo_seno_ajustado(x)
1.19210756633sin(0.494283899862x0.198753779578)1.19210756633 \, \sin\left(0.494283899862 \, x - 0.198753779578\right)
point(pontos,color = "red",size=20,legend_label="pontos coletados",gridlines="minor", figsize=(6, 5))+ plot(modelo_seno_ajustado(x),(x,0,12),legend_label="curva ajustada")

** %%% FIM INTERPOLAÇÃO E AJUSTE DE CURVAS %%% **