MATLAB拟合反比例函数

数据如下x=[178 188 198 208 218] y=[12300 9400 7650 6550 5950]

如果想拟合成y=a/x这种形式,拟合出结果差别非常大,建议不要拟合成反比例。如果拟合成y=a/(x+b)这种形式,就挺好的。

你可以使用matlab应用程序里的拟合工具箱"Curve Fitting Tool"。而后如上图这样设置,选到custom equation 这样就能自主改动你要拟合的函数形式,就可以随意拟合了。

追问

其实我想要的是a/(x+b)+c,不过好像差不多,主要之前不太懂怎么自定义函数类型。。。还有就是多加了一个c之后为什么就拟合不出来曲线了。。

追答

点fit options 将a,b,c范围调成如图所示,结果如下图

追问

好的谢谢了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-23

假设要拟合的函数是y = a/(x-b)。在matlab里,任意非线性拟合的函数可使用nlinfit:

func = @(beta, x)beta(1)./(x-beta(2));
beta = nlinfit(x, y, func, [0 0])
plot(x, func(beta, x))

另外,y = a/(x-b)其实是线性拟合,可以用polyfit来做(看你发给别人的评论是想拟合y = a/(x+b)+c,则不是线性拟合,只能用上面的nlinfit)。因为by + a = xy,可以看作输入是y,输出是xy,拟合关于y的一次函数

t = polyfit(y, x.*y, 1);
plot(x, t(2) ./ (x - t(1)))

追问

那第一种方法的话需要改哪里呢,,不太能看得懂,,

追答

func = @(beta, x)beta(1)./(x-beta(2))定义的是函数句柄,在数学上相当于定义了一个函数:func(beta, x) = beta(1) ./ (x-beta(2))。而你现在需要的是func(beta, x) = beta(1) ./ (x+beta(2))+beta(3)

本回答被提问者采纳
相似回答