0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ラグランジュの補間多項式をプログラミングで解いてみる

Posted at

#概要
#####ラグランジュの補間多項式
ラグランジュの補間多項式は、点(x, y)が与えられたとき、その点を通るn次関数の式を求められます。
#####プログラムについて
今回作成したプログラムは、与えられた点(x, y)について、それぞれが対応するリストを作成し、それらを基に関数f(x)を導くプログラムになります。
f(x)を求める際、xを不定元として認識させる必要や、式を簡易化する必要があるため、sympyというパッケージを利用します。

#プログラム

Lagrange.py
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
import sympy

X = [-2, -1, 3]
Y = [4, 1, 9]

def ragrange (lx, ly):
    x=sympy.symbols('x')
    f = 0
    for i in range(len(lx)):
        z = 1
        for j in range(len(lx)):
            if j != i:
                z = z * ((x - lx[j]) / (lx[i] - lx[j]))
        f += z * ly[i]
    return sympy.simplify(f)

print("f(x) =",(ragrange(X,Y)))

#実行結果
はじめに、上のプログラムで示したデータX, Yで実行します。
このデータはf(x)=x**2の内の3つの点を抜粋したため、f(x)=x**2が正しい答えとなります。

X = [-2, -1, 3]
Y = [4, 1, 9]

#結果
f(x) = x**2

次に適当な4つのデータを与え3次関数を求めてみます。

X = [-3,-2, -0, 1]
Y = [-6,-1, -3, 2]

#結果
f(x) = x**3 + 3*x**2 + x - 3

#まとめ
(n+1)個のデータを与えることでn次関数が求めることができました。

#おわりに
今回の記事はここまでになります。
質問・アドバイス等あればコメント欄にてお願いいたします。
最後までお付き合い頂きありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?