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

📄 三次样条插值.cpp

📁 数值计算各算法的程序,包括:牛顿迭代法,超松驰迭代法,微分法等.对于初学数值分析这门课程的人有很大的帮助.
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#define n 11
double fun(double xx,double y1[2],double x[n],double y[n])
{
	int i;
	double h[n-1],mu[n-1],beita[n],neimta[n],d[n];
	double s;
	for(i=0;i<n-1;i++)
	{
		h[i]=x[i+1]-x[i];
	}
	for(i=1;i<n-1;i++)
	{
		mu[i]=h[i-1]/(h[i-1]+h[i]);
		neimta[i]=1-mu[i];
		d[i]=((y[i+1]-y[i])/(x[i+1]-x[i])-(y[i]-y[i-1])/(x[i]-x[i-1]))
			/(x[i+1]-x[i-1])*6;
	}
	d[0]=((y[1]-y[0])/(x[1]-x[0])-y1[0])/(x[1]-x[0])*6;
	d[n-1]=(y1[1]-(y[n-1]-y[n-2])/(x[n-1]-x[n-2]))/(x[n-1]-x[n-2])*6;
	beita[0]=2;
	neimta[0]=1; 
	mu[n-1]=1;
	beita[n-1]=2;
	for(i=1;i<n;i++)
	{
		mu[i]=mu[i]/beita[i-1];
		beita[i]=2-mu[i]*neimta[i-1];
		d[i]=d[i]-mu[i]*d[i-1];
	}
	d[n-1]=d[n-1]/beita[n-1];
	for(i=n-2;i>=0;i--)
	{
		d[i]=(d[i]-neimta[i]*d[i-1])/beita[i];
	}
	for(i=0;i<n-1;i++)
	{
		if((xx>=x[i])&&(xx<=x[i+1]))
		{
			xx=xx-x[i];
			s=y[i]+((y[i+1]-y[i])/h[i]-(d[i]/3+d[i+1]/6)*h[i])*xx
				+d[i]/2*pow(xx,2)+(d[i+1]-d[i])*pow(xx,3)/(6*h[i]);
		}
	}
	return(s);
}

void main()
{
	double x[n]={0,1,2,3,4,5,6,7,8,9,10};
	double y[n]={2.51,3.30,4.04,4.70,5.22,5.54,5.78,5.40,5.57,5.70,5.80};
	double y1[2]={0.8,0.2};
	int i;
	double s;
	double xx;
	for(i=1;i<10;i++)
	{
		xx=i+0.5;
		s=fun(xx,y1,x,y);
		cout<<"s("<<xx<<")="<<s<<endl;
	}
}
/*程序结果:
s(1.5)=3.67826
s(2.5)=4.38339
s(3.5)=4.97957
s(4.5)=5.38581
s(5.5)=5.71471
s(6.5)=5.54721
s(7.5)=5.4417
s(8.5)=5.67926
s(9.5)=5.71538*/


⌨️ 快捷键说明

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