80分急求:用c++写成的最小二乘法的源代码,该怎么处理

80分急求:用c++写成的最小二乘法的源代码
80分急求:用c++写成的最小二乘法的源代码   问题描述:本人要做一个最小2乘法的曲线拟合的vc程序,现在已经得到了在假定坐标轴下面的5个点的坐标,分别存放在x[],y[]数组里面,现在需要根据已知点的坐标求出曲线拟合的2次多项式的3个系数,本来想用matlab去拟合的,可是在vc中如何使用matlab的polyfit函数不太会用,于是自己想找一个c++的最小二乘法的曲线拟合的函数自己调用,希望有过此类编程经验的高手能够帮忙救急,能够提供c语言的最小2乘法的函数,最好是纯c++(不是mfc代码),决不吝啬分数,解决即给分,谢谢了!!!!

------解决方案--------------------

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <process.h>
#define N 5 //N个点
#define T 3 //T次拟合
#define W 1 //权函数
#define PRECISION 0.00001
float pow_n(float a,int n)
{
int i;
if(n==0)
return(1);
float res=a;
for(i=1;i <n;i++)
{
res*=a;
}
return(res);
}
void mutiple(float a[][N],float b[][T+1],float c[][T+1])
{
float res=0;
int i,j,k;
for(i=0;i <T+1;i++)
for(j=0;j <T+1;j++)
{
res=0;
for(k=0;k <N;k++)
{
res+=a[i][k]*b[k][j];
c[i][j]=res;
}
}
}
void matrix_trans(float a[][T+1],float b[][N])
{
int i,j;
for(i=0;i <N;i++)
{
for(j=0;j <T+1;j++)
{
b[j][i]=a[i][j];
}
}
}
void init(float x_y[][2],int n)
{
int i;
printf( "请输入%d个已知点:\n ",N);
for(i=0;i <n;i++)
{
printf( "(x%d y%d): ",i,i);
scanf( "%f %f ",&x_y[i][0],&x_y[i][1]);
}
}
void get_A(float matrix_A[][T+1],float x_y[][2],int n)
{
int i,j;
for(i=0;i <N;i++)
{
for(j=0;j <T+1;j++)
{
matrix_A[i][j]=W*pow_n(x_y[i][0],j);
}
}
}
void print_array(float array[][T+1],int n)
{
int i,j;
for(i=0;i <n;i++)
{
for(j=0;j <T+1;j++)
{
printf( "%-g ",array[i][j]);
}
printf( "\n ");
}
}
void convert(float argu[][T+2],int n)
{
int i,j,k,p,t;
float rate,temp;
for(i=1;i <n;i++)
{
for(j=i;j <n;j++)
{
if(argu[i-1][i-1]==0)
{
for(p=i;p <n;p++)
{
if(argu[p][i-1]!=0)
break;
}
if(p==n)
{
printf( "方程组无解!\n ");
exit(0);
}
for(t=0;t <n+1;t++)
{
temp=argu[i-1][t];
argu[i-1][t]=argu[p][t];
argu[p][t]=temp;
}
}
rate=argu[j][i-1]/argu[i-1][i-1];
for(k=i-1;k <n+1;k++)
{
argu[j][k]-=argu[i-1][k]*rate;
if(fabs(argu[j][k]) <=PRECISION)
argu[j][k]=0;
}
}
}
}
void compute(float argu[][T+2],int n,float root[])
{
int i,j;
float temp;
for(i=n-1;i> =0;i--)
{
temp=argu[i][n];
for(j=n-1;j> i;j--)
{
temp-=argu[i][j]*root[j];
}
root[i]=temp/argu[i][i];
}
}
void get_y(float trans_A[][N],float x_y[][2],float y[],int n)
{
int i,j;
float temp;
for(i=0;i <n;i++)
{
temp=0;
for(j=0;j <N;j++)
{
temp+=trans_A[i][j]*x_y[j][1];
}
y[i]=temp;
}
}
void cons_formula(float coef_A[][T+1],float y[],float coef_form[][T+2])
{
int i,j;
for(i=0;i <T+1;i++)
{
for(j=0;j <T+2;j++)
{
if(j==T+1)
coef_form[i][j]=y[i];
else
coef_form[i][j]=coef_A[i][j];
}
}
}
void print_root(float a[],int n)
{
int i,j;