|
在对话框上建立两个按钮和两个ListBox数据显示框.
一个是从excel表中读出数据,并在一个ListBox里显示出excel表中的内容,另外一个按钮是从excel表中读出的数据,实现最小二乘法的计算,并把结果在另外一个ListBox中显示.
因为我是第一次利用Visual C++中的MFC框架,很多东西都不明白,在网上也看了不少的文章,可是总是出错.希望哪位老师给予帮助.
计算程序我已经些好了.附上
#include<stdio.h>
#include<math.h>
#define N 1000000
#define H 100
#define E 0.0001
float A[H][H];
float _A[H][H];
float x[H];
float x0[H];
float A_A[H][H];
float b[H];
float B[H];
int n;
int m;
float Sumax(int n, int i,float x0[])
{
int j;
float result;
result=0;
for(j=0;j<n;j++)
result+=A_A[i][j]*x0[j];
return result;
}
float Maxof(float x[],float x0[],int n)
{
int i;
float result;
result=0;
for(i=0;i<n;i++)
{
if(result<fabs(x[i]-x0[i]))
result=fabs(x[i]-x0[i]);
}
return result;
}
void Jacobiagrithm(float b[],int n,float x[],float e)
{
int i,k;
float R;
for(i=0;i<n;i++)
x0[i]=0;
for(k=1;k<=N;k++)
{
for(i=0;i<n;i++)
x[i]=x0[i]+(b[i]-Sumax(n,i,x0))/A_A[i][i];
R=Maxof(x,x0,n);
if(R<=e) return ;
for(i=0;i<n;i++)
x0[i]=x[i];
}
}
void Init ()
{
int i,j;
float sum;
scanf("%d",&m);
scanf("%d",&n);
for( i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%f",&A[i][j]);
for(i=0;i<m;i++)
scanf("%f",&b[i]);
// for(i=0;i<m;i++)
// A[i][j]=1;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
_A[i][j]=A[j][i];
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
sum=0;
for(int k=0;k<m;k++)
if(m>=n)
sum+=_A[i][k]*A[k][j];
else
sum+=A[k][j]*_A[i][k];
A_A[i][j]=sum;
}
for(i=0;i<m;i++)
{
sum=0;
for(int k=0;k<m;k++)
if(m>=n)
sum+=_A[i][k]*b[k];
else
sum+=b[k]*_A[i][k];
B[i]=sum;
}
Jacobiagrithm(B,n,x,E);
for(i=0;i<n;i++)
printf("%f ",x[i]);
}
void main()
{
Init();
} |
|