使用matlab拟合曲线

时间:2015-10-13 10:14:25

标签: matlab optimization curve-fitting

我有两个交叉抛物线的情节。有没有办法可以正确地检测出两个并且适合两个抛物线,一个通过每个抛物线?我目前的代码只适用于一个抛物线:

x=-100:1:100;
y=(x.^2)/(4);
x1=-50:1:150;
y1=(x.^2)/(4);
x=[x,x1];
y=[y,y1];
f = fittype('((x)*(x))/4*p',...
'dependent',{'y'},'independent',{'x'},...
'coefficients',{'p'})
fit1= fit(x',y',f)
plot(fit1,x,y)

enter image description here

1 个答案:

答案 0 :(得分:0)

根据建议,我能够编写一个运行ransac for curve

的代码
function [f1] = Ransac(x,y)
voting=[0,0,0,0];
for i=1:10000

[y1,idx] = datasample(y,5);
x1=x(idx);
p = polyfit(x1,y1,2);
f1 = polyval(p,x);
error=(((f1-y).^2));
error(error>100)=0;
indx =find(ismember(voting(:,1:3),'rows'),1);
if (isempty(indx)==1)
    voting=[voting;[p,sum(error)]];
else
    voting(indx,4) =   voting(indx,4)+sum(error);
end
end
[s,t]=max(voting(:,4));
p=voting(t,1:3);
f1 = polyval(p,x);
end