多项式插值误差的定义
Definition of error in polynomial interpolation
我需要为函数 exp(x) (f(x)) 编写拉格朗日多项式 (g(x)) 的多项式插值程序。
n = 10
x = []
y = []
def f(x):
return math.exp(x)
def lagranz(x, y, t):
z = 0
for j in range(len(y)):
p1 = 1
p2 = 1
for i in range(len(x)):
if i != j:
p1 *= (t - x[i])
p2 *= (x[j] - x[i])
z = z + y[j] * p1 / p2
return z
# uniform grid
print('Равномерная сетка')
for i in range(1, n + 1):
temp = -1 + 2 * (i - 1) / (n - 1)
x.append(temp)
y.append(f(temp))
ynew = [lagranz(x, y, i) for i in x]
# errors
print('#\tx\tf(x)\tg(x)\tпогрешность')
for i in range(0, n):
print(i, '\t', x[i], '\t', y[i], '\t', ynew[i], '\t', ynew[i]-y[i])
我需要调查错误行为。
增量 g(x) = g(x) - f(x)
但问题是在主节点中错误为零。
我需要在更密集的网格上调查错误,但我不知道该怎么做。
只需计算其他地方的插值值
import math
def f(x):
return math.exp(x)
def lagranz(x, y, t):
z = 0
for j in range(len(y)):
p1 = 1
p2 = 1
for i in range(len(x)):
if i != j:
p1 *= (t - x[i])
p2 *= (x[j] - x[i])
z = z + y[j] * p1 / p2
return z
# This is the grid where you *define* interpolant
n = 10
xnode = []
fnode = []
for i in range(1, n + 1):
temp = -1 + 2 * (i - 1) / (n - 1)
xnode.append(temp)
fnode.append(f(temp))
# This is where you calculate interpolant values
# at arbitrary points, but *fixed* grid
xs = [0.5, 1.5, 3.0]
finter = [lagranz(xnode, fnode, x) for x in xs]
# Benchmark
for (x, y) in zip(xs, finter):
print(x, y, f(x), f(x) - y)
你也可以定义一个闭包,让插值的计算更清晰
finter = lambda x: lagranz(xnode, fnode, x)
for x in xs:
print(x, finter(x), f(x), finter(x) - f(x))
我需要为函数 exp(x) (f(x)) 编写拉格朗日多项式 (g(x)) 的多项式插值程序。
n = 10
x = []
y = []
def f(x):
return math.exp(x)
def lagranz(x, y, t):
z = 0
for j in range(len(y)):
p1 = 1
p2 = 1
for i in range(len(x)):
if i != j:
p1 *= (t - x[i])
p2 *= (x[j] - x[i])
z = z + y[j] * p1 / p2
return z
# uniform grid
print('Равномерная сетка')
for i in range(1, n + 1):
temp = -1 + 2 * (i - 1) / (n - 1)
x.append(temp)
y.append(f(temp))
ynew = [lagranz(x, y, i) for i in x]
# errors
print('#\tx\tf(x)\tg(x)\tпогрешность')
for i in range(0, n):
print(i, '\t', x[i], '\t', y[i], '\t', ynew[i], '\t', ynew[i]-y[i])
我需要调查错误行为。
增量 g(x) = g(x) - f(x)
但问题是在主节点中错误为零。
我需要在更密集的网格上调查错误,但我不知道该怎么做。
只需计算其他地方的插值值
import math
def f(x):
return math.exp(x)
def lagranz(x, y, t):
z = 0
for j in range(len(y)):
p1 = 1
p2 = 1
for i in range(len(x)):
if i != j:
p1 *= (t - x[i])
p2 *= (x[j] - x[i])
z = z + y[j] * p1 / p2
return z
# This is the grid where you *define* interpolant
n = 10
xnode = []
fnode = []
for i in range(1, n + 1):
temp = -1 + 2 * (i - 1) / (n - 1)
xnode.append(temp)
fnode.append(f(temp))
# This is where you calculate interpolant values
# at arbitrary points, but *fixed* grid
xs = [0.5, 1.5, 3.0]
finter = [lagranz(xnode, fnode, x) for x in xs]
# Benchmark
for (x, y) in zip(xs, finter):
print(x, y, f(x), f(x) - y)
你也可以定义一个闭包,让插值的计算更清晰
finter = lambda x: lagranz(xnode, fnode, x)
for x in xs:
print(x, finter(x), f(x), finter(x) - f(x))