[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung

Einführung

** Führen Sie die Interpolation mit der Lagrange-Methode zur Interpolation von Scipy durch. ** **.

** Interpoliere einen gegebenen N + 1-Datensatz ($ x_i $, $ y_i $) (i = 0,2, 3, ..., N) durch ein Polynom n-ter Ordnung ([Lagrange-Interpolation](https :: //ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B0%E3%83%A9%E3%83%B3%E3%82%B8%E3%83%A5%E8%A3 % 9C% E9% 96% 93)) Implementieren Sie das Programm in Python3. ** **.

Betrachten Sie als Beispiel $ y = 1 / (1 + x ^ 2) . Probieren Sie einen 11-Punkte-Datensatz ( x_i $, $ y_i $) aus und interpolieren Sie ihn mit einem Polynom 10. Ordnung. Diese Funktion funktioniert nicht mit der Lagrange-Interpolation [Runge-Phänomen](https://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%B3%E3%82%B2%E7%8F%BE%E8 Es ist als Beispiel für die Verursachung von% B1% A1) bekannt.


Inhalt

Code 1: Verwenden Sie scipy / numpy. Minimaler Code (** Klicken Sie hier, wenn Sie es eilig haben **) Code 2: Berechnen Sie die Interpolationskoeffizienten im Code. Klicken Sie hier, um die Methode zu studieren.


Berechnungscode (1): Verwenden Sie scipy / numpy

Code(1)scipyを利用してラクをするCode。


from scipy.interpolate import lagrange
import numpy as np
import matplotlib.pyplot as plt

##Maine
x =np.linspace(-5,5,num=11) #[-5,5]Teilen Sie den Bereich von in 11 gleiche Teile und speichern Sie in x
y = 1.0/(1.0+x**2)          #Die in diesem Beispiel betrachtete Funktion y= 1/(1+x^2)Definieren
f_Lag=lagrange(x,y) #scipy.interpolate.Ausführung der Lagrange-Interpolation durch Lagrange
##

#for plot
xnew =np.linspace(-5,5,num=51) # [-5,5]Teilen Sie den Bereich von in 51 gleiche Teile und speichern Sie ihn in xnew
plt.plot(x, y, 'o',  xnew, f_Lag(xnew), '-')   #Rohdaten"o"Also die Linie, die Lagrange ist, interpoliert('-')Malen mit.
plt.legend(['Raw data','Lagrange'], loc='best')  #Spezifikation der Legende
plt.xlim([-6, 6])  #x-Achsen-Plotbereich
plt.ylim([0, 1.4]) #y-Achsen-Plotbereich
plt.show()

Ergebnis (1)

t.png

11 Datenpunkte werden blau abgetastet. Die orange Linie ist Lagrange interpoliert.


Berechnungscode (2) Berechnen Sie den Koeffizienten für die Interpolation mit Python

Code(2)Code中に直接数値計算を実行する



"""
Interpolation: ラグランジュInterpolation
Beispiel: y = 1/(1+x**2):Sektion-11 Punkte von 5 bis 5 werden abgetastet und Lagrange interpoliert.
"""
from math import pi,e, log, factorial
import matplotlib.pyplot as plt


### 
def g(i, x): #Berechnung des Lagrange-Interpolationskoeffizienten. Maine.
    dum=1.0
    for j in range(len(x_lis)):
        if j != i :
            dum *= (x-x_lis[j])/(x_lis[i]-x_lis[j])
    return dum

#
def fLag(x,m): #Lagrange-Interpolation
    dum=0.0
    for j in range(m):
        dum += y_lis[j]*g(j, x)
    
    return dum
###
    
##Datensatzaufbau für das Beispiel
m = 11  #  x= -11-Punkt-Probenahme in regelmäßigen Abständen von 5 bis 5
x_lis = []
y_lis = []
def yy(x):
    return 1/(1+x**2) #Beispielfunktion y= 1/(1+x**2)

for k in range(m):
    xm = -5.0 + 10.0*k / m
    x_lis.append(xm)
    y_lis.append(yy(xm))
    
plt.plot(x_lis,y_lis, 'o',label='Row data')
##

###Ausführung der Lagrange-Interpolation
mm = 5000
y_Laglis = []
xx_lis = []
for k  in range(mm):
    xm = -5.0 + 10.0*k / mm
    xx_lis.append(xm)

y_lis_exact=[]
for j in range(mm):
    y_Laglis.append(fLag(xx_lis[j],m))
    y_lis_exact.append(yy(xx_lis[j]))

    
#plot
plt.grid(True)
plt.xlabel('x',fontsize=24)
plt.ylabel('f(x)',fontsize=24)
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.plot(xx_lis,y_Laglis, color='Red',label='Lagrange')
plt.plot(xx_lis,y_lis_exact, color='Black',label='Exact')
plt.legend(loc='upper left')
plt.show()¥

Ergebnis (2)

Lag.png

11 Datenpunkte werden blau abgetastet. Die rote Linie ist Lagrange interpoliert. Die schwarze Linie repräsentiert die genaue Lösung.

** Wenn die Reihenfolge (Datenpunkte) erhöht wird, wird die Annäherung des zentralen Teils besser, aber die Annäherung des Teils in der Nähe beider Enden wird schlechter. Es ist als Beispiel bekannt, bei dem der Fehler mit zunehmender Reihenfolge zunimmt und schließlich gegen unendlich abweicht. Dies ist auf die Verwendung gleichmäßig verteilter Trennpunkte zurückzuführen, und es ist bekannt, dass dies vermieden werden kann, indem die Koordination der Trennpunkte nahe der Mitte rau und an beiden Enden fein gemacht wird [1]. ** **.


Nachtrag: Bedingungen für die äquidistante Lagrange-Interpolation, um sich mit zunehmender Punktzahl der ursprünglichen Funktion f (x) zu nähern.

** Für Intervall [-1,1]: Wenn der Definitionsbereich von $ f (x) $ analysiert und mit der komplexen Ebene verbunden wird, beträgt seine Singularität $ z $ **

|(1+z)^{1+z}| \leqq 4 e^{\pi |Im(z)|}

** Trifft nicht **. In diesem Beispiel beträgt die Singularität z von $ f (z) = 1 / (1 + z ^ 2) $ $ ± i $. Die rechte Seite der Ungleichung ist $ 4e ^ \ pi = 92.562770531 ... , Die linke Seite ist|(1+i)^{1+i}| = 0.644793...$ Da daher die obige Ungleichung ** erfüllt ** ist, nimmt der Fehler der Lagrange-Interpolation (polypolymetrische Interpolation) unter Verwendung gleichmäßig verteilter Teilungspunkte mit zunehmender Anzahl von Teilungspunkten zu.

Wenn f (x) eine stetige Funktion im Intervall [a, b] ist, nähert sich der Interpolationspolymorphismus f (x) an der Grenze, an der N unendlich ist, wenn der Teilungspunkt $ x_n $ wie folgt ausgewählt wird [2]. ..

x_n = (a+b)/2 + (b-a)(sin(-\pi/2+n\pi/N))/2, $(n = 0, 1, 2, ...,N) $

Darüber hinaus tritt das oben gezeigte Rung-Phänomen bei der polymorphen Interpolation nicht auf, bei der der Nullpunkt eines orthogonalen Polynoms (z. B. Chebisif-Polynom) als Teilungspunkt ausgewählt wird [1].

Verweise

[1] Masatake Mori, ["Numerical Analysis Second Edition"](https://www.amazon.co.jp/%E6%95%B0%E5%80%A4%E8%A7%A3%E6%9E % 90-% E5% 85% B1% E7% AB% 8B% E6% 95% B0% E5% AD% A6% E8% AC% 9B% E5% BA% A7-% E6% A3% AE-% E6% AD% A3% E6% AD% A6 / dp / 4320017013), Kyoritsu Publishing, 2002. [2] Masao Iri und Kazutake Fujino, ["Allgemeines Wissen über numerische Berechnungen"](https://www.amazon.co.jp/%E6%95%B0%E5%80%A4%E8%A8%88 % E7% AE% 97% E3% 81% AE% E5% B8% B8% E8% AD% 98-% E4% BC% 8A% E7% 90% 86-% E6% AD% A3% E5% A4% AB / dp / 4320013433), Kyoritsu Publishing, 1985.

Recommended Posts

[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Summenberechnung, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Spline-Interpolation dritter Ordnung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Monte-Carlo-Integration, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung nach Python] Numerische Integration, Trapezgesetz / Simpson-Gesetz, numerische Berechnung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Lösen simultaner linearer Gleichungen, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Inverse Matrixberechnung, numpy
[Wissenschaftlich-technische Berechnung mit Python] Histogramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Logistisches Diagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Polarkoordinatendiagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Numerische Berechnung zur Ermittlung des Ableitungswerts (Differential)
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
[Wissenschaftlich-technische Berechnung mit Python] Beispiel für die Visualisierung von Vektorfeld, elektrostatischem Magnetfeld, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Liste der Matrizen, die in Hinpan in der numerischen linearen Algebra vorkommen
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Wissenschaftlich-technische Berechnung mit Python] Lösen gewöhnlicher Differentialgleichungen, mathematischer Formeln, Sympy
Lagrange-Interpolation in Python
Numerische Berechnung mit Python
[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken
[Wissenschaftlich-technische Berechnung von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
[Wissenschaftlich-technische Berechnung von Python] Zeichnung von 3D-gekrümmter Oberfläche, Oberfläche, Drahtrahmen, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
[Wissenschaftlich-technische Berechnung durch Python] Lösung des Randwertproblems gewöhnlicher Differentialgleichungen im Matrixformat, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Plot, Visualisierung, Matplotlib von 2D-Daten, die aus einer Datei gelesen wurden
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, Visualisieren, Matplotlib von 2D-Konturlinien (Farbkonturen) usw.
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung von 1-dimensionalen und 2-dimensionalen Wellengleichungen nach der FTCS-Methode (explizite Methode), doppelt gekrümmte partielle Differentialgleichungen
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung gewöhnlicher Differentialgleichungen erster Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung durch Python] Liste der Verwendung von (speziellen) Funktionen, die in der Physik unter Verwendung von scipy verwendet werden
[Wissenschaftliche und technische Berechnung von Python] Zeichnung fraktaler Figuren [Shelpinsky-Dreieck, Bernsley-Farn, fraktaler Baum]
[Wissenschaftlich-technische Berechnung von Python] Wellen "Stöhnen" und Gruppengeschwindigkeit, Wellenüberlagerung, Visualisierung, Physik der High School
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
Wissenschaftlich-technische Berechnung mit Python] Zeichnen und Visualisieren von 3D-Isoplanes und deren Querschnittsansichten mit Mayavi
Erstellen Sie ein neues numerisches Python-Berechnungsprojekt
[Wissenschaftlich-technische Berechnung nach Python] Ableitung analytischer Lösungen für quadratische und kubische Gleichungen, mathematische Formeln, Sympy
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der zweidimensionalen Laplace-Poisson-Gleichung für die elektrostatische Position nach der Jacobi-Methode, elliptische partielle Differentialgleichung, Randwertproblem
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der eindimensionalen instationären Wärmeleitungsgleichung nach der Crank-Nicholson-Methode (implizite Methode) und der FTCS-Methode (positive Lösungsmethode), parabolische partielle Differentialgleichung
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Schießmethode (1), Potential vom Well-Typ, Quantenmechanik
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Berechnung der technischen Indikatoren durch TA-Lib und Pandas
[Wissenschaftlich-technische Berechnung durch Python] Erzeugung ungleichmäßiger Zufallszahlen mit gegebener Wahrscheinlichkeitsdichtefunktion, Monte-Carlo-Simulation
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), harmonisches Oszillatorpotential, Quantenmechanik
[Python] Numerische Berechnung der zweidimensionalen Wärmediffusionsgleichung mit der ADI-Methode (implizite Methode mit alternativer Richtung)
Numerische Berechnung von kompressiblem Fluid nach der Methode des endlichen Volumens
Starten Sie die numerische Berechnung mit Python (mit Homebrew und Pip).