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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 下拉列表框DropDownList绑定Dictionary泛型类

    下拉列表框DropDownList绑定Dictionary泛型类DropDownList绑定Dictionary泛型类定义一个Dictionary泛型类///&lt;summary&gt;   ///产品类型   ///&lt;/summary&gt;   ///&lt;returns&gt;&lt;/returns&gt;   publicDictionary&lt;string,string&gt;productType() …

    2022年10月8日
  • 最新Anaconda3的安装配置及使用教程(详细过程)

    最新Anaconda3的安装配置及使用教程(详细过程)最新Anaconda3安装使用Anaconda下载方式一:官网下载方式二:清华镜像下载(推荐)Anaconda安装Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项Anaconda+Jupyter基本上已经是大部分机器学习/数据分析等开发者标配的开发环境,不多介绍,直接进去正题:Anaconda下载方式一:官网下载下载地址传送门:官网首页:https://www.anaconda.com/官网下载页:https://www

    2022年5月8日
  • JSON之解析

    JSON之解析

    2021年8月24日
  • Mysql慢查询_mysql并发查询慢

    Mysql慢查询_mysql并发查询慢慢查询日志概念MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数…

    2022年10月9日
  • set和list转换_list和set

    set和list转换_list和setset集合元素唯一,无序;list集合元素可以重复,有序。1、set转list:数据保持不变,顺序发生变化,可以使用Collections.sort进行排序(Collections.shuffle随机排序,Collections.reverse反转顺序)。2、list转set:去除重复数据,只保留一个。转成linkedHashSet时,原顺序不变;转成treeSet可以排序

    2022年10月10日
  • c语言qq聊天刷屏代码大全,QQ聊天刷屏脚本 达人分享技巧

    教大家自己编写一个QQ聊天刷屏的脚本,几步就可以搞定哦。操作方法01点击电脑左下角的开始菜单,选择记事本,新建一个记事本文件。02在记事本中输入以下代码:SetWshShell=WScript.CreateObject(“WScript.Shell”)WshShell.AppActivate”wendy”fori=1to10WScript.Sleep500WshShell.SendK…

    2022年4月9日

发表回复

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

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