yl1.cpp

来自「三次样条插值逼近函数」· C++ 代码 · 共 50 行

CPP
50
字号
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

void main()
{
	float x[30],y[30],m[30],h[29],u[29],v[29],d[30],b[30],r[29],l[30],s[30];
	int i,N;
	printf("Please input the number of the insert point\n");
	scanf("%d",&N);
	printf("Please input parametres of the insert point:\n");
    for(i=0;i<N;i++)
	{
		scanf("%f",&x[i]);
		scanf("%f",&y[i]);
	}
	printf("Please input intial facto:\n");
	scanf("%f",&m[0]);
	scanf("%f",&m[N-1]);
	for(i=1;i<=N-1;i++)
		h[i-1]=x[i]-x[i-1];
	for(i=1;i<=N-2;i++)
	{
		u[i-1]=h[i-1]/(h[i-1]+h[i]);
		v[i]=1-u[i-1];
	}
	u[N-2]=v[0]=0;
	b[0]=b[N-1]=1;
	for(i=1;i<N-1;i++)
		b[i]=2;
	d[0]=m[0];
	d[N-1]=m[N-1];
	for(i=1;i<=N-2;i++)
		d[i]=6/(h[i-1]+h[i])*(((y[i+1]-y[i])/h[i])-((y[i]-y[i-1])/h[i-1]));
	l[0]=b[0];
	s[0]=d[0]/l[0];
	for(i=1;i<N;i++)
	{
		r[i-1]=v[i-1]/l[i-1];
		l[i]=b[i]-u[i-1]*r[i-1];
		s[i]=(d[i]-u[i-1]*s[i-1])/l[i];
	}
	m[N-1]=s[N-1];
	for(i=N-2;i>=0;i--)
		m[i]=s[i]-r[i]*m[i+1];
	for(i=0;i<N;i++)
		printf("%f\n",m[i]);
}

⌨️ 快捷键说明

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