【问题标题】:Fitting an ellipse with no tilt on data拟合数据不倾斜的椭圆
【发布时间】:2014-11-12 20:52:56
【问题描述】:

我想在我的数据上拟合一个不倾斜的椭圆。 这是一个没有倾斜的椭圆方程:

a*x^2 + b*y^2 + c*x + d*y = e

我发现这个解决方案 (https://stackoverflow.com/a/12717181/3179989) 很有趣,但不确定如何更改参数来解决我的问题。

感谢任何帮助。

编辑:这是我正在使用的代码:

[y.^2,x,y,ones(numel(x),1)]\x.^2

ans =
1.0e+04 *
-0.0000
 0.0168
-0.0014
 3.6390

【问题讨论】:

  • 你的变量是abcde你有观察xy,你可以很容易地从中生成x^2和@98765433并使用最小二乘法解决
  • 您可以参考任何代码或链接作为示例吗?
  • 只需按照您链接到的线程中的示例进行操作
  • 所以我需要将 x.*y 更改为零(numel(x),1)。是这样吗?
  • 您链接到的问题与您的问题重复。 “不确定如何更改参数”不是很具体。您实际尝试过什么,您的代码在哪里?试着在铅笔和纸上写下我们的两种表格。我相信你可以将一个转换为另一个。尝试使用已知解决方案的测试用例。

标签: matlab curve-fitting ellipse


【解决方案1】:

这似乎确实有效:

%// Creating some test data
x=sin(pi*(2*rand(50,1)-1))+(2*rand(size(x))-1)*.5;x=x./max(abs(x));
y=(sqrt(1-x.^2)+(2*rand(size(x))-1)*.5).*sign(rand(size(x))-0.5)+.5*x;

%// Setup Van der Monde matrices and solve equations
A=[y.^2,x.*y,x,y,ones(numel(x),1)]\x.^2
B=[y.^2,x,y,ones(numel(x),1)]\x.^2

plot(x,y,'o') %// Plot initial data
hold on
%// Plotting results the lazy way!
[X,Y]=meshgrid(1.5*(min([x;y]):.001:max([x;y])));
contour(X,Y,-X.^2+A(1)*Y.^2+A(2)*X.*Y+A(3)*X+A(4)*Y+A(5),[0 0],'b')
contour(X,Y,-X.^2+B(1)*Y.^2+B(2)*X+B(3)*Y+B(4),[0 0],'k')
hold off

蓝色是原始椭圆,黑色是未旋转的椭圆

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2017-02-03
    相关资源
    最近更新 更多