% 拟合椭圆型曲线段
close all;
% 设出圆锥曲线方程
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)*x(:,1)+p(5)*x(:,2)+p(6);%椭圆一般方程
% 离散数据点
Up=xlsread('D:\\CT\\Up.xls');%excel文件路径
UpX=Up(:,1);
UpY=Up(:,2);
% p0系数初值
p0=[1 1 1 1 1 1];
warning off
% 拟合系数,最小二乘方法
p=nlinfit(Up,zeros(size(Up,1),1),F,p0);
plot(UpX,UpY,'r.');
hold on;
UpMinx=min(UpX);
UpMaxx=max(UpX);
UpMiny=min(UpY);
UpMaxy=max(UpY);
% 作图
ezplot(@(x,y)F(p,[x,y]),[-1+UpMinx,1+UpMaxx,-1+UpMiny,1+UpMaxy]);
title('曲线拟合');
legend('样本点','拟合曲线');
% 设出圆锥曲线方程
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)*x(:,1)+p(5)*x(:,2)+p(6);%椭圆一般方程
% 离散数据点
Down=xlsread('D:\\CT\\Down.xls');
DownX=Down(:,1);
DownY=Down(:,2);
% p0系数初值
p0=[1 1 1 1 1 1];
warning off
% 拟合系数,最小二乘方法
p=nlinfit(Down,zeros(size(Down,1),1),F,p0);
plot(DownX,DownY,'r.');
hold on;
DownMinx=min(DownX);