📄 曲线拟合最小二乘法.cpp
字号:
#include<stdio.h>
#include<math.h>
#define n 6
#define m 3
double x[n+1]={0,0,1,2,3,4,5};
double Y[n+1]={0,5,2,1,1,2,3};
void main( )
{int i,j,k;
double l;
double a[n+1][n+1],ata[m+1][n+1],aty[m+1],c[m+1],A[m+1][m+2];
for(i=1;i<=n;i++)
{a[i][1]=1;
for(j=2;j<=m;j++)
a[i][j]=pow(x[i],j-1);}
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{ata[i][j]=0;
for(k=1;k<=n;k++)
ata[i][j]+=a[k][i]*a[k][j];}
for(i=1;i<=m;i++)
{aty[i]=0;
for(k=1;k<=n;k++)
aty[i]+=a[k][i]*Y[k];}
for(i=1;i<=m;i++)
{A[i][m+1]=aty[i];
for(j=1;j<=m;j++)
A[i][j]=ata[i][j];}
for(k=1;k<=m-1;k++)
for(i=k+1;i<=m;i++)
{l=A[i][k]/A[k][k];
for(j=k+1;j<m;j++)
{A[i][j]-=l*A[k][j];}}
for(k=m;k>=1;k--)
{c[k]=A[k][m+1];
for(j=k+1;j<=m;j++)
{c[k]-=A[k][j]*c[j];}
c[k]=c[k]/A[k][k];}
for(i=1;i<=m;i++)
printf("\nc[%d]=%f",i,c[i]);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -