matlab根据坐标拟合椭圆程序

更新时间:2023-06-23 07:05:56 阅读: 评论:0

例子一
% 拟合椭圆型曲线段
clo 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);
% p0kayak系数初值
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);
DownMaxx=max(DownX);
DownMiny=min(DownY);
DownMaxy=max(DownY);
% 作图
ezplot(@(x,y)F(p,[x,y]),[-1+DownMinx,1+DownMaxx,-1+DownMiny,1+DownMaxy]);
title('曲线拟合');
legend('样本点','拟合曲线信笺');
例子二
具体不做说明,留着以后查找方便。
clear  
clc  
load ('S.txt'); 
r=S(:,1); 
t=S(:,2); 
x=r.*cos(t*pi/180);%转换成直角坐标recipeo 
y=r.*sin(t*pi/180);%转换成直角坐标 
XY=[x,y];  
save& XY -ascii%保存转换后的直角坐标 
%%%%%%%%%%%%%%%%曲线方程拟合%%%%%%%%%%%%%%%%%    
F=@(p,XY)p(1)*XY(:,1).^2+p(2)*XY(:,1).*XY(:,2)+p(3)*XY(:,2).^2+p(4)*XY(:,1)+p(5)*XY(:,2)+p(6);%椭圆一般方程 
p0=[1 1 1 1 1 1]; 
%%%%%%拟合系数,最小二乘法%%%%%% 
p=nlinfit(XY, zeros(size(XY,1),1), F, p0); 初中英语作文题 %bottle是什么意思调整画图输出样式及大小 
miscarriage
s=4800/127;%转换像素 
figure('position',[200 200 16*s 16*s]);%确定绘图尺寸 
axes('linewidth',3, 'box', 'on', 'FontSize',11,'FontName','Times New Roman'); 
plot(XY(:,1), XY(:,2), 'ro'); hold on; 
xmin=min(XY(:, 1)); xmax=max(XY(:, 1)); 
ymin=min(XY(:, 2)); ymax=max(XY(:, 2))
ezplot(@(x,y)F(p,[x,y]), [-1+xmin,1+xmax,-1+ymin,1+ymax]); 
title('隧道断面曲线拟合'); legend('监测点', '拟合曲线');  
grid on 
p=p./p(6);  
xc=(p(2)*p(5)-2*p(3)*p(4))/(4*p(1)*p(4)-p(2)^2);%求椭圆中心坐标
yc=(p(2)*p(4)-2*p(1)*p(5))/(4*p(1)*p(4)-p(2)^2);%求椭圆中心坐标
angle=(1/2)*atan(p(2)*(p(1)-p(3)))%求椭圆倾斜角度
a=sqrt(2*(p(1)*xc^2+p(3)*yc^2+p(2)*xc*yc-1)/(p(1)+p(3)+((p(1)-p(3))^2+p(2)^2)^(1/2)))%求椭圆长轴
英语六级答案购买b=sqrt(2*(p(1)*xc^2+p(3)*yc^2+p(2)*xc*yc-1)/(p(1)+p(3)-((p(1)-p(3))^2+p(2)^2)^(1/2)))%求椭圆短轴 
u=(a-b)/a%计算椭圆扁率
%%%%%%%%%将扁率小数换算成千分数%%%%%%%%% 
m=size(u);B=[]; 
B=u*1000; 
for i=1:m 
B=[num2str(B(i)),'']; 
B=[B 13];%13为回车键的ASCII
葡萄牙语在线翻译
end 
%%%%%%%%%%%%%%%绘图加注%%%%%%%%%%%%%%%% 
hold on 
plot(xc,yc,'ro')  
text(3.0,-2.8,['扁率=',num2str(B)],'verticalAlignment','bottom','HorizontalAlignment','right','FontSize',12,'FontName','Times New Roman') 
%%%%%%%%%%%%为图中每个点加注坐标努力的英文%%%%%%%%%%%% 
for j=1:length(x) 
str=strcat('(',num2str(x(j)),',',num2str(y(j)),')');
text(x(j),y(j),str,'FontSize',10,'FontName','Times New Roman'); 
end

本文发布于:2023-06-23 07:05:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/154579.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:椭圆   拟合   转换   系数   曲线   坐标   扁率
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图