搜索
bottom↓
回复: 9

最小二乘法拟合求教

[复制链接]

出10入23汤圆

发表于 2013-6-3 00:48:25 | 显示全部楼层 |阅读模式
本帖最后由 zouzhichao 于 2013-6-3 00:56 编辑


这几天在弄最小二乘法曲线拟合(目标函数不是多项式,而是正弦函数),遇到一个问题。
假设要拟合的目标函数为y = a * sin(b * x) + c,有没有什么好的思路?
(目前我用的迭代,但是很容易震荡,对参数的初始值有很大依赖性,尤其是参数b)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出10入23汤圆

 楼主| 发表于 2013-6-3 00:58:51 | 显示全部楼层
%得到一阶导数的值,公式如下
%2 * sin(b * x) * (c - y + a *sin(b * x))
%2 * a * x * cos(b * x) * (c - y + a * sin(b * x))
%2 * c - 2 * y + 2 * a * sin(b * x)
function Res = GetYijieDaoshu(Xy, Para)
Res = zeros(3, 1);
for i = 1 : size(Xy, 1)
    Res(1, 1) = Res(1, 1) + 2 * sin(Para(2) * Xy(i, 1)) * (Para(3) - Xy(i, 2) + Para(1) * sin(Para(2) * Xy(i, 1)));
    Res(2, 1) = Res(2, 1) + 2 * Para(1) * Xy(i, 1) * cos(Para(2) * Xy(i, 1)) * (Para(3) - Xy(i, 2) + Para(1) * sin(Para(2) * Xy(i, 1)));
    Res(3, 1) = Res(3, 1) + 2 * Para(3) - 2 * Xy(i, 2) + 2 * Para(1) * sin(Para(2) * Xy(i, 1));
end
end

%得到二阶导数的值,公式如下
%2 * sin(b * x)^2
%2 * x * cos(b * x) * (c - y + a * sin(b * x)) + 2 * a * x * cos(b * x) * sin(b * x)
%2 * sin(b * x)

%2 * x * cos(b * x) * (c - y + a * sin(b * x)) + 2 * a * x * cos(b * x) * sin(b * x)
%2 * a^2 * x^2 * cos(b * x)^2 - 2 * a * x^2 * sin(b * x) * (c - y + a * sin(b * x))
%2 * a * x * cos(b * x)

%2 * sin(b * x)
%2 * a * x * cos(b * x)
%2

function Res = GetErjieDaoshu(Xy, Para)
Res = zeros(3, 3);
for i = 1 : size(Xy, 1)
    Res(1, 1) = Res(1, 1) + 2 * sin(Para(2) * Xy(i, 1))^2;
    Res(1, 2) = Res(1, 2) + 2 * Xy(i, 1) * cos(Para(2) * Xy(i, 1)) * (Para(3) - Xy(i, 2) + Para(1) * sin(Para(2) * Xy(i, 1))) + 2 * Para(1) * Xy(i, 1) * cos(Para(2) * Xy(i, 1)) * sin(Para(2) * Xy(i, 1));
    Res(1, 3) = Res(1, 3) + 2 * sin(Para(2) * Xy(i, 1));
   
    Res(2, 1) = Res(2, 1) + 2 * Xy(i, 1) * cos(Para(2) * Xy(i, 1)) * (Para(3) - Xy(i, 2) + Para(1) * sin(Para(2) * Xy(i, 1))) + 2 * Para(1) * Xy(i, 1) * cos(Para(2) * Xy(i, 1)) * sin(Para(2) * Xy(i, 1));
    Res(2, 2) = Res(2, 2) + 2 * Para(1)^2 * Xy(i, 1)^2 * cos(Para(2) * Xy(i, 1))^2 - 2 * Para(1) * Xy(i, 1)^2 * sin(Para(2) * Xy(i, 1)) * (Para(3) - Xy(i, 2) + Para(1) * sin(Para(2) * Xy(i, 1)));
    Res(2, 3) = Res(2, 3) + 2 * Para(1) * Xy(i, 1) * cos(Para(2) * Xy(i, 1));
   
    Res(3, 1) = Res(3, 1) + 2 * sin(Para(2) * Xy(i, 1));
    Res(3, 2) = Res(3, 2) + 2 * Para(1) * Xy(i, 1) * cos(Para(2) * Xy(i, 1));
    Res(3, 3) = Res(3, 3) + 2;
end
end

%计算系数的值
function Res = CalPara(Xy, ParaInit, N)
Res = ParaInit;
for i = 1 : N
    ParaN = GetYijieDaoshu(Xy, Res);
    ParaNN = GetErjieDaoshu(Xy, Res);
    Res = Res - 1 * (ParaNN \ ParaN);
end
end

clear;
clc;
a = 1.7;
b = 3.3;
c = -4.6;
X = 200 : 0.01 : 203;
Y = a * sin(b * X) + c + (rand(size(X)) - 0.5) / 1.0;
ParaABC = CalPara([X', Y'], [20.91, 3.3, -34.6]', 40);
Z = ParaABC(1) * sin(ParaABC(2) * X) + ParaABC(3);
plot(X, Y, X, Z);

出420入0汤圆

发表于 2013-6-4 09:40:40 | 显示全部楼层
拿低通滤波得了。

出0入0汤圆

发表于 2013-6-4 09:57:19 | 显示全部楼层
最小二乘貌似有两种推导方式,一种是通过偏导数的,一种是通过矩阵的.

出10入23汤圆

 楼主| 发表于 2013-6-4 10:00:07 | 显示全部楼层
笑笑我笑了 发表于 2013-6-4 09:57
最小二乘貌似有两种推导方式,一种是通过偏导数的,一种是通过矩阵的.

是的,我用的偏导,线性代数没学好,矩阵的推导还没完全搞通

出10入23汤圆

 楼主| 发表于 2013-6-4 10:07:08 | 显示全部楼层
笑笑我笑了 发表于 2013-6-4 09:57
最小二乘貌似有两种推导方式,一种是通过偏导数的,一种是通过矩阵的.

目标函数为多项式的时候容易一些,参数之间没有耦合。目标函数为别的的话,参数之间有耦合,不好弄,我现在用的迭代,测试了正(余)弦函数,指数函数,正(余)弦函数y = a * sin(b * x) + c(还没有把相位弄进去)的参数b的初始值很敏感。指数函数y = a * exp(b * x) + c稍微好一点,初始值的影响不是那么大,一般都能收敛。
不知道有没有好点的思路可以借鉴

出0入0汤圆

发表于 2013-6-4 11:56:39 | 显示全部楼层
zouzhichao 发表于 2013-6-4 10:07
目标函数为多项式的时候容易一些,参数之间没有耦合。目标函数为别的的话,参数之间有耦合,不好弄,我现 ...

觉得还是用矩阵好,线性代数有一套很完善的数值计算理论.

出10入23汤圆

 楼主| 发表于 2013-6-4 14:06:41 | 显示全部楼层
笑笑我笑了 发表于 2013-6-4 11:56
觉得还是用矩阵好,线性代数有一套很完善的数值计算理论.

求提点。。。

出0入0汤圆

发表于 2013-6-19 22:58:43 | 显示全部楼层
这个波形,不禁想起卡尔曼滤波。。。

出10入23汤圆

 楼主| 发表于 2013-6-21 00:46:21 | 显示全部楼层
quackonchen 发表于 2013-6-19 22:58
这个波形,不禁想起卡尔曼滤波。。。

这个确实是采用“预测—实测—修正”的思路迭代的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-28 06:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表