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

📄 nihe.c

📁 主要实现了计算方法中的曲线拟合
💻 C
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 20
void input(double a[N],int n)
{
	int i;
	for(i=0;i<=n;i++)
	{
		scanf("%lf",&a[i]);
	}
}
void gauss(double a[N][N+1],int p)
{
	int i,j,k,m=0,n;
	double t,s=0.0,ep;
	n=p-1;
  for(k=1;k<n;k++)   //大循环
  {
	 ep=a[k][k];
	 for(i=k;i<=n;i++)
	 {
		 if(fabs(a[i][k])>ep)
		 {				 
			 ep=fabs(a[i][k]);
		 		m=i;	
		 }
	 }
		for(j=k;j<=n+1;j++)
		{
			t=a[m][j]; a[m][j]=a[k][j];a[k][j]=t;
		} //换行
		for(i=k+1;i<=n;i++)
		{
			a[i][k]=a[i][k]/a[k][k];
				for(j=k+1;j<=n+1;j++)
				{
					a[i][j]=a[i][j]-a[i][k]*a[k][j];
				}
					a[i][k]=0;
		}
  }
 printf("拟合后的多项式为: \n");
 printf("f(x)= ");
 a[n][n+1]=a[n][n+1]/a[n][n];
  for(i=n-1;i>0;i--)            //求根
  { 
	  for(j=i+1;j<=n;j++)
	  {  
		  s=s+a[i][j]*a[j][n+1];	
	  }
	  a[i][n+1]=(a[i][n+1]-s)/a[i][i];
			   s=0;
  }
 for(i=1;i<=n;i++)
  {	k=i-1;
	  if(a[i][n+1]>0)
	  {
		  printf("%fX^%d+",a[i][n+1],k);
	  }
	  else if(a[i][n+1]<0)
	  {
		  printf("\b");
		  printf("%fX^%d+",a[i][n+1],k);
	  }
  }
  printf("\b");
  printf("\n\n");
}
void nihe(double a[N],double b[N],int m,int n)
{
	int i,j,k=0;
	double A[N][N+1],S[N]={0},T[N]={0};
	for(i=0;i<=n;i++)
	{
		for(k=0;k<=2*m;k++)
		{
			S[k]=S[k]+pow(a[i],k);
			T[k]=T[k]+b[i]*(pow(a[i],k));
		}
	}
	for(i=1;i<=m+1;i++)
	{
		for(j=1;j<=m+1;j++)
		{
			A[i][j]=S[i+j-2];
		}
	}
	for(i=0;i<=m+2;i++)
	{
		A[0][i]=0;
		A[i][0]=0;
		A[i+1][m+2]=T[i];
	}
	gauss(A,m+2);
}
void main()
{
	int n,type;
	double x[N],y[N];
	printf("请输入阶数:\n");
	scanf("%d",&n);
	printf("请输入x[N]:\n");
	input(x,n);
	printf("请输入y[N]:\n");
	input(y,n);
AAA:printf("请选择拟和多项式的最高次数:(次数小于 0 时退出\n");
	scanf("%d",&type);
	if(type>=0)
	{
		nihe(x,y,type,n);
		goto AAA;
	}
	else
		exit(0);
}

⌨️ 快捷键说明

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