spline.c

来自「适合大型数值计算代码 现在网络上已经找不到了 购买需要20$」· C语言 代码 · 共 36 行

C
36
字号
#define NRANSI#include "nrutil.h"void spline(float x[], float y[], int n, float yp1, float ypn, float y2[]){	int i,k;	float p,qn,sig,un,*u;	u=vector(1,n-1);	if (yp1 > 0.99e30)		y2[1]=u[1]=0.0;	else {		y2[1] = -0.5;		u[1]=(3.0/(x[2]-x[1]))*((y[2]-y[1])/(x[2]-x[1])-yp1);	}	for (i=2;i<=n-1;i++) {		sig=(x[i]-x[i-1])/(x[i+1]-x[i-1]);		p=sig*y2[i-1]+2.0;		y2[i]=(sig-1.0)/p;		u[i]=(y[i+1]-y[i])/(x[i+1]-x[i]) - (y[i]-y[i-1])/(x[i]-x[i-1]);		u[i]=(6.0*u[i]/(x[i+1]-x[i-1])-sig*u[i-1])/p;	}	if (ypn > 0.99e30)		qn=un=0.0;	else {		qn=0.5;		un=(3.0/(x[n]-x[n-1]))*(ypn-(y[n]-y[n-1])/(x[n]-x[n-1]));	}	y2[n]=(un-qn*u[n-1])/(qn*y2[n-1]+1.0);	for (k=n-1;k>=1;k--)		y2[k]=y2[k]*y2[k+1]+u[k];	free_vector(u,1,n-1);}#undef NRANSI

⌨️ 快捷键说明

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