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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python判断数字四舍五入

    Python判断数字四舍五入

  • padStart()微信浏览器不支持

    padStart()微信浏览器不支持记录下今天写微信小程序遇见的问题。在处理后台返回的时间戳时使用了padStart()方法,在手机上中预览都没有问题,便提交了代码,直到在pc端打开小程序时,页面没有数据,随后了解到微信内置内核不支持padStart()方法,所以处理不了数据,才会报错。再转换时间戳可以用uptime2(num){letdate=newDate(num); letdatetime=date.getFullYear() +”-” +((date.getMonth()+1)>

  • lombok几个基本注解的使用@Data@AllArgsConstructor@NoArgsConstructor@Builder

    lombok几个基本注解的使用@Data@AllArgsConstructor@NoArgsConstructor@Builderlombok是一款在java开发中简洁化代码十分有用的插件工具,这篇博客对较为常用的几种注解进行记录,分享学习心得。使用lombok注解,目的和作用就在于不用再去写经常反复去写的(如Getter,Setter,Constructor等)一些代码了。首先,用到的几个注解:@Data使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toS…

    2022年10月18日
  • matlab经典版_魔方矩阵matlab

    matlab经典版_魔方矩阵matlabfs=44100;dt=1/fs;T16=0.125;t16=[0:dt:T16];[tempk]=size(t16);t4=linspace(0,4*T16,4*k);t8=linspace(0,2*T16,2*k);[tempi]=size(t4);[tempj]=size(t8);mod4=(t4.^4).*exp(-30*(t4.^0.5));mo…

  • 多进程单线程模型与单进程多线程模型之争

    多进程单线程模型与单进程多线程模型之争

    2021年10月10日
  • 半监督学习之MixMatch

    半监督学习之MixMatch半监督学习之MixMatchMixMatchUnsupervisedDataAugmentationforConsistencyTraining半监督深度学习训练和实现小TricksMixMatch:AHolisticApproachtoSemi-SupervisedLearning1.解读超强半监督学习MixMatch此方法仅用少量的标记数据,就使半监督学习的预测精度逼近监督学习。自洽正则化(ConsistencyRegularization)。自洽正则化的

    2022年10月27日

发表回复

您的电子邮箱地址不会被公开。

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