Interp1 c++实现

Interp1 c++实现在网上找了一下,有是有但是我下载下来用的时候结果不对。想修改一下但是搞得迷迷糊糊的,就干脆写了一个,不过只有最简单的线性插值的实现,新手可以直接拿过去用。也希望老鸟也可以不吝赐教,提高一下效率或者优化下结构。cpp文件//—————————————————————————#pragmahdrstop#include”Interpfun.h”//————————

大家好,又见面了,我是你们的朋友全栈君。

在网上找了一下,有是有但是我下载下来用的时候结果不对。想修改一下但是搞得迷迷糊糊的,就干脆写了一个,不过只有最简单的线性插值的实现,新手可以直接拿过去用。也希望老鸟也可以不吝赐教,提高一下效率或者优化下结构。
cpp文件

//---------------------------------------------------------------------------
#pragma hdrstop

#include "Interpfun.h"

//---------------------------------------------------------------------------
#include"interpfun.h"
Interp::Interp()
{ 
   
strMethod1 ="lgr";
strMethod2 = "lg3";
strMethod3 = "spl";
}
Interp::~Interp()
{ 
   

}
double Interp::lgr(double *x,double *y,int n,double t)                  //X原位置Y原数据,n数据长度,t插入位置
{ 
   
	int i,j,m;
	double k,z,s;
	z= 0.0f;
	if(n<1)
	{ 
   
	 	return(z);
	}
	if(n==1)
	{ 
   
		z=y[0];
		return(z);
	}
	if(n==2)
	{ 
   
		k=y[1]-y[0]/x[1]-x[0];
		z=k*t+y[1]-k*x[1];
		return(z);
	}
	if(n>2){ 
   
	  for(i=0;i<n-1;i++){ 
   
	  if(x[i]==t){ 
   
		z=y[i];
		return(y[i]);
      }
	  if((x[i]<t)&&(x[i+1]>t)){ 
   
		k=(y[i+1]-y[i])/(x[i+1]-x[i]);
		z=k*(t-x[i+1])+y[i+1];
		return(z);
	  }
	  }
	  return(x[n-1]);
	}
}
void Interp::interp_onePoint(double *x,double *y,int n,double t,double *fval,char *method)
{ 
   

	if(method== NULL )
	*fval = lgr(x,y,n,t);
	else if(strcmpi(method,strMethod1) == 0)
	*fval = lgr(x,y,n,t);
	else
	*fval = lgr(x,y,n,t);
}


void Interp::interp_multiPoint(double *x,double *y,int n,double *t,double *fval,int m,char *method)
{ 
   
	if(t == NULL)
	{ 
   return;}
	double tempVal = 0.0;
	for(int k=0;k<m;k++){ 
   
	interp_onePoint(x,y,n,t[k],&tempVal,method);
	fval[k] = tempVal;
	}
}
#pragma package(smart_init)

h文件

//---------------------------------------------------------------------------

#ifndef InterpfunH
#define InterpfunH
//---------------------------------------------------------------------------
#include"math.h"
#include<stdio.h>
#include <string.h> 
#ifndef SafeDeleteVec
#define SafeDeleteVec(X) { if((X)) delete (X); (X)=NULL;}
#endif
class Interp
{ 
   
public:
	char *strMethod1;
	char *strMethod2;
	char *strMethod3;
public:
	Interp();
	~Interp();
/*****以下两个函数为插值函数**/
void interp_onePoint(double *x,double *y,int n,double t,double *fval,char *method);//返回单个点的值
void interp_multiPoint(double *x,double *y,int n,double *t,double *fval,int m,char *method);//返回多个点的值,点的个数为m
private:
//拉格朗日线性插值
double lgr(double *x,double *y,int n,double t);
};
#endif
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134540.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月2日 下午7:20
下一篇 2022年5月2日 下午7:20


相关推荐

  • 微信公众平台开发教程Java版(二) 接口配置

    微信公众平台开发教程Java版(二) 接口配置微信公众账号申请完成后,默认开启的是编辑模式。我们需要修改为开发模式。登陆微信公众平台》功能》高级功能先关闭编辑模式,再开启开发模式。申请成为开发者,如果是服务号,需要则会有开发者凭证信息如图如果是订阅号,则只显示服务器配置。下一步就是配置接口服务器了。在公众平台网站的高级功能–开发模式页,点击“成为开发者”按钮,填写U…

    2022年6月29日
    27
  • 2021年软件测试面试题大全[通俗易懂]

    简述测试流程:1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(主要参与人员:开发、测试、产品、测试leader)。 6、开发提交代码至SVN或者GIT,配管搭建测试环境。 7、执行测试用例,记录发现的问题。 8、验证bug与回归测试。 9、编写测试报告。 10、产品上线。补充测试用例设计过程:根据需求得出测试需求设计测试方

    2022年4月7日
    52
  • java tolist_Java Collectors toList()用法及代码示例

    java tolist_Java Collectors toList()用法及代码示例Collector 类的 toList 方法是静态 类 方法 它返回一个 Collector 接口 该接口将输入数据收集到一个新列表中 此方法从不保证返回列表的类型 可变性 可序列化性或线程安全性 但可以使用 toCollection Supplier 方法进行更多控制 这是 un orderedColle 用法 publicstatic 哪里 T 输入元素的

    2026年2月25日
    2
  • linux mysql1146_MySQL主从同步及错误1146解决办法

    linux mysql1146_MySQL主从同步及错误1146解决办法在实际使用MySQL的时候我们有时要增加一些新的库进行主从同步,所以可以通过修改my.cnf文件以及在主库上添加用户连接权限就可以实现主从同步,而在做主从同步的时候碰到几个问题这里就和大家说一下,至于如何构建主从同步这里就不再多说了,相信在网上能找到一大堆,这里就稍稍提几个关键点,在从库下的my.cnf添加如下几行:server-id=2#一般主库是1,从库可以除1以外的数字log-bin=m…

    2022年6月4日
    95
  • js如何创建数组

    js如何创建数组如何创建数组使用数组之前首先要创建,而且需要把数组本身赋至一个变量。好比我们出游,要组团,并给团定个名字“云南之旅”。创建数组语法:varmyarray=newArray();        我们创建数组的同时,还可以为数组指定长度,长度可任意指定。varmyarray=newArray(8);//创建数组,存储8个数据。 注意:1.创

    2022年5月18日
    47
  • 计算机一志愿保护,如何判断学校是否保护一志愿!?那些保护一志愿的学校都……

    计算机一志愿保护,如何判断学校是否保护一志愿!?那些保护一志愿的学校都……保护第一志愿,顾名思义就是保护以第一志愿报考该校的学生,即一志愿学生相对于调剂考生优先录取。不保护第一志愿的院校,是指这些调剂生和一志愿报考本专业的学生一起复试,再统一排名,统一录取。但由于每年自划线的高校基本上先于其他院校复试,导致考研调剂时,可能有一批本科是211/985的考生考研失利,选择调剂到那些有名额的211院校或者普通一本院校,有些接受调剂的学校更倾向于接收211/985院校的调剂生,…

    2022年6月7日
    77

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号