当前位置: 首页 > 程序语言 >F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)

F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)

作者 ww汪红
来源: 小木虫 550 11 举报帖子
+关注

F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)
这个公式是把离散点拟合成椭圆的一个公式。有哪位同学能给我讲一下这个公式是怎么来的,我不太理解。 返回小木虫查看更多

今日热帖
  • 精华评论
  • guo_zy_123

    这应该不是拟合椭圆的公式吧,

    这是个匿名函数啊

    matlab中的函数写法
    可以有三种方法创建:

      (1)inline函数:
      f=inline('3*x+1','x')

      可以得到:f=
      Inline function :
      f(x)=3*x+1

      输入t=0:3;
      f(t)

      ans =
      1 4 7 10

      (2)匿名函数:
      f=@(x)3*x+1

      可以得到:f=
      @(x)3*x+1

      输入t=0:3;
      f(t)

      ans =
      1 4 7 10

      (3)创建M-函数
      新建m文件,输入:
      function f=equation(x)
      f=3*x+1;

      保存m文件到工作文件夹;

      调用:
      输入t=0:3;
      f=equation(t)

      ans =
      1 4 7 10

    你这个属于第二种,是个匿名函数
    输入p和x就能出对应函数值,不过x的格式是个椭圆

    p 输入4个系数
    x的第一列是当作X,x的第二列当作Y

    方程就是 P1*X^2 + P2 *X*Y + P3*Y ^2 + P4

    这个函数描述的是 这个东西

  • guo_zy_123

    当然你认为是拟合椭圆也行

    反正就是看F 和 0的大小关系呗,如果是这个椭圆上的点, F的值会很接近0

    通过对这个式子,调整4个系数P,让F每一项都趋近于0 就接近 椭圆了

  • getengqing

    引用回帖:
    2楼: Originally posted by guo_zy_123 at 2015-12-24 08:43:49
    这应该不是拟合椭圆的公式吧,

    这是个匿名函数啊

    matlab中的函数写法
    可以有三种方法创建:

      (1)inline函数:
      f=inline('3*x+1','x')

      可以得到:f=
      Inline function :
      f(x)=3 ...

    那怎么和上述输入t一样输入呢?

  • dingd

    这个方程:P1*X^2 + P2 *X*Y + P3*Y ^2 + P4=1
    可以理解是一个中心点在原点的旋转椭圆

  • guo_zy_123

    引用回帖:
    4楼: Originally posted by getengqing at 2015-12-24 09:00:25
    那怎么和上述输入t一样输入呢?...

    按楼主的最早的描述方程

    matlab输入应该是

    %匿名函数
    F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4);
    %输入椭圆系数
    p = [p1,p2,p3,p4];%请将用实际的数代换p1等
    %输入采集到的数据
    X = [x11,x12; x21,x22;x31,x32.....];%用采集到的数据代换
    %求解F
    ans = F(p,X);
    %此时求解的 ans是个列向量,每个元素是采集到的点与对应P中系数椭圆方程
    %的偏差,这个ans单个元素都趋近与0时,这组系数p就是你要拟合的椭圆方程系数

  • guo_zy_123

    楼主记得给金币!!要诚实

  • guo_zy_123

    %给你个更加详细椭圆函数的拟合
    %复制到matlab运行
    %记得给金币
    %记得给金币
    %记得给金币(重要的事情说三遍)
    clear; clc; 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);
    % 离散数据点
    x=[1.7729 1.9228
       1.7338 1.9072
       2.0539 1.6137
       2.0656 1.6412
       1.8611 1.48765
       1.9005 1.4971
       2.0732 1.6546
       1.8338 1.9405
       1.9375 1.5104
       1.6878 1.5177
       1.7031 1.5097
       1.9577 1.5201
       1.9872 1.5437
       2.0341 1.5805
       2.0723 1.6546
       2.0681 1.8284
       2.0557 1.8483
       2.0491 1.5651
    ];
    p0=[1 1 1 1 1 1];
    warning off
    % 拟合系数,最小二乘方法
    p=nlinfit(x,zeros(size(x,1),1),F,p0);
    plot(x(:,1),x(:,2),'ro');
    hold on;
    xmin=min(x(:,1));
    xmax=max(x(:,1));
    ymin=min(x(:,2));
    ymax=max(x(:,2));
    % 作图
    ezplot(@(x,y)F(p,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
    title('曲线拟合');
    legend('样本点','拟合曲线'),

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓