幂函数 y = a x^b + c 在C++怎么拟合

laoluo1991 2015-05-18 04:41:56
最近碰到一个问题
回归求参数:y=a x^b + c
这个貌似不能线性化
在matlab我知道用拟合工具箱求得
但是是基于什么原理却不知道
我现在需要在我的MFC小程序中求得回归参数a,b,c ,然后去得到函数的零点
求知道的朋友告知下算法或者实现方式,感激
...全文
2420 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgz007 2018-06-28
  • 打赏
  • 举报
回复
在拟合y=ax^b + c过程中 先从数据集中挑选符合条件的样本求c,再将问题转换为简单幂函数的线性拟合,其中计算c的过程是这样的:
取(x1,y1)(x2,y2)样本,则有: y1-c = ax1^b (1) y2-c=ax2^b (2) 再搜索满足或基本满足条件 y3*y3= x1*x2的样本,
这样有: y3-c = a(x1x2)^b (3)
联立(1)~(3)有 (y3-c)(y3-c) = (y1-c)*(y2-c)
得: c=(y1*y2-y3*y3)/(y1+y2-2*y3)

数学是最好的益智游戏

大家知道我为什么对这个函数的拟合感兴趣吗? 因为如果一幅影像的亮度符合这个函数的分布规律,人眼感知就比较舒适。在解决颜色匹配问题过程中我想拟合这个函数,开始以为简单,其实不然。 还有专门研究认知的人说将b确定为2.2 很好。
原来数学是我们解决问题最好的工具。最好中美贸易问题也用数学来解决:)
sgz007 2018-06-27
  • 打赏
  • 举报
回复
提供两种方法:
1. 粗略方法,分两步:1) y-c = ax^b 两边取对数估计 Y= ln(a) + bln(X) 估计a,b 2) y = ax^b +c 将b作为已知数估 a,c

2. 微分线性化 dy/da = x^b dy/db = abx^(b-1) dy/dc = 1 2)按泰勒级数展开 y=ax^b + c 建立误差方程 Ax=B 按最小二乘求解abc
没有试不知道是否可行。
mlqxj35674 2018-06-27
  • 打赏
  • 举报
回复
计算方法 一般这种用迭代,比如高斯迭代,高斯赛德尔迭代,
sgz007 2018-06-27
  • 打赏
  • 举报
回复
具体方法: 1)在待拟合的数据集中取3点 (x1,y1) (x2,y2) (x3=sqrt(x1*x2),y3) 计算c=(y1*y2-y3*y3)/(y1+y2-2*y3)
2) 令X=ln(x) Y=ln(y-c) 则 Y=ln(a) + bX
3) 用直线拟合方法求 参数 a b
sgz007 2018-06-27
  • 打赏
  • 举报
回复
上面提到的方法1有问题,应该先找到数据集的最小值,直接估计c 在对数拟合估计a,b
具体方法: 1)找数据集最小值(c) , 2) 平移变化数据集 3) 数据集每元素取对数,4)拟合Y=ax^b
赵4老师 2018-06-27
  • 打赏
  • 举报
回复
《高等数学》
worldy 2015-05-18
  • 打赏
  • 举报
回复
搜:最小二乘法多项式拟合

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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