如何用matlab计算椭圆周长求椭圆x^2/12^2+y^2/8^2=1的周长?

17:10 提问
使用matlab画出椭圆图形以及求出方程
已知椭圆上的x,y的坐标矩阵为:x=[0.5 0.5 1.1 1.2 1.5 1.5 1.3];
y=[0.5 -0.256 0.4 -0.2 0.5 0.1 0.4 0.0829];
使用matlab软件确定椭圆的位置,方程。求大神帮忙编写代码!
0关注|231收录
254关注|837收录
1396关注|1337收录怎样用MATLAB采用模型(x^2)/(a^2)+(y^2)/(25-a^2)=1画一组椭圆?谁能帮我搞定这几道matlat作业?1)分别运用while和for循环求fibonacci数组的元素满足fibonacci规则:a(k+2)=a(k)+a(k+1),(k=1,2,……);且a(1)=a(2)=1。先要求数组中第一个大于10000的元素。2)学生的成绩管理,用来演示switch结构的应用。
#includemain(){int a[3][4],i,j,max[3],min[3];printf("请输入12个数:\n");for(i=0;i
太难了,建议直接问专业老师或者看完参考书再说
第一题:t=0:pi/100:2* for a=.5:.5:4.5 plot(a*cos(t),sqrt(25-a^2)*sin(t)); hold on end 第二题:例
使用switch结构判断学生成绩的等级,90分以上为优,80~90为良,70~80为中,60~70为及格,60分以下为不及格。>> sc...
a=[1 1];%定义初始for i = 1:10000
a(end+1) = a(end -1)+ a(end); %你所定义的数列
if a(end)>10000
%如果满足要求,退出
endenda(end - 1)
%最后一个小于10000的元素值a(en...
为您推荐:
扫描下载二维码用matlab求椭圆周长,数值积分法。椭-中国学网-中国IT综合门户网站
> 信息中心 >
用matlab求椭圆周长,数值积分法。椭
来源:互联网 发表时间: 20:26:37 责任编辑:鲁晓倩字体:
为了帮助网友解决“用matlab求椭圆周长,数值积分法。椭”相关的问题,中国学网通过互联网对“用matlab求椭圆周长,数值积分法。椭”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:用matlab求椭圆周长,数值积分法。椭圆形式如下:x^2/4+y^2/9=1,具体解决方案如下:解决方案1: 半椭圆y=3√(1-x^2/4)椭圆周长=2×∫√(1+y′2)dxmatlab&& syms x&& y=3*(1-x^2/4)^(1/2);&& y1=diff(y,x);&& f=(1+y1^2)^(1/2)f =(1 - (9*x^2)/(16*(x^2/4 - 1)))^(1/2) && ss=@(x)(1 - (9*x.^2)./(16*(x.^2/4 - 1))).^(1/2)ss =
@(x)(1-(9*x.^2)./(16*(x.^2/4-1))).^(1/2)&& S=2*quad(ss,-2,2)S = 15.8655
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号Matlab怎么绘制x^2+y^2=1曲线_百度知道
Matlab怎么绘制x^2+y^2=1曲线
我刚刚接触Matlab,很多东西都不懂.希望高手帮忙.
提问者采纳
x^2+y^2=1&#39.5 1,.5 1,[-1?si=1" target="_blank">/question/:// ezplot(&#39;&gt:&gt.baidu。【3】但还有更简单的方法.baidu?si=1【2】风飘水渺回答正确【1】zhaoyucai答非所问.5]).html.html,涉嫌抄袭.com/question/。<a href="http://zhidao.5 -1
提问者评价
谢谢化工了.不过飘渺的答案为什么是椭圆啊?可不可以修改一下啊.也让我更了解一点.
其他类似问题
6人觉得有用
为您推荐:
matlab的相关知识
其他2条回答
& plot(x;&gt?还有sin(x)&#39,y,[-pi pi]) 这些够用了吧;:0,y) 或&gthehe
【1】ezplot &gt,cos(x)) 【3】fplot &&gt,x.1;ezplot(&#39:pi & plot(x;& x=-&& y=sin(x) &sin(x)&#39、STEM等;) 【2】plot & fplot(&#39
t=0:0.05:2*x=cos(t);y=sin(t);plot(x,y);axis([-1.5 1.5 -1 1]);最后一句话的作用是缩放一下x y轴 使得画图区域接近为正方形;ps:楼上答非所问,没意思,不会就不要回答啊
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1.最小二乘拟合
最小二乘拟合是一种数学上的近似和优化,利用已知的数据得出一条直线或者曲线,使之在坐标系上与已知数据之间的距离的平方和最小。
2.RANSAC算法
参见王荣先老师的博文
3,直线拟合
建立模型时利用直线的一般方程AX+BY+C=0,随机选取两点构建直线模型,计算每个点到此直线的TLS(Total Least Square),TLS小于一定阈值时的点为符合模型的点,点数最多时的模型即为最佳直线模型。再根据此时的直线参数画出最终拟合直线。
4.椭圆拟合
建立模型时利用椭圆的定义方程:dist(P,A)+dist(P,B)=DIST,其中P为椭圆上一点,A和B为椭圆两焦点。随机选取三点A,B,P构建椭圆模型,计算每个点到此两焦点的距离和与DIST的差值,差值小于一定阈值时的点为符合模型的点,点数最多时的模型即为最佳椭圆模型,再根据符合条件的点,利用椭圆一般方程Ax2+Bxy+Cy2+Dx+Ey+F=0 和得到符合点进行系数拟合,根据函数式画出最终拟合椭圆。
5.matlab代码
(1)最小二乘拟合
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Input points with mouse,Least-squares fit of lines to
2012-10-12
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 鼠标输入点,enter键结束
axis([-10 10 -10 10]);
%读取坐标直到按下回车键,返回坐标点的x,y坐标
num=length(x);
%计算点的个数
%% 直接用最小二乘进行拟合
%通过最小化误差的平方和寻找数据的最佳函数匹配
[p1,s1]=polyfit(x,y,1);
%n=1为直线拟合 x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量
[p2,s2]=polyfit(x,y,num-2); %n&1为曲线拟合,找到次数为n的多项式,对于数据点集(x,y),满足差的平方和最小
[p3,s3]=polyfit(x,y,num-1); %x必须是单调的。矩阵s用于在polyval中来估计误差。
xcurve=-10:2:10;
%在这些点处求多项式的值
p1curve=polyval(p1,xcurve); %多项式曲线求值,返回对应自变量xcurve在给定系数P的多项式的值
p2curve=polyval(p2,xcurve);
p3curve=polyval(p3,xcurve);
plot(xcurve,p1curve,'g-',xcurve,p2curve,'b-',...
xcurve,p3curve,'r-',x,y,'*');
title('不同次数的最小二乘拟合');
legend('degree 1','degree num-2','degree num-1','points');
&(2)基于RANSAC的直线拟合
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RANSAC fit of lines to 2D points
2012-10-11
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 随机点生成
g_NumOfPoints = 500;
g_ErrPointPart = 0.4;
g_NormDistrVar = 1;
% 标准偏差
% 生成随机点
theta = (rand(1) + 1) * pi/6;
R = ( rand([1 g_NumOfPoints]) - 0.5) * 100;
DIST = randn([1 g_NumOfPoints]) * g_NormDistrV
Data = [cos(theta); sin(theta)] * R + [-sin(theta); cos(theta)] * DIST;
Data(:, 1:floor(g_ErrPointPart * g_NumOfPoints)) = 2 * [max(abs(Data(1,:))), 0; 0, max(abs(Data(2,:)))] *...
(rand([2 floor(g_ErrPointPart * g_NumOfPoints)]) - 0.5);
plot(Data(1, :), Data(2, :), '.', 'Tag', 'DATA');
%% RANSAC拟合
% 拟合模型初始化
nSampLen = 2;
%设定模型所依据的点数
nIter = 50;
%最大循环次数
dThreshold = 2;
nDataLen = size(Data, 2);
RANSAC_model = NaN;
%跳过缺失模型
RANSAC_mask = zeros([1 nDataLen]);
%全0矩阵,1表示符合模型,0表示不符合
nMaxInlyerCount = -1;
for i = 1:nIter
抽样,选取两个不同的点
SampleMask = zeros([1 nDataLen]);
while sum( SampleMask ) ~= nSampLen
ind = ceil(nDataLen .* rand(1, nSampLen - sum(SampleMask))); %rand产生随机数,ceil向离它最近的大整数圆整
SampleMask(ind) = 1;
Sample = find( SampleMask );
%找出非零元素的索引值,即建立模型的点
%% 建立模型,并查找符合模型的点
ModelSet = feval(@TLS, Data(:, Sample));
%计算所有符合模型的点的最小二乘
for iModel = 1:size(ModelSet, 3)
CurModel = ModelSet(:, :, iModel);
%当前模型对应的直线参数
CurMask =( abs( CurModel * [D ones([1 size(Data, 2)])])& dThreshold);%到直线距离小于阈值的点符合模型,标记为1
nCurInlyerCount = sum(CurMask);
%计算符合直线模型的点的个数
%% 选取最佳模型
if nCurInlyerCount & nMaxInlyerCount
%符合模型的点数最多的模型即为最佳模型
nMaxInlyerCount = nCurInlyerC
RANSAC_mask = CurM
RANSAC_model = CurM
%% 画最佳模型的拟合结果
MinX=min(Data(1, :));
MaxX=max(Data(1, :));
MinX_Y=-(RANSAC_model(1).*MinX+RANSAC_model(3))./RANSAC_model(2);
MaxX_Y=-(RANSAC_model(1).*MaxX+RANSAC_model(3))./RANSAC_model(2);
plot([MinX MaxX],[MinX_Y MaxX_Y],'r-');
title('ransac在噪声情况下的直线拟合');
%% 用RANSAC方法拟合原理
RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。
RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
5.最后,通过估计局内点与模型的错误率来评估模型。
这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。
%% 问题分析
1.关于画直线:根据抽取的两点画最终直线,结果不稳定,每次运行后的直线都会有很大偏差。
程序中已经计算出了直线的参数,根据Ax+By+C=0,可以选择数据点中最左边的点和最右边的点确定最终直线,比较稳定。
2.调用函数A时,若有函数B做参数,则在函数B前加@,函数B的参数则另外传送,通过feval可将函数的执行方式统一起来。
3.关于随机点生成:rand的使用灵活多变。
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Calculate Total Least Squares of input data
2012-10-11
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Total Least Squares
%Return: [a,b,c] - line in a * x + b * y + c = 0 form
where a ^ 2 + b ^ 2 = 1
TLS(X,Y) - approximates ALL points in array by one line
function line = TLS(Data)
if any( size(Data) == 0)
Line = [0, 0, 0];
X = Data(1, :);
Y = Data(2, :);
len = length(X);
if size(X) ~= size(Y)
M = [ mid(X .^ 2) - mid(X) ^ 2, sum(X .* Y) / len - mid(X) * mid(Y);...
sum(X .* Y) / len - mid(X) * mid(Y), mid(Y .^ 2) - mid(Y) ^ 2];
[ev,tmp] = eig(M);
if ErrFunc(X, Y, ev(:, 1)) & ErrFunc(X, Y, ev(:, 2))
line = [ev(1,ind), ev(2,ind),...
-ev(1,ind) * mid(X) - ev(2,ind) * mid(Y)];
% Help function, calculates an error
function e = ErrFunc(X,Y,L)
c = -L(1) * mid(X) - L(2) * mid(Y);
for i = 1:length(X)
e = e + ( L(1) * X(i) + L(2) * Y(i) + c )^2;
if (L(1) * X(i) + L(2) * Y(i) + c )^2 & maxE
maxE = (L(1) * X(i) + L(2) * Y(i) + c )^2;
% Middle value of vector X
function l = mid(X)
if length(X) & 0
l = sum(X) / length(X);
(3)基于RANSAC的椭圆拟合
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ellipsefit.m
Least-squares fit of ellipse to 2D points
2012-10-12
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
生成 带噪声的椭圆
% 参数初始化
g_NumOfPoints = 500;
g_ErrPointPart = 0.4;
g_NormDistrVar = 3;
% 标准偏差
a=10;b=20;
%% 椭圆生成
beta = angle * (pi / 180);
alpha = linspace(0, 360, g_NumOfPoints) .* (pi / 180);
X = (a * cos(alpha) * cos(beta)- b * sin(alpha) * sin(beta) )+wgn(1,length(alpha),g_NormDistrVar^2,'linear');
Y = (a * cos(alpha) * sin(beta)+ b * sin(alpha) * cos(beta) )+wgn(1,length(alpha),g_NormDistrVar^2,'linear');
Data=[X;Y];
plot(Data(1, :), Data(2, :), '.', 'Tag', 'DATA');
%% RANSAC椭圆拟合
%椭圆一般方程:Ax2+Bxy+Cy2+Dx+Ey+F=0
%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)
参数初始化
nSampLen = 3;
%设定模型所依据的点数
nDataLen = size(Data, 2);
nIter = 50;
%最大循环次数
dThreshold = 2;
nMaxInlyerCount=-1;
A=zeros([2 1]);
B=zeros([2 1]);
P=zeros([2 1]);
for i = 1:nIter
SampleMask = zeros([1 nDataLen]);
while sum( SampleMask ) ~= nSampLen
ind = ceil(nDataLen .* rand(1, nSampLen - sum(SampleMask))); %抽样,选取nSampLen个不同的点
SampleMask(ind) = 1;
Sample = find( SampleMask );
%找出非零元素的索引值,即建立模型的点
建立模型,存储建模需要的坐标点,焦点和过椭圆的一个点
%椭圆定义方程:到两定点之间距离和为常数
A(:,1)=Data(:,ind(1));
B(:,1)=Data(:,ind(2));
P(:,1)=Data(:,ind(3));
%椭圆上一点
DIST=sqrt((P(1,1)-A(1,1)).^2+(P(2,1)-A(2,1)).^2)+sqrt((P(1,1)-B(1,1)).^2+(P(2,1)-B(2,1)).^2);
nCurInlyerCount=0;
%初始化点数为0个
是否符合模型?
for k=1:g_NumOfPoints
CurModel=[A(1,1)
pdist=sqrt((Data(1,k)-A(1,1)).^2+(Data(2,k)-A(2,1)).^2)+sqrt((Data(1,k)-B(1,1)).^2+(Data(2,k)-B(2,1)).^2);
CurMask =(abs(DIST-pdist)& dThreshold);
%到直线距离小于阈值的点符合模型,标记为1
nCurInlyerCount =nCurInlyerCount+CurM
%计算符合椭圆模型的点的个数
if(CurMask==1)
xx =[xx,Data(:,k)];
%% 选取最佳模型
if nCurInlyerCount & nMaxInlyerCount
%符合模型的点数最多的模型即为最佳模型
nMaxInlyerCount = nCurInlyerC
Ellipse_mask = CurM
Ellipse_model = CurM
Ellipse_points = [A B P];
Ellipse_x =
%% 由符合点拟合椭圆
%椭圆一般方程:Ax2+Bxy+Cy2+Dx+Ey+F=0
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);
p0=[1 1 1 1 1 1];
x=Ellipse_x';
pr=nlinfit(x,zeros(size(x,1),1),F,p0);
% 拟合系数,最小二乘方法
xmin=min(x(:,1));
xmax=max(x(:,1));
ymin=min(x(:,2));
ymax=max(x(:,2));
%% 画点作图
plot(Ellipse_points(1,:),Ellipse_points(2,:),'r*');
plot(Ellipse_x(1,:),Ellipse_x(2,:),'yo');
ezplot(@(x,y)F(pr,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
title('RANSAC椭圆拟合');
legend('样本点','抽取点','符合点','拟合曲线')
%% 问题分析
1.关于如何生成随机点:在标准椭圆基础上,添加高斯白噪声--wgn();
2.关于如何建立椭圆模型:
方案一:椭圆一般方程:Ax2+Bxy+Cy2+Dx+Ey+F=0,认为由5个点确定一个椭圆,则用5个点代入方程式去做椭圆拟合,结果大多数
情况下画出双曲线,放弃;
方案二:利用椭圆定义:到两定点之间距离和为常数2a,选择平面内3个点,两个焦点,一个过椭圆的点,确定椭圆。
3.关于如何筛选符合条件的点:此时计点到椭圆距离过于复杂,用定义,到两焦点距离和与2a相差小于一定阈值,则符合。
4.关于拟合函数:使用nlinfit,对于输入参数的维数有要求,需要x为N*P维,y为n*1维,注意是列向量。
5.关于如何画椭圆:与一般的画图指定X和Y不同,此时要画的是函数图形,在网上查到,先建立函数F,再利用
ezplot(@(x,y)F(pr,[x,y]))可画出函数图形。
6.数据为随机产生,程序每次运行结果会不一样,在B(:,1)=Data(:,ind(2));时有时会数组越界出错,但单步调试时没问题,
原因还未找到。
6.学习经验(1)不能太依赖于现有函数,要多自己想算法,即便借用别人的函数,也要弄清楚原理及调用方式;
(2)matlab函数库不熟悉,要多用help;
(3)编写程序时要先总体规划好程序架构,模块化,条理清楚,自己要懂得自己程序的每一步原理。
(4)理论的力量是无穷的,要在理论深入理解的基础上进行代码优化。
阅读(...) 评论()}

我要回帖

更多关于 椭圆的周长 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信