二维插值

时间:2010-01-07 22:49:26

标签: c++ python math

我希望在y = 12和x = 3.5时找到z的值,给出以下示例数据。我怎么能用C ++做到这一点?

y = 10
x = [1,2, 3,4, 5,6]
z = [2.3, 3.4, 5.6, 7.8, 9.6, 11.2]

y = 20 
x = [1,2, 3,4, 5,6]
z = [4.3, 5.4, 7.6, 9.8, 11.6, 13.2]

y = 30 
x = [1,2, 3,4, 5,6]
z = [6.3, 7.4, 8.6, 10.8, 13.6, 15.2]

我目前的Python代码:

import scipy
import math
import numpy
from scipy import interpolate

x = [1, 2, 3, 4, 5, 6]
y = [10, 20, 30]

Y = numpy.array([[i]*len(x) for i in y])
X = numpy.array([x for i in y])
Z = numpy.array([[2.3, 3.4, 5.6, 7.8, 9.6, 11.2],
                 [4.3, 5.4, 7.6, 9.8, 11.6, 13.2],
                 [6.3, 7.4, 8.6, 10.8, 13.6, 15.2]]) 


tck = interpolate.bisplrep(X, Y, Z)
print interpolate.bisplev(3.5, 15, tck) 

2 个答案:

答案 0 :(得分:1)

只需进行两次插值。首先用Y插值以选择两个Z表。然后用X插值以选择Z值。

答案 1 :(得分:1)

我会使用Akima's Spline,它经过了很好的测试,非常快,并且产生了非常好的效果。

不幸的是,它出现在Fortran-66中(并且非常混乱),因此您需要将其转换为C或更现代的Fortran变体。我gotten some help让所有内容全部工作,因此我建议您在Usenet上阅读my threads