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

📄 dftint.c

📁 适合大型数值计算代码 现在网络上已经找不到了 购买需要20$
💻 C
字号:
#include <math.h>#define NRANSI#include "nrutil.h"#define M 64#define NDFT 1024#define MPOL 6#define TWOPI (2.0*3.14159265)void dftint(float (*func)(float), float a, float b, float w, float *cosint,	float *sinint){	void dftcor(float w, float delta, float a, float b, float endpts[],		float *corre, float *corim, float *corfac);	void polint(float xa[], float ya[], int n, float x, float *y, float *dy);	void realft(float data[], unsigned long n, int isign);	static int init=0;	int j,nn;	static float aold = -1.e30,bold = -1.e30,delta,(*funcold)(float);	static float data[NDFT+1],endpts[9];	float c,cdft,cerr,corfac,corim,corre,en,s;	float sdft,serr,*cpol,*spol,*xpol;	cpol=vector(1,MPOL);	spol=vector(1,MPOL);	xpol=vector(1,MPOL);	if (init != 1 || a != aold || b != bold || func != funcold) {		init=1;		aold=a;		bold=b;		funcold=func;		delta=(b-a)/M;		for (j=1;j<=M+1;j++)			data[j]=(*func)(a+(j-1)*delta);		for (j=M+2;j<=NDFT;j++)			data[j]=0.0;		for (j=1;j<=4;j++) {			endpts[j]=data[j];			endpts[j+4]=data[M-3+j];		}		realft(data,NDFT,1);		data[2]=0.0;	}	en=w*delta*NDFT/TWOPI+1.0;	nn=IMIN(IMAX((int)(en-0.5*MPOL+1.0),1),NDFT/2-MPOL+1);	for (j=1;j<=MPOL;j++,nn++) {		cpol[j]=data[2*nn-1];		spol[j]=data[2*nn];		xpol[j]=nn;	}	polint(xpol,cpol,MPOL,en,&cdft,&cerr);	polint(xpol,spol,MPOL,en,&sdft,&serr);	dftcor(w,delta,a,b,endpts,&corre,&corim,&corfac);	cdft *= corfac;	sdft *= corfac;	cdft += corre;	sdft += corim;	c=delta*cos(w*a);	s=delta*sin(w*a);	*cosint=c*cdft-s*sdft;	*sinint=s*cdft+c*sdft;	free_vector(cpol,1,MPOL);	free_vector(spol,1,MPOL);	free_vector(xpol,1,MPOL);}#undef M#undef NDFT#undef MPOL#undef TWOPI#undef NRANSI

⌨️ 快捷键说明

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