声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5049|回复: 3

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

[复制链接]
发表于 2010-11-6 16:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x

0.6
1.4
2.2
0.25
0.244
0.632
1.298
0.5
-0.139
0.385
0.888
1
-0.504
-0.023
-0.751

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


回复
分享到:

使用道具 举报

 楼主| 发表于 2010-11-6 16:54 | 显示全部楼层
不好意思,上表中的x的值为 0.6, 1.4, 2.2;所对应的y值为0.25, 0.5, 1.0
                 
发表于 2010-11-6 19:35 | 显示全部楼层
回复 2 # winter_spring 的帖子

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

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

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

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

评分

1

查看全部评分

发表于 2010-11-7 22:13 | 显示全部楼层
回复 1 # winter_spring 的帖子

像版主那样  首先把自己的思路理清 用人类语言能描述清楚了 程序自然编出来了
遇到不会的语句 直接百度 后面加个C就ok了 最关键的是自己一定要思路清晰

点评

这是大实话  发表于 2010-11-9 17:03
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 06:56 , Processed in 0.072959 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表