最小二乘拟合椭圆

目录

  • 1.拟合椭圆
  • 2.示例代码

在这里插入图片描述

爬虫网站自重。

1.拟合椭圆

  二次曲线的一般方程为:
A x 2 + B x y + C y 2 + D x + E y + F = 0 Ax^2+Bxy+Cy^2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+F=0

  令:
Δ = B 2 − 4 A C Δ =B^2-4AC Δ=B24AC
那么,当 Δ > 0 Δ >0 Δ>0时方程表示双曲线;当 Δ = 0 Δ =0 Δ=0时方程表示抛物线;当 Δ < 0 Δ <0 Δ<0时方程表示椭圆。
  即对于椭圆的一般方程:
A x 2 + B x y + C y 2 + D x + E y + F = 0 Ax^2+Bxy+Cy^2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+F=0
需要有约束条件:
Δ = B 2 − 4 A C < 0 Δ =B^2-4AC<0 Δ=B24AC<0
  称二元函数 f ( x , y ) f(x,y) f(x,y) 为点 ( x , y ) (x,y) (x,y)到椭圆的代数距离, f ( x , y ) f(x,y) f(x,y)的表达式为:
f ( x , y ) = A x 2 + B x y + C y 2 + D x + E y + F f(x,y)=Ax^2+Bxy+Cy^2+Dx+Ey+F f(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F
如果令向量 a ⃗ \vec{a} a 为:
a ⃗ = [ A , B , C , D , E , F ] T \vec{a}=[A,B,C,D,E,F]^T a =[ABCDEF]T
令向量 x ⃗ \vec{x} x 为:
x ⃗ = [ x 2 , x y , y 2 , x , y , 1 ] \vec{x}=[x^2,xy,y^2,x,y,1] x =[x2xyy2xy1]
那么椭圆的一般方程就可以改写为:
a ⃗ ⋅ x ⃗ = 0 \vec{a}\cdot\vec{x}=0 a x =0

  即代数距离为: a ⃗ ⋅ x ⃗ \vec{a}\cdot\vec{x} a x 。设有 N N N个数据点: ( x i , y i ) , i = 1 , 2 , 3 … N (x_i,y_i),i=1,2,3…N (xiyi)i=123N,那么如果要求最佳拟合的椭圆,便需要求 ∑ i = 1 N ( a ⃗ ⋅ X i ⃗ ) 2 \sum_{i=1}^N(\vec{a}\cdot\vec{X_i})^2 i=1N(a Xi )2的最小值。这可以运用最小二乘法求解,但所得到的结果是圆锥曲线而不是一定椭圆。
  所以,如果要获得椭圆解,就需要加入约束条件:
Δ = B 2 − 4 A C < 0 Δ =B^2-4AC<0 Δ=B24AC<0
  一般地,在一个合适的尺度下,上述形式为不等式的约束条件可以转化为形式为等式的约束条件,即有:
B 2 − 4 A C = − 1 B^2-4AC=-1 B24AC=1
  那么,如果定义一个 N × 6 N×6 N×6的矩阵 D D D
D = [ x 1 2 x 1 y 1 y 1 2 x 1 y 1 1 x 2 2 x 2 y 2 y 2 2 x 2 y 2 1 x 3 2 x 3 y 3 y 3 2 x 3 y 3 1 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ x n 2 x n y n y n 2 x n y n 1 ] D=\left[ \begin{matrix} x_1^2& x_1y_1 & y_1^2 &x_1&y_1&1 \\ x_2^2& x_2y_2 & y_2^2 &x_2&y_2&1 \\ x_3^2& x_3y_3 & y_3^2 &x_3&y_3&1 \\ \vdots & \vdots & \vdots & \vdots& \vdots& \vdots \\ x_n^2& x_ny_n & y_n^2 &x_n&y_n&1 \\ \end{matrix} \right] D= x12x22x32xn2x1y1x2y2x3y3xnyny12y22y32yn2x1x2x3xny1y2y3yn1111
  定义一个 6 × 6 6×6 6×6的矩阵 C C C
C = [ 0 0 2 0 0 0 0 − 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] C=\left[ \begin{matrix} 0& 0 & 2 & 0 & 0 & 0\\ 0 & -1 & 0 & 0 & 0 &0 \\ 2& 0 & 0 & 0 & 0 & 0 \\ 0& 0 & 0 & 0 & 0 & 0 \\ 0& 0 & 0 & 0 & 0 & 0 \\ 0& 0 & 0 & 0 & 0 & 0 \\ \end{matrix} \right] C= 002000010000200000000000000000000000
那么,约束条件就可以写为:
a ˉ T C a ˉ = 1 \bar{a}^TC\bar{a}=1 aˉTCaˉ=1
在此条件下,求下式的最小值:
∣ ∣ D a ˉ ∣ ∣ 2 = a ˉ T D T D a ˉ ||D\bar{a}||^2=\bar{a}^TD^TD\bar{a} ∣∣Daˉ2=aˉTDTDaˉ
构造拉格朗日函数为:
L ( D , λ ) = a ˉ T D T a ˉ − λ ( a ˉ T C a ˉ − 1 ) L(D,\lambda)=\bar{a}^TD^T\bar{a}-\lambda(\bar{a}^TC\bar{a}-1) L(D,λ)=aˉTDTaˉλ(aˉTCaˉ1)
为求极值,可令偏导数为0:
δ L ( D , λ ) δ a ˉ = D T D a ˉ − λ C a ˉ = 0 \frac{\delta L(D,\lambda)}{\delta \bar{a}}=D^TD\bar{a}-\lambda C\bar{a}=0 δaˉδL(D,λ)=DTDaˉλCaˉ=0
于是:
D T D a ˉ = λ C a ˉ D^TD\bar{a}=\lambda C\bar{a} DTDaˉ=λCaˉ
如果令:
S = D T D S=D^TD S=DTD
那么,等式就可以化为:
S a ⃗ = λ C a ⃗ S\vec{a}=\lambda C\vec{a} Sa =λCa
如果 S S S可逆,并且令 X = S − 1 C X=S^{-1}C X=S1C,那么可以将其转化为求取矩阵的特征值的形式:
X a ⃗ = 1 λ a ⃗ X\vec{a}=\frac{1}{\lambda}\vec{a} Xa =λ1a
可以知道,上面的矩阵 X X X为6 阶方阵,其特征多项式为6 阶多项式。
  事实上,可以证明,问题的结果对应着 X X X的特征值的绝对值最大的特征向量。
在实际操作中,是可以采用求极限的算法进行求解的。
  如果矩阵 X X X n n n个不同的特征值: λ 1 , λ 2 , λ 3 , … , λ n λ_1,λ_2,λ_3,…,λ_n λ1λ2λ3λn其对应的特征向量分别为:
a ⃗ 1 , a ⃗ 2 , a ⃗ 3 , … , a ⃗ n \vec{a}_1,\vec{a}_2,\vec{a}_3,…,\vec{a}_n a 1,a 2,a 3,,a n
  可以知道,这些特征向量线性无关,于是, n n n维向量 x ⃗ \vec{x} x 可以表示为:
x ⃗ = k 1 a ⃗ 1 + k 2 a ⃗ 2 + k 3 a ⃗ 3 + . . . + k n a ⃗ n \vec{x}=k_1\vec{a}_1+k_2\vec{a}_2+k_3\vec{a}_3+...+k_n\vec{a}_n x =k1a 1+k2a 2+k3a 3+...+kna n
那么,可以得到:
X m x ⃗ = k 1 m a ⃗ 1 + k 2 m a ⃗ 2 + k 3 m a ⃗ 3 + . . . + k n m a ⃗ n X^m\vec{x}=k_1^m\vec{a}_1+k_2^m\vec{a}_2+k_3^m\vec{a}_3+...+k_n^m\vec{a}_n Xmx =k1ma 1+k2ma 2+k3ma 3+...+knma n
  令 k k k k 1 , k 2 , k 3 … k n k_1,k_2,k_3…k_n k1,k2,k3kn 中的绝对值最大的值,其对应的特征向量为 a ⃗ \vec{a} a ,即:
k = m a x ( ∣ k 1 ∣ , ∣ k 2 ∣ , ∣ k 3 ∣ , … , ∣ k n ∣ ) k=max({|k_1|,|k_2|,|k_3|,…,|k_n|}) k=max(k1k2k3kn)
那么,当 m → + ∞ m → + ∞ m+时,有 X m m ⃗ → k m a ⃗ X^m\vec{m}→k^m\vec{a} Xmm kma 。所得的 a ⃗ \vec{a} a 即为所求的椭圆的参数所组成的向量。

2.示例代码

在这里插入代码片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js基础-练习三

九九乘法表&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthsc, initial-scale1.0"><title>九九乘法表</title><style&g…

【uniapp学习之】uni-forms必填项校验

代码块 <uni-forms ref"baseForm" :modelValue"baseFormData" label-widthauto :rules"rules"><uni-forms-item label"企业名称" required name"principalName"><uni-easyinput v-model"baseFormData.…

springboot mybatis-plus 多数据源配置(HikariCP)

1.导入依赖jar <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgres…

【JVM】浅看JVM的运行流程和垃圾回收

1.JVM是什么 JVM&#xff08; Java Virtual Machine&#xff09;就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程&#xff1a; 程序在执行之前先要把java代码转换成字节码&#xff08;class文件&#xff09;&#xff0c;JVM 首先需要把字节码通过…

金融领域:产业链知识图谱包括上市公司、行业和产品共3类实体,构建并形成了一个节点10w+,关系边16w的十万级别产业链图谱

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

前端 | ( 十三)CSS3简介及基本语法(下)| 伸缩盒模型 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 系列笔记&#xff1a; 【HTML4】&#xff08;一&#xff09;前端简介【HTML4】&#xff08;二&#xff09;各种各样的常用标签【HTML4】&#xff08;三&#xff09;表单及HTML4收尾…

微服务保护——Sentinel【实战篇二】

一、线程隔离 &#x1f349; 线程隔离有两种方式实现&#xff1a; 线程池隔离信号量隔离&#xff08;Sentinel默认采用&#xff09; 线程隔离&#xff08;舱壁模式&#xff09;&#x1f95d; 在添加限流规则时&#xff0c;可以选择两种阈值类型&#xff1a; QPS&#xff1a;…

SpringBoot-4

Spring Boot 使用 slf4j 日志 在开发中经常使用 System.out.println()来打印一些信息&#xff0c;但是这样不好&#xff0c;因为大量的使用 System.out 会增加资源的消耗。实际项目中使用的是 slf4j 的 logback 来输出日志&#xff0c;效率挺高的&#xff0c;Spring Boot 提供…

如何用3D格式转换工具HOOPS Exchange读取颜色和材料信息?

作为应用程序开发人员&#xff0c;非常希望导入部件的图形表示与它们在创作软件中的外观尽可能接近。外观可以在每个B-Rep面的基础上指定&#xff0c;而且&#xff0c;通过装配层次结构的特定路径可以在视觉外观上赋予父/子覆盖。HOOPS ExchangeHOOPS Exchange可捕获有关来自各…

新零售数字化商业模式如何建立?新零售数字化营销怎么做?

随着零售行业增速放缓、用户消费结构升级&#xff0c;企业需要需求新的价值增长点进行转型升级&#xff0c;从而为消费者提供更为多元化的消费需求、提升自己的消费体验。在大数据、物联网、5G及区块链等技术兴起的背景下&#xff0c;数字化新零售系统应运而生。 开利网络认为&…

让GPT人工智能变身常用工具-上

1.密码生成器:GPT为您创建安全密码 想象GPT作为您的个人密码生成器,负责从头到尾为您创建复杂且安全的密码。您只需要告诉他您的密码需求,比如密码的长度,是否包含大写字母、小写字母、数字或特殊字符,他会立即为您生成一个复杂但经过深度设计的密码。 例子: 我希望您…

Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24

单继承 class luban:def __init__(self, name):self.name nameself.skill "摸鱼飞弹"self.damageLevel 20def attack(self):print("{} 使用了技能{} &#xff0c;给敌方带来了极大的困扰\n""并有{}% 的机会造成一击必杀的效果".format(self.…

Docker介绍以及实战教程

Docker简介 Docker为什么出现 从事软件开发的朋友&#xff0c;可能经常会碰到以下场景&#xff1a;运维&#xff1a;你这程序有Bug啊&#xff0c;怎么跑不起来啊&#xff01;开发&#xff1a;我机子上能跑啊&#xff0c;你会不会用啊究其原因还是开发环境与生产环境不同造成的…

【java安全】RMI

文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为&#xff1a;Remote Method Invocation 远程方法调用&#xff0c;是java独立的一种机制。 RM…

SoapUI、Jmeter、Postman三种接口测试工具的比较分析

前段时间忙于接口测试&#xff0c;也看了几款接口测试工具&#xff0c;简单从几个角度做了个比较&#xff0c;拿出来与诸位分享一下。本文从多个方面对接口测试的三款常用工具进行比较分析&#xff0c;以便于在特定的情况下选择最合适的工具&#xff0c;或者使用自己编写的工具…

12.(开发工具篇vscode+git)vscode 不能识别npm命令

1&#xff1a;vscode 不能识别npm命令 问题描述&#xff1a; 解决方式&#xff1a; &#xff08;1&#xff09;右击VSCode图标&#xff0c;选择以管理员身份运行&#xff1b; &#xff08;2&#xff09;在终端中执行get-ExecutionPolicy&#xff0c;显示Restricted&#xff…

【主成分分析(PCA)】

主成分分析&#xff08;PCA&#xff09; 摘要 在现代数据科学中&#xff0c;维度灾难常常是数据处理与分析的一大难题。主成分分析&#xff08;PCA&#xff09;是一种广泛使用的数据降维技术&#xff0c;它通过将原始数据转换为新的低维空间&#xff0c;保留最重要的信息&…

C国演义 [第十一章]

第十一章 有效的字母异位词题目理解代码 两数之和题目理解(暴力篇)代码题目理解(哈希篇)代码 有效的字母异位词 力扣链接 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;…

git常用命令

git安装后-指定名称和邮箱 $ git config --global user.name “Your Name” $ git config --global user.email “emailexample.com” 本地初始化GIT 仓库: #基于远程仓库克隆至本地 git clone <remote_url> #当前目录初始化为git 本地仓库 git init “directory” 把文…

Linux:多进程和多线程回环socket服务器和客户端

多进程socket服务器代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <ctype.h> #include <sys/wait.h> #i…