在matlab中获取拟合函数的函数句柄并分配拟合参数

时间:2013-05-10 08:31:39

标签: matlab handle curve-fitting

我正在为我的数据调整自定义函数。 在获得拟合之后,我想获得类似于我的拟合函数的函数句柄,包括设置为由拟合找到的参数。 我知道我可以用

获得模型
formula(fit) 

我可以用

获取参数
coeffvalues(fit) 

但是有没有简单的方法将两者结合在一起?

2 个答案:

答案 0 :(得分:3)

这个小循环可以解决问题:

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, '^', '.^');

答案 1 :(得分:0)

您可以使用Matlab曲线拟合函数polyfit

p = polyfit(x,y,n)

因此,p包含多项式的系数,xy是您尝试拟合的函数的坐标。 n是多项式的阶数。例如,n=1是线性的,n=2是二次的,等等。有关详细信息,请参阅此documentation centre链接。唯一的问题是你可能不需要多项式拟合,在这种情况下你将不得不使用不同的方法。

哦,您可以使用计算出的系数p来重新评估多项式:

f = polyval(p,x);

此处,f是在p点评估系数x的多项式的值。