二维插值

0 投票
2 回答
2525 浏览
提问于 2025-04-15 17:46

我想在给定的示例数据中,找到当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 个回答

1

我会使用Akima的样条插值,这个方法经过了很多测试,速度很快,效果也非常好。

不过,遗憾的是,它是用Fortran-66写的(而且代码有点乱),所以你需要把它翻译成C语言或者更新版的Fortran。我之前得到了一些帮助来让它正常工作,所以我建议你可以看看我在Usenet上的讨论

1

简单来说,就是要进行两次插值。第一次用Y值来选择两个Z表格,然后再用X值来找出对应的Z值。

撰写回答