参考文献
数値計算の基礎と応用[新訂版]
数値解析学への入門
杉浦 洋(南山大学教授) 著
発行日 2009/12/10
参考ページ
準備
オンラインコンパイラを使用します。
ソースコード
sample.py
# -*- coding: utf-8 -*-
import numpy as np
def p(x, n, xi, b):
y = b[n]
for l in range(n-1, -1, -1):
y = (x - xi[l]) * y + b[l]
return y
def f(x):
return np.exp(x)
def NewtonCoef(xi, m, b):
for n in range(m+1):
b[n] = f(xi[n])
for l in range(n):
b[n] = (b[n] - b[l]) / (xi[n] - xi[l])
return 0
def main():
m = 7
Pi = np.pi
dt = Pi / (m + 1)
xi = [0.5 * np.cos((i + 0.5) * dt) for i in range(m+1)]
b = [0] * (m+1)
NewtonCoef(xi, m, b)
print("degree={}".format(m))
npoints = 10
dx = 1.0 / npoints
for i in range(npoints+1):
x = -0.5 + i * dx
y = p(x, m, xi, b)
print("p({:4.1f})={:17.10e} error={:9.2e}".format(x, y, y - np.exp(x)))
main()
実行結果
console
degree=7
p(-0.5)= 6.0653065899e-01 error=-7.21e-10
p(-0.4)= 6.7032004573e-01 error=-3.07e-10
p(-0.3)= 7.4081822037e-01 error=-3.11e-10
p(-0.2)= 8.1873075381e-01 error= 7.36e-10
p(-0.1)= 9.0483741807e-01 error= 3.02e-11
p( 0.0)= 9.9999999924e-01 error=-7.61e-10
p( 0.1)= 1.1051709181e+00 error= 3.08e-11
p( 0.2)= 1.2214027589e+00 error= 7.70e-10
p( 0.3)= 1.3498588072e+00 error=-3.32e-10
p( 0.4)= 1.4918246973e+00 error=-3.36e-10
p( 0.5)= 1.6487212699e+00 error=-8.06e-10