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


相关推荐

  • pycharm有中文插件吗_pycharm中英文切换

    pycharm有中文插件吗_pycharm中英文切换打开file——settings——plugins:1-翻译插件(Translation),哈哈,好用吧,再也不用去用词典翻译了,直接在pycharm里就可以翻译安装:效果:2-汉化pycharm,实在不喜欢这些英语的,把它全部汉化安装:效果:(哈哈,还担心英语不好吗)…

    2022年8月26日
    3
  • 配置注册表数据库损坏

    配置注册表数据库损坏

    2021年9月29日
    51
  • 在HTML中添加背景音乐[通俗易懂]

    在HTML中添加背景音乐[通俗易懂]方法一:在源代码中编写以下几句代码将能实现在HTML网页内添加背景音乐; 你的浏览器版本太低,不支持audi

    2022年7月25日
    5
  • 家庭影院.液晶电视.液晶电视连接电脑全功略续[通俗易懂]

    家庭影院.液晶电视.液晶电视连接电脑全功略续[通俗易懂]家庭影院.液晶电视.液晶电视连接电脑全功略续草木瓜20090201一、前言 《家庭影院.液晶电视.液晶电视连接电脑全功略》http://blog.csdn.net/liwei_cmg/archive/2008/11/28/3402883.aspx 一文中介绍了使用三星32A550P1R,作为电脑外接显示器+音箱的方法。其中中提到了 使用1366*768的分辨率。32A550物理

    2022年10月19日
    0
  • 宝塔面板安装nginx失败_卸载宝塔网站防火墙

    宝塔面板安装nginx失败_卸载宝塔网站防火墙解压并转到目录下tar-zxvfnginx-1.9.15.tar.gzcdnginx-1.9.15设置一下配置信息./configure–prefix=/usr/local/nginx,或者不执行此步,直接默认配置编译安装makemakeinstallmake的过程是把各种语言写的源码文件,变成可执行文件和各种库文件;makeinstall是把这些编译出来的可执行文件和库文…

    2022年9月3日
    3
  • 不是单组分组函数

    不是单组分组函数问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

    2022年6月30日
    35

发表回复

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

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