那里有最小二乘法的介绍及程序?

blackrye 2002-12-27 08:21:58
rt
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackrye 2002-12-29
  • 打赏
  • 举报
回复
哪里有关于最小二乘法的一些介绍?
winco 2002-12-29
  • 打赏
  • 举报
回复
对,任何一本数值分析上面都有
pick 2002-12-29
  • 打赏
  • 举报
回复
在一些《数值分析》书上一般都有介绍
sea_lover 2002-12-27
  • 打赏
  • 举报
回复
up
renhit 2002-12-27
  • 打赏
  • 举报
回复
给你贴个例子:(Turboc2.0)


#include "bmaqr.c"
#include "stdio.h"
#include "agmqr.c"
main()
{ int i,m,n;
static double a[4][3]={ {1.0,1.0,-1.0},{2.0,1.0,0.0},
{1.0,-1.0,0.0},{-1.0,2.0,1.0}};
static double b[4]={2.0,-3.0,1.0,4.0};
static double q[4][4];
m=4; n=3;
i=agmqr(a,m,n,b,q);
if (i!=0)
{ for (i=0; i<=2; i++)
printf("x(%d)=%13.7e\n",i,b[i]);
printf("\n");
printf("MAT Q IS:\n");
for (i=0; i<=3; i++)
printf("%13.7e %13.7e %13.7e %13.7e\n",
q[i][0],q[i][1],q[i][2],q[i][3]);
printf("\n");
printf("MAT R IS:\n");
for (i=0; i<=3; i++)
printf("%13.7e %13.7e %13.7e\n",
a[i][0],a[i][1],a[i][2]);
}
}

//
#include "math.h"
#include "stdio.h"
int bmaqr(a,m,n,q)
int m,n;
double a[],q[];
{ int i,j,k,l,nn,p,jj;
double u,alpha,w,t;
if (m<n)
{ printf("fail\n"); return(0);}
for (i=0; i<=m-1; i++)
for (j=0; j<=m-1; j++)
{ l=i*m+j; q[l]=0.0;
if (i==j) q[l]=1.0;
}
nn=n;
if (m==n) nn=m-1;
for (k=0; k<=nn-1; k++)
{ u=0.0; l=k*n+k;
for (i=k; i<=m-1; i++)
{ w=fabs(a[i*n+k]);
if (w>u) u=w;
}
alpha=0.0;
for (i=k; i<=m-1; i++)
{ t=a[i*n+k]/u; alpha=alpha+t*t;}
if (a[l]>0.0) u=-u;
alpha=u*sqrt(alpha);
if (fabs(alpha)+1.0==1.0)
{ printf("fail\n"); return(0);}
u=sqrt(2.0*alpha*(alpha-a[l]));
if ((u+1.0)!=1.0)
{ a[l]=(a[l]-alpha)/u;
for (i=k+1; i<=m-1; i++)
{ p=i*n+k; a[p]=a[p]/u;}
for (j=0; j<=m-1; j++)
{ t=0.0;
for (jj=k; jj<=m-1; jj++)
t=t+a[jj*n+k]*q[jj*m+j];
for (i=k; i<=m-1; i++)
{ p=i*m+j; q[p]=q[p]-2.0*t*a[i*n+k];}
}
for (j=k+1; j<=n-1; j++)
{ t=0.0;
for (jj=k; jj<=m-1; jj++)
t=t+a[jj*n+k]*a[jj*n+j];
for (i=k; i<=m-1; i++)
{ p=i*n+j; a[p]=a[p]-2.0*t*a[i*n+k];}
}
a[l]=alpha;
for (i=k+1; i<=m-1; i++)
a[i*n+k]=0.0;
}
}
for (i=0; i<=m-2; i++)
for (j=i+1; j<=m-1;j++)
{ p=i*m+j; l=j*m+i;
t=q[p]; q[p]=q[l]; q[l]=t;
}
return(1);
}

//
#include "stdlib.h"
int agmqr(a,m,n,b,q)
int m,n;
double a[],b[],q[];
{ int i,j;
double d,*c;
extern int bmaqr();
c=malloc(n*sizeof(double));
i=bmaqr(a,m,n,q);
if (i==0) { free(c); return(0);}
for (i=0; i<=n-1; i++)
{ d=0.0;
for (j=0; j<=m-1; j++)
d=d+q[j*m+i]*b[j];
c[i]=d;
}
b[n-1]=c[n-1]/a[n*n-1];
for (i=n-2; i>=0; i--)
{ d=0.0;
for (j=i+1; j<=n-1; j++)
d=d+a[i*n+j]*b[j];
b[i]=(c[i]-d)/a[i*n+i];
}
free(c); return(1);
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧