社区
C语言
帖子详情
帮忙啊,急求最小二乘法算法程序
adashm
2005-04-20 09:15:25
我要对二元一次方程y=ax1+bx2进行a,b系数估计,谁能给出源程序,急等
...全文
299
3
打赏
收藏
帮忙啊,急求最小二乘法算法程序
我要对二元一次方程y=ax1+bx2进行a,b系数估计,谁能给出源程序,急等
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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即可.
最小二乘法
,加权
最小二乘法
,迭代重加权
最小二乘法
(含代码)【最小二乘线性求解】
本文详细介绍了
最小二乘法
(OLS)、加权
最小二乘法
(WLS)和迭代重加权
最小二乘法
(IRLS)的概念、公式推导和应用实例。通过矩阵形式展示了这些方法的实现,特别是在数据拟合和超定方程组求解中的应用。文中还提供了C++和MATLAB代码示例,以及N点标定问题的解决方案,强调了迭代重加权在处理噪声数据时的优势。
最小二乘法
定位(2)——定位
算法
+仿真
程序
本文介绍了
最小二乘法
的基本原理及其在定位
算法
中的应用。首先通过实例解释了
最小二乘法
如何找到最佳函数匹配,随后详细阐述了利用该方法进行定位的过程,包括非线性方程线性化及MATLAB仿真。
基于
最小二乘法
的直线拟合原理及C++实现
本文介绍了基于
最小二乘法
的直线拟合原理,通过求解目标函数的极值确定直线参数。然后,讨论了RANSAC
算法
如何结合
最小二乘法
剔除离群点,提高拟合精度。在离群点较多的情况下,RANSAC
算法
能提供更准确的直线拟合结果。
递归
最小二乘法
、增广
最小二乘法
、带遗忘因子的递归增广
最小二乘法
本文探讨了在系统辨识中,递归
最小二乘法
因减少计算量而适用于在线辨识动态系统。接着介绍了增广
最小二乘法
,通过扩大数据向量维数解决
最小二乘法
的有偏性问题。最后,提到了带遗忘因子的递归增广
最小二乘法
,该方法通过调整遗忘因子来重视新数据,减弱旧数据的影响,适用于参数的实时更新。
【
算法
+OpenCV】基于opencv的直线和曲线拟合与绘制(
最小二乘法
)
本文介绍如何在OpenCV中实现基于最小二乘的多项式曲线拟合。先阐述
最小二乘法
多项式曲线拟合概念,即求近似曲线使与原曲线偏差最小。常见曲线拟合方法有多种,按偏差平方和最小原则选拟合曲线的方法为
最小二乘法
,还给出其推导过程,最后说明可利用opencv的cv::solve()函数求解系数矩阵。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章