如果想拟合成y=a/x这种形式,拟合出结果差别非常大,建议不要拟合成反比例。如果拟合成y=a/(x+b)这种形式,就挺好的。
你可以使用matlab应用程序里的拟合工具箱"Curve Fitting Tool"。而后如上图这样设置,选到custom equation 这样就能自主改动你要拟合的函数形式,就可以随意拟合了。
追问其实我想要的是a/(x+b)+c,不过好像差不多,主要之前不太懂怎么自定义函数类型。。。还有就是多加了一个c之后为什么就拟合不出来曲线了。。
追答点fit options 将a,b,c范围调成如图所示,结果如下图
好的谢谢了
假设要拟合的函数是y = a/(x-b)。在matlab里,任意非线性拟合的函数可使用nlinfit:
func = @(beta, x)beta(1)./(x-beta(2));另外,y = a/(x-b)其实是线性拟合,可以用polyfit来做(看你发给别人的评论是想拟合y = a/(x+b)+c,则不是线性拟合,只能用上面的nlinfit)。因为by + a = xy,可以看作输入是y,输出是xy,拟合关于y的一次函数:
t = polyfit(y, x.*y, 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)
本回答被提问者采纳