我正在为我的数据拟合自定义函数。获得拟合后,我想获得类似拟合函数的函数句柄,包括设置为拟合找到的参数。我知道我可以得到模型
formula(fit)
我可以得到参数
coeffvalues(fit)
但是有什么简单的方法可以一步将两者结合起来吗?
我正在为我的数据拟合自定义函数。获得拟合后,我想获得类似拟合函数的函数句柄,包括设置为拟合找到的参数。我知道我可以得到模型
formula(fit)
我可以得到参数
coeffvalues(fit)
但是有什么简单的方法可以一步将两者结合起来吗?
这个小循环可以解决问题:
x = (1:100).'; %'
y = 1*x.^5 + 2*x.^4 + 3*x.^3 + 4*x.^2 + 5*x + 6;
fitobject = fit(x,y,'poly5');
cvalues = coeffvalues(fitobject);
cnames = coeffnames(fitobject);
output = formula(fitobject);
for ii=1:1:numel(cvalues)
cname = cnames{ii};
cvalue = num2str(cvalues(ii));
output = strrep(output, cname , cvalue);
end
output = 1*x^5 + 2*x^4 + 3*x^3 + 4*x^2 + 5*x + 6
循环需要适应您适合的系数数量。
编辑:为了完全回答这个问题,做了两个小改动。
fhandle = @(x) eval(output)
返回一个函数句柄。其次,您的程序给出的输出不起作用,因为电源操作读取 .^ 而不是 x,这显然可以替换为
strrep(output, '^', '.^');
您可以使用 Matlab 曲线拟合功能,polyfit
.
p = polyfit(x,y,n)
因此,p
包含多项式的系数,x
并且y
是您要拟合的函数的坐标。n
是多项式的阶数。例如,n=1
是线性的、n=2
是二次的等。有关更多信息,请参阅此文档中心链接。唯一的问题是您可能不想要多项式拟合,在这种情况下您将不得不使用不同的方法。
哦,您可以使用计算出的系数p
来重新评估多项式:
f = polyval(p,x);
这里,f
是多项式的值,其系数p
在点 处计算x
。