关于反比例函数方程拟合的思考

反比例函数方程拟合

如果对于一组数据,它满足 y = a x + b y= \frac{a}{x}+b y=xa+b,很容易求出a和b来。
但是,由于有反比例的存在,导致在x趋于0时,y趋于无穷,这也限制了它的应用。
于是我就想,能不能把x平移一段距离,然后再预测呢?写成表达式就是 y = a x + c + b y= \frac{a}{x+c}+b y=x+ca+b,这样的话,如果c大于0,那么就表示y存在初始值(在x=0时有界),同时,它很好的保留了反比例函数单减(增)、且最后收敛到某一个值的性质。
但是,由于我不知道它叫什么名字,所以搜索了半天后,决定自己推导。

推导过程

首先,声明一点,我不确定我的这个做法是否正确,同时,在我做完后发现,c总是小于0,这导致了数据预测不准确,目前我没有什么好的改进方法,希望各位大佬帮忙指点。

  1. y = a x + c + b + ϵ y=\frac{a}{x+c}+b+\epsilon y=x+ca+b+ϵ,则 y − a x + c − b = ϵ y-\frac{a}{x+c}-b=\epsilon yx+cab=ϵ。我们希望 ϵ \epsilon ϵ的值尽可能接近0,则正常情况下,我们转化为求如下表达式的最小值: Q = ∑ i = 1 n ( y i − a x i + c − b ) 2 = ∑ i = 1 n ϵ i 2 Q=\sum_{i=1}^n (y_i-\frac{a}{x_i+c}-b) ^{2}=\sum_{i=1}^n \epsilon_i^2 Q=i=1n(yixi+cab)2=i=1nϵi2。此时我们就将 Q Q Q看作是关于 a a a b b b的函数,即为 Q ( a , b ) Q(a,b) Q(a,b),然后对它求偏导,求得 a a a b b b的值。

  2. 但由于有分式的存在,在求偏导时,除了数值计算,我想不到其他好的解法了,所以我索性换了一种评价方式,我们对式子变形得到: ( y − b ) ( x + c ) − a = ϵ ( x + c ) (y-b)(x+c)-a=\epsilon(x+c) (yb)(x+c)a=ϵ(x+c),这个式子表明,如果,在 x + c > 0 x+c>0 x+c>0的情况下, x x x越大,要想使得 ( y − b ) ( x + c ) − a (y-b)(x+c)-a (yb)(x+c)a接近0,则 ϵ \epsilon ϵ必须越小。但是,在 x + c ≈ 0 x+c\approx0 x+c0的情况下,误差就会十分的明显,所以,我们应该想办法避免这种情况的发生。(但事实是我不会避免,求大神帮忙)

  3. 我们转化为求如下表达式的最小值: Q = ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] 2 Q=\sum_{i=1}^n [(y_i-b)(x_i+c)-a]^{2} Q=i=1n[(yib)(xi+c)a]2。对 Q Q Q求偏导得到:
    ∂ Q ∂ a = − 2 ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] \frac{\partial {Q}}{\partial {a}}=-2\sum_{i=1}^n [(y_i-b)(x_i+c)-a] aQ=2i=1n[(yib)(xi+c)a]
    ∂ Q ∂ b = − 2 ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] ( x i + c ) \frac{\partial {Q}}{\partial {b}}=-2\sum_{i=1}^n [(y_i-b)(x_i+c)-a](x_i+c) bQ=2i=1n[(yib)(xi+c)a](xi+c)
    ∂ Q ∂ c = 2 ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] ( y i − b ) \frac{\partial {Q}}{\partial {c}}=2\sum_{i=1}^n [(y_i-b)(x_i+c)-a](y_i-b) cQ=2i=1n[(yib)(xi+c)a](yib)
    ∂ Q ∂ a = ∂ Q ∂ b = ∂ Q ∂ c = 0 \frac{\partial {Q}}{\partial {a}}=\frac{\partial {Q}}{\partial {b}}=\frac{\partial {Q}}{\partial {c}}=0 aQ=bQ=cQ=0得:
    ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] = 0 … … ( 1 ) \sum_{i=1}^n [(y_i-b)(x_i+c)-a]=0 ……(1) i=1n[(yib)(xi+c)a]=01
    ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] ( x i + c ) = 0 … … ( 2 ) \sum_{i=1}^n [(y_i-b)(x_i+c)-a](x_i+c)=0……(2) i=1n[(yib)(xi+c)a](xi+c)=02
    ∑ i = 1 n [ ( y i − b ) ( x i + c ) − a ] ( y i − b ) = 0 … … ( 3 ) \sum_{i=1}^n [(y_i-b)(x_i+c)-a](y_i-b)=0……(3) i=1n[(yib)(xi+c)a](yib)=03

  4. 我们将(1)代入(2)(3)化简,令 s u m x sumx sumx= ∑ i = 1 n x \sum_{i=1}^n x i=1nx, s u m y sumy sumy= ∑ i = 1 n y \sum_{i=1}^n y i=1ny
    展开得:
    ∑ i = 1 n x i y i n + s u m y n c − s u m x n b − b c = a … … ( 4 ) \frac{\sum_{i=1}^n x_iy_i}{n}+\frac{sumy}{n}c-\frac{sumx}{n}b-bc=a……(4) ni=1nxiyi+nsumycnsumxbbc=a4
    ∑ i = 1 n x i 2 y i s u m x + ∑ i = 1 n x i y i s u m x c − ∑ i = 1 n x i 2 s u m x b − b c = a … … ( 5 ) \frac{\sum_{i=1}^n x_i^2y_i}{sumx}+\frac{\sum_{i=1}^n x_iy_i}{sumx}c-\frac{\sum_{i=1}^n x_i^2}{sumx}b-bc=a……(5) sumxi=1nxi2yi+sumxi=1nxiyicsumxi=1nxi2bbc=a5
    ∑ i = 1 n x i y i s u m y + ∑ i = 1 n y i 2 s u m y c − ∑ i = 1 n x i y i s u m y b − b c = a … … ( 6 ) \frac{\sum_{i=1}^n x_iy_i}{sumy}+\frac{\sum_{i=1}^n y_i^2}{sumy}c-\frac{\sum_{i=1}^n x_iy_i}{sumy}b-bc=a……(6) sumyi=1nxiyi+sumyi=1nyi2csumyi=1nxiyibbc=a6
    k = a + b c k=a+bc k=a+bc,则我们可以得到:
    s u m y n c − s u m x n b − k = − ∑ i = 1 n x i y i n … … ( 7 ) \frac{sumy}{n}c-\frac{sumx}{n}b-k=-\frac{\sum_{i=1}^n x_iy_i}{n}……(7) nsumycnsumxbk=ni=1nxiyi7
    ∑ i = 1 n x i y i s u m x c − ∑ i = 1 n x i 2 s u m x b − k = − ∑ i = 1 n x i 2 y i s u m x … … ( 8 ) \frac{\sum_{i=1}^n x_iy_i}{sumx}c-\frac{\sum_{i=1}^n x_i^2}{sumx}b-k=-\frac{\sum_{i=1}^n x_i^2y_i}{sumx}……(8) sumxi=1nxiyicsumxi=1nxi2bk=sumxi=1nxi2yi8
    ∑ i = 1 n y i 2 s u m y c − ∑ i = 1 n x i y i s u m y b − k = − ∑ i = 1 n x i y i s u m y … … ( 9 ) \frac{\sum_{i=1}^n y_i^2}{sumy}c-\frac{\sum_{i=1}^n x_iy_i}{sumy}b-k=-\frac{\sum_{i=1}^n x_iy_i}{sumy}……(9) sumyi=1nyi2csumyi=1nxiyibk=sumyi=1nxiyi9
    这样我们就可以通过matlab计算出来 b b b c c c k k k的值了。
    A = [ s u m y n − s u m x n − 1 ∑ i = 1 n x i y i s u m x − ∑ i = 1 n x i 2 s u m x − 1 ∑ i = 1 n y i 2 s u m y − ∑ i = 1 n x i y i s u m y − 1 ] A=\left[ \begin{matrix} \frac{sumy}{n} & -\frac{sumx}{n} & -1\\ \frac{\sum_{i=1}^n x_iy_i}{sumx} & -\frac{\sum_{i=1}^n x_i^2}{sumx} &-1\\ \frac{\sum_{i=1}^n y_i^2}{sumy} & -\frac{\sum_{i=1}^n x_iy_i}{sumy} & -1\\ \end{matrix} \right] A=nsumysumxi=1nxiyisumyi=1nyi2nsumxsumxi=1nxi2sumyi=1nxiyi111
    B = [ − ∑ i = 1 n x i y i n − ∑ i = 1 n x i 2 y i s u m x − ∑ i = 1 n x i y i s u m y ] B=\left[ \begin{matrix} -\frac{\sum_{i=1}^n x_iy_i}{n} \\ -\frac{\sum_{i=1}^n x_i^2y_i}{sumx}\\ -\frac{\sum_{i=1}^n x_iy_i}{sumy}\\ \end{matrix} \right] B=ni=1nxiyisumxi=1nxi2yisumyi=1nxiyi
    X = [ c b k ] X=\left[ \begin{matrix} c\\ b\\ k\\ \end{matrix} \right] X=cbk
    所以,式子改写成: A X = B AX=B AX=B
    所以,解得 X = A − 1 B X=A^{-1}B X=A1B
    然后,我们就可以求出a的值了: a = k − b c a=k-bc a=kbc

缺点

可以看出,推导中完全没有考虑 x + c < 0 x+c<0 x+c<0的请况,因此,完全有可能出现我们想拟合一条曲线,但是发现它反而拟合出了奇点。我在此提供一组数据,它就拟合出了奇点。
x从1到17
y=13.5
13.5
13.1
13.1
14.7
15.6
14.5
14.5
13.8
11.8
11.86
9.9
8.2
8.5
8.35
8.2
7.00

拟合出来的曲线为:
在这里插入图片描述

不过,我们可以看出,它在后面工作的还是很好的。而通过我多次用matlab模拟发现,它不太常出现奇点,所以,还是可以使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值