• Register

Na kakšan način določimo interpolirane vrednosti za poljubno izbrane koordinate?

+1 vote
294 views
asked Apr 21, 2020 by belminramic (510 points)

3 Answers

+3 votes
Pozdravljen!

Najprej uvozi spodnji paket iz modula scipy:

from scipy.interpolate import InterpolatedUnivariateSpline

potem:

spl = InterpolatedUnivariateSpline(x, I, k = s)
odgovor3 = spl.get_coeffs()

V oklepaj pa daj kar imaš v tvojih podatkih
answered Apr 22, 2020 by andrejgregoric (400 points)
+2 votes

Koordinate lahko določiš s polinomsko interpolacijo s funkcijo scipy.interpolate.interp1d.

Sestavil sem kratek primer:

1. Uvoziš interp1d iz knjižnice 

in [1]: from scipy.interpolate import interp1d​

2. Potrebuješ array posameznih koordinat, ki si jih beležil na primer:

  • x_0 = 0
  • x_1 = 1
  • x_2 = 2

torej

in [2]: x = np.array([x_0,x_1,x_2])

  • y_0 = 1
  • y_1  = 3
  • y_2 = 5

in [3]: y = np.array

in [4]: polinomska_interpolacija = interp1d(x, y), lahko dodas tudi kind, ki določa stopnjo reda. Če se pravilno spomnim dokumentacije je po defaultu kind = 3
in [5]: polozaj_y = polinomska_interpolacija(x_1)
          int(polozaj_y)

Ta koda ti bo vrnila koordinato y pri točki x_1 torej bo:

 out [5]: '3'

Tebe verjetno zanima določanje vrednosti za več poljubno izbranih koordinat, ne samo za eno kot zgornji primer. Pri tem boš potreboval nek vektor Xiv, ki bo zajel določeno poljubno število vrednosti na razponu podanih X koordinat. Torej poljubno število razdeljenih vrednosti med maximum vrednost X in minimum vrednosti X koordinate. To narediš najlažje z uporabo funkcije linspace​. Torej če uporabim zgoraj navedene podatke in ustvarim vektor Xiv ki bo razdeljen na poljubno število razdelkov n (recimo da si izbereš 10), definiraš vektor s kodo:

In [6]: xiv = np.linspace(min(x),max(x),10)

In [7]: xiv

out [7]:  array([0. , 0.22222222, 0.44444444, 0.66666667, 0.88888889, 1.11111111, 1.33333333, 1.55555556, 1.77777778, 2. ]) (linscape smo že kar obdelali in pisali na testu, tako da ga ne bom natančneje razlagal).

answered Apr 22, 2020 by zigazupanc (820 points)
+2 votes

Drugi del ogovovora, mislim da sem predolgo napisal in ne spreme vsega teksta na enkrat. Y koordinate sedaj dobiš z isto metodo kot prej pri osnovnem primeru le da namesto polozaj_y = polinomska_interpolacija(x_1), vstaviš polozaj_y = polinomska_interpolacija(xiv), torej:

in [8]: polozaj_y = polinomska_interpolacija(xiv)
          polozaj_y

out [8]: array([1. , 1.44444444, 1.88888889, 2.33333333, 2.77777778, 3.22222222, 3.66666667, 4.11111111, 4.55555556, 5. ])

Ta output ti sedaj vrne koordinate Y za definiran vektor xiv, torej matematično zapisano y(xiv).

answered Apr 22, 2020 by zigazupanc (820 points)
A hvala, zdaj dela

lp
...