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

📄 ʵ

📁 数据结构4
💻
字号:
#include <math.h>
#include <iostream.h>

const int N=50;
float x[N];
float y[N];

void input(int m)
{
	for(int i=0;i<m;i++)
	{
		cout<<"x["<<i+1<<"]=";
		cin>>x[i];
		cout<<"y["<<i+1<<"]=";
		cin>>y[i];
	}
}

void main()
{
	float *Approx(int,int);
	int m;
	cout<<"请输入节点个数:"<<endl;
	cin>>m;
	input(m);
	float *a=Approx(m,2);
	for(int i=0;i<=2;i++)
		cout<<"a["<<i<<"]="<<a[i]<<endl;
}

float *Approx(int m,int n)
{
	float *c,*a;
	float power(int,float);
	float *ColPivot(float *,int);
	c=new float[(n+1)*(n+2)];
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<=n;j++)
		{
			*(c+i*(n+2)+j)=0.0;
			for(int t=0;t<m;t++)
				*(c+i*(n+2)+j)+=power(i+j,x[t]);
		}
		*(c+i*(n+2)+n+1)=0.0;
		for(j=0;j<m;j++)
			*(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);
	}
	a=ColPivot((float *)c,n+1);
	return a;
}

float *ColPivot(float *a,int n)
{
	int i,j,t,k;
	float *x,*c,p;
	x=new float[n];
	c=new float[n*(n+1)];
	for(i=0;i<n;i++)
		for(j=0;j<=n;j++)
			*(c+i*(n+1)+j)=(*(a+i*(n+1)+j));
		for(i=0;i<=n-2;i++)
		{
			k=i;
			for(j=i+1;j<n;j++)
				if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
					k=j;
			if(k!=i)
				for(j=i;j<=n;j++)			
				{
					p=*(c+i*(n+1)+j);
					*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
					*(c+k*(n+1)+j)=p;
				}
			for(j=i+1;j<n;j++)
			{
				p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
				for(t=i;t<n;t++)
					*(c+j*(n+1)+t)=*(c+j*(n+1)+t)-p*(*(c+i*(n+1)+t));
				*(c+j*(n+1)+n)-=*(c+i*(n+1)+n)*p;
			}
		}
		for(i=n-1;i>=0;i--)
		{
			for(j=n-1;j>=i+1;j--)
				(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
			x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));
		}
		delete []c;
		return x;
}

float power(int i,float v)
{
	float a=1.0;
	while(i--)
		a*=v;
	return a;
}


⌨️ 快捷键说明

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