winter_spring 发表于 2010-11-6 16:47

求助如何用C/C++程序实现二维双线性插值



0.61.42.2
0.250.2440.6321.298
0.5-0.1390.3850.888
1-0.504-0.023-0.751

带颜色的第一行代表x的值, 第一列代表y 值, 如何通过C/C++程序二维插值求解(0.8, 0.36)所对应的值,谢谢!


winter_spring 发表于 2010-11-6 16:54

不好意思,上表中的x的值为 0.6, 1.4, 2.2;所对应的y值为0.25, 0.5, 1.0
               

Rainyboy 发表于 2010-11-6 19:35

回复 2 # winter_spring 的帖子

我认为这个问题应该包含两个过程吧,
第一个过程是根据输入的点(X,Y)找到包围它的四个点,又可以分为两个步骤:
    1-1 根据输入的X坐标找到这样的X_data和X_data,他们满足:
      X_data<X<X_data
       1-2 根据输入的Y坐标找到这样的Y_data和Y_data,他们满足:
      Y_data<Y<Y_data
X_data[]和Y_data[]数组储存着存在精确值的那些点的坐标。
V_data[][]数组储存着存在精确值的那些点的函数值。

第二个步骤是根据X_data,X_data,Y_data,Y_data以及V_data,V_data,V_data,V_data构造双线性插值函数:
v = a*x + b*y +c*x*y +d
具体来说就是求解这样的方程组(a,b,c,d是未知数):
V_data= a*X_data + b*Y_data + c*X_data*Y_data +d
V_data= a*X_data + b*Y_data + c*X_data*Y_data +d
V_data= a*X_data + b*Y_data + c*X_data*Y_data +d
V_data= a*X_data + b*Y_data + c*X_data*Y_data +d
求解得到a,b,c,d后,就可以将实际坐标值带入,得到插值结果:

v = a*X + b*Y +c*X*Y +d

大概就是这样的吧,整个过程并不需要涉及很艰深的C语言内容,相信楼主能够完成编码。

firecat_2 发表于 2010-11-7 22:13

回复 1 # winter_spring 的帖子

像版主那样首先把自己的思路理清 用人类语言能描述清楚了 程序自然编出来了
遇到不会的语句 直接百度 后面加个C就ok了 最关键的是自己一定要思路清晰
页: [1]
查看完整版本: 求助如何用C/C++程序实现二维双线性插值