⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 savgol.cpp

📁 平滑滤波器
💻 CPP
字号:
#include <cmath>#include "nr.h"using namespace std;void NR::savgol(Vec_O_DP &c, const int np, const int nl, const int nr,	const int ld, const int m){	int j,k,imj,ipj,kk,mm;	DP d,fac,sum;	if (np < nl+nr+1 || nl < 0 || nr < 0 || ld > m || nl+nr < m)		nrerror("bad args in savgol");	Vec_INT indx(m+1);	Mat_DP a(m+1,m+1);	Vec_DP b(m+1);	for (ipj=0;ipj<=(m << 1);ipj++) {		sum=(ipj ? 0.0 : 1.0);		for (k=1;k<=nr;k++) sum += pow(DP(k),DP(ipj));		for (k=1;k<=nl;k++) sum += pow(DP(-k),DP(ipj));		mm=MIN(ipj,2*m-ipj);		for (imj = -mm;imj<=mm;imj+=2) a[(ipj+imj)/2][(ipj-imj)/2]=sum;	}	ludcmp(a,indx,d);	for (j=0;j<m+1;j++) b[j]=0.0;	b[ld]=1.0;	lubksb(a,indx,b);	for (kk=0;kk<np;kk++) c[kk]=0.0;	for (k = -nl;k<=nr;k++) {		sum=b[0];		fac=1.0;		for (mm=1;mm<=m;mm++) sum += b[mm]*(fac *= k);		kk=(np-k) % np;		c[kk]=sum;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -