菜鸟求如何编二维线性插值函数,如何调用一维线性插值来得出二维线性插值
时间:2011-12-16
来源:互联网
如题
作者: lxxiao2009 发布时间: 2011-12-16
C/C++ code
#include <iostream> using namespace std; double Lagrange(double *X,double* Y,int n,double t)//拉格朗日插值法,X表示插值点的横坐标数组,Y表示插值点的纵坐标数组,n是指插值点的个数,t表示将要在哪一点球差值,返回值是求得的差值 { double sum=0; int i,j; for (i=0;i<n;i++) { double L=1; for (j=0;j<n;j++) { if (j!=i) { L*=(t-X[j])/(X[i]-X[j]); } } sum+=L*Y[i]; } return sum; } double Newton(double *X,double *Y,int n,double t)//牛顿插值法 { typedef double * DP; double **table=new DP[n]; int i,j; for (i=0;i<n;i++) { table[i]=new double [n]; } for (j=0;j<n;j++) { for (i=j;i<n;i++) { if (j==0) { table[i][j]=Y[i]; } else { table[i][j]=(table[i][j-1]-table[i-1][j-1])/(X[i]-X[i-j]); } } } double sum=0; for (i=0;i<n;i++) { double temp_sum=1; for (j=0;j<i;j++) { temp_sum*=(t-X[j]); } sum+=temp_sum*table[i][i]; } for (i=0;i<n;i++) { delete[] table[i]; } delete []table; return sum; } double Hermite(double *X,double *Y,double *M,int n,double t)//埃尔米特插值法 { double sum=0; int i,j; for (i=0;i<n;i++)// { double l_sum=1; double temp_sum=1; for (j=0;j<n;j++) { if (j!=i) { temp_sum/=(X[i]-X[j]); l_sum*=(t-X[j])/(X[i]-X[j]); } } sum=sum+(1-2*(t-X[i])*temp_sum)*l_sum*l_sum*Y[i]+(t-X[i])*l_sum*l_sum*M[i]; } return sum; } int main() { double X[2]={1,4}; double Y[2]={1,2}; double M[2]={0.5,0.25}; int n=2; double t=2; double result=Hermite(X,Y,M,n,t); return 0; }
作者: goldbeef 发布时间: 2011-12-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28