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

📄 曲线拟合.cpp

📁 一个用VC写的曲线拟合程序,可用在数值分析计算方法方面
💻 CPP
字号:
//曲线拟合,

#include "stdio.h"
#include "math.h"
#define num 10


float neiji(float b[num],float c[num])      //内积函数
{  int p;
   float nj=0;
    for (p=1;p<num;p++)
          nj+=c[p]*b[p];
    return nj;
}
float s[num],x[num],y[num],fai[num][num],afa[num],beida[num],a[num],xfai[num],yd[num],max,pcpfh;


void main()
{ int i,j,k,n,index,flag;
  char conti;
  conti=' ';
 

  
    printf("请输入已知点的个数n=\n");
    scanf("%d",&n);

	printf("请输入x和y:");
   for(i=1;i<=n;i++)
   {   printf("x[%d]=",i);
	   scanf("%f",&x[i]);
       printf("y[%d]=",i);
	   scanf("%f",&y[i]);
   }   
while(conti==' ')
{	 printf("请输入拟和次数=");
    scanf("%d",&index);  
    pcpfh=0;
   afa[1]=0;
   a[0]=0;
   for(i=1;i<=n;i++)
   {afa[1]+=x[i];
    a[0]+=y[i];
	fai[0][i]=1;
   }
   afa[1]=afa[1]/n;
   a[0]=a[0]/n;   
   
   for (i=1;i<=n;i++)
   {
    fai[1][i]=x[i]-afa[1];
   }    

   a[1]=neiji(fai[1],y)/neiji(fai[1],fai[1]);
 
   for(k=1;k<index;k++)
   {   for(i=1;i<=n;i++)
           xfai[i]=x[i]*fai[k][i];

	   afa[k+1]=neiji(fai[k],xfai)/neiji(fai[k],fai[k]);
        beida[k]=neiji(fai[k],fai[k])/neiji(fai[k-1],fai[k-1]);
	   for(j=1;j<=n;j++)
	        fai[k+1][j]=(x[j]-afa[k+1])*fai[k][j]-beida[k]*fai[k-1][j];
      a[k+1]=neiji(fai[k+1],y)/neiji(fai[k+1],fai[k+1]);
	 
   }
   
   printf("%d次拟和结果为\n",index);
   for(i=0;i<=index;i++)   
    printf("a[%d]=%f\n",i,a[i]);
   for(i=1;i<=index;i++)
	   printf("afa[%d]=%f\n",i,afa[i]);
   for(i=1;i<index;i++)
       printf("beida[%d]=%f\n",i,beida[i]);   

   for(i=1;i<=n;i++)
   {	for(k=0;k<=index;k++)
	      s[i]+=a[k]*fai[k][i];
       yd[i]=float(fabs(y[i]-s[i]));
	   pcpfh+=yd[i]*yd[i];
       s[i]=0;
   }

   max=0;
   for(i=1;i<=n;i++)
	   if(yd[i]>max)
	   {max=yd[i];
	    flag=i;
	   }

   
   printf("当x=%f时,偏差最大=%f,偏差平方和为%f\n",x[flag],max,pcpfh);

   printf("继续拟和请按space,按其他键退出");

   conti=getchar();
   conti=getchar();

  }
}

⌨️ 快捷键说明

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