fit function not optimizing parameters
显示 更早的评论
I am attempting to fit a superguassian function to step function. With the following code. (In practice the code should be able to handle all regimes from a normal guassian to a step function, I'm just testing an edge case)
output = ones(512, 1);
output(start:stop) = min(outline); %outline is defined earlier in code, min(outline) ~ 0.92
A = 1 - min(output);
g = fittype(@(b,c,x) 1 - A*exp(- ( (x-256)/ c ).^(2*round(b))),...
'dependent',{'y'},'independent',{'x'},'coefficients',{'b','c'});
x = reshape(1:numel(output),numel(output),[])
y = reshape(output,numel(output),[])
mdl = fit(x,y,g,'lower',[1 1], 'upper', [1e3 200])
f = figure
scatter(1:numel(output),output)
xlim([0 numel(output)])
hold on
plot(mdl)
hold off
The code produces the following fit:

However, if I arbitrarily constrain c (which controls the width of the graph) to have a minimum value within the following by modifying the fitting code like such:
g = fittype(@(b,c,x) 1 - A*exp(- ( (x-256)/max([120 c]) ).^(2*round(b))),...
'dependent',{'y'},'independent',{'x'},'coefficients',{'b','c'});
Then I get the following fit:

Clearly the function is capable of producing a better fit with a slightly larger c value, yet it doesn't. Any insights as to where I'm making a mistake here? Thanks!
1 个评论
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Get Started with Curve Fitting Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!