帮忙啊,急求最小二乘法算法程序

adashm 2005-04-20 09:15:25
我要对二元一次方程y=ax1+bx2进行a,b系数估计,谁能给出源程序,急等
...全文
264 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fisher_kevin 2005-04-21
  • 打赏
  • 举报
回复
这是我编的最小二乘法多项式拟合的函数,我正在做,这个函数可能再用结构体当参数调用是有一些问题,修改一下做二次曲线拟合没有问题。不用解方程组,用正交法多项式法拟合。如果还解决不了你的问题的话,强烈建议你去查查《计算机常用算法》


struct stripe
{
double x_axis;
double y_axis;
};
struct stripe ori[],wave_2[],wave_3[];

void fit(struct stripe a[],double c[],int n,int m) /*输入数组(峰值),输出数组,拟合点数,阶数*/
{
double d[10];
double b[10];
double t[10];
double s[10];
double q[10];
double al[10];
double be[10];
double x,y,z;
int i,j,k,l,p;

/*第零级*/
b[0]=1;
d[0]=n;
y=0;
x=0;
for(i=0;i<n;i++)
{
x=x+a[i].x_axis;
y=y+a[i].y_axis;
}
q[0]=y/d[0];
al[0]=x/d[0];
c[0]=q[0]*b[0];

/*第一级*/
t[0]=-al[0];
t[1]=1;
d[1]=0;
x=y=0;
for(i=0;i<n;i++)
{
d[1]=d[1]+(t[1]*a[i].x_axis+t[0])*(t[1]*a[i].x_axis+t[0]);
y=y+a[i].y_axis*(t[1]*a[i].x_axis+t[0]);
x=x+a[i].x_axis*(t[1]*a[i].x_axis+t[0])*(t[1]*a[i].x_axis+t[0]);
}
q[1]=y/d[1];
al[1]=x/d[1];
be[1]=d[1]/d[0];
c[0]=c[0]+q[1]*t[0];
c[1]=q[1]*t[1];

/*二级以上*/
if(m>=2)
{
for(j=2;j<=m;j++)
{
s[0]=-al[j-1]*t[0]-be[j-1]*b[0];
for(k=j-2;k>=1;k--)
{
s[k]=-al[j-1]*t[k]-be[j-1]*b[k];
}
s[j-1]=-al[j-1]*t[j-1]+t[j-2];
s[j]=t[j-1];
/*计算d[j]*/
d[j]=0;
for(i=1;i<=n;i++)
{
/*计算Q(x)2*/
z=s[0];
for(l=1;l<=j;l++)
{
z=z+s[l]*pow(a[i].x_axis,l);
}
z=z*z;
d[j]=d[j]+z;
}
/*计算q[j]*/
q[j]=0;
for(i=1;i<=n;i++)
{
z=s[0];
for(l=1;l<=j;l++)
{
z=z+s[l]*pow(a[i].x_axis,l);
}
z=z*a[i].y_axis;
q[j]=q[j]+z;
}
q[j]=q[j]/d[j];
/*计算al[j]*/
p=0;
for(i=1;i<=n;i++)
{
z=s[0];
for(l=1;l<=j;l++)
{
z=z+s[l]*pow(a[i].x_axis,l);
}
z=z*z*a[i].x_axis;
p=p+z;
}
al[j]=p/d[j];
be[j]=d[j]/d[j-1];
c[j]=q[j]*s[j];
for(k=j-1;k>=0;k--)
{
c[k]=c[k]+q[j]*s[k];
}
for(k=j-1;k>=0;k--)
{
b[k]=t[k];
}
for(k=j;k>=0;k--)
{
t[k]=s[k];
}
}
}
}
xjp6688 2005-04-21
  • 打赏
  • 举报
回复
www.vcok.com
找找看
zhang_jiang 2005-04-20
  • 打赏
  • 举报
回复
设m个点(X_i, Y_i), i=0, 1, ..., m
要求S(x)=a_0*Z_0(x)+a_1*Z_1(x)+...+a_n*Z_n(x)
如:Z_0, Z_1,..., Z_n可取: 1, x, x^2, ..., x^(n-1)

定义[Z_j, Z_k]={w(X_i)*Z_j(X_i)*Z_k(x_i)对i从0到m求和}.
[f, Z_k]={w(X_i)*f(X_i)*Z_k(x_i)对i从0到m求和}.
其中, w(X_i)为X_i点的样本的权重.f(X_i)为X_i出样本的值(即Y_i).

==>
n
SUM [Z_k, Z_j]a_j = [f, Z_k]
j=0
解这个方程组得到a_i即可.
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在计算机视觉领域,实时目标跟踪是许多应用的核心任务,例如监控系统、自动驾驶汽车和无人机导航等。本文将重点介绍一种在2017年备受关注的高效目标跟踪算法——BACF(Boosted Adaptive Clustering Filter)。该算法因其卓越的实时性和高精度而脱颖而出,其核心代码是用MATLAB编写的。 BACF算法全称为Boosted Adaptive Clustering Filter,是基于卡尔曼滤波器改进的一种算法。传统卡尔曼滤波在处理复杂背景和目标形变时存在局限性,而BACF通过引入自适应聚类和Boosting策略,显著提升了对目标特征的捕获和跟踪能力。 自适应聚类是BACF算法的关键技术之一。它通过动态更新特征空间中的聚类中心,更准确地捕捉目标的外观变化,从而在光照变化、遮挡和目标形变等复杂情况下保持跟踪的稳定性。此外,BACF还采用了Boosting策略。Boosting是一种集成学习方法,通过组合多个弱分类器形成强分类器。在BACF中,Boosting用于优化目标检测性能,动态调整特征权重,强化对目标识别贡献大的特征,从而提高跟踪精度。BACF算法在设计时充分考虑了计算效率,能够在保持高精度的同时实现快速实时的目标跟踪,这对于需要快速响应的应用场景(如视频监控和自动驾驶)至关重要。 MATLAB作为一种强大的数学计算和数据分析工具,非常适合用于算法的原型开发和测试。BACF算法的MATLAB实现提供了清晰的代码结构,方便研究人员理解其工作原理并进行优化和扩展。通常,BACF的MATLAB源码包含以下部分:主函数(实现整个跟踪算法的核心代码)、特征提取模块(从视频帧中提取目标特征的子程序)、聚类算法(实现自适应聚类过程)、Boosting算法(包含特征权重更新的代

70,022

社区成员

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

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