利用MATLAB进行二次曲线方程的正交变换化简
我们知道平面上二次曲线的一般方程是:
a11x2+2a12xy+a22y2+2a1x+2a2y+a0=0,(1)
a_{11}x^2+2a_{12}xy+a_{22}y^2+2a_{1}x+2a_{2}y+a_{0}= 0, (1)
a11x2+2a12xy+a22y2+2a1x+2a2y+a0=0,(1)
其中a11,a12,a22a_{11},a_{12},a_{22}a11,a12,a22不全为零。
我们常用的一个方法是先利用转轴变换,坐标旋转角则可用以下公式得到:
cot(2θ)=a11−a22a12,(2)cot(2\theta)=\frac{a_{11}-a_{22}}{a_{12}} , (2)cot(2θ)=a12a11−a22,(2)
但是之后的过程略显复杂,故本文采用不变量的方法来对二次曲线方程进行化简,并将结合MATLAB进行实现。
1.数学原理
二次曲线的不变量和半不变量为:
I1=a11+a22,(3)
I_{1}=a_{11}+a_{22},(3)
I1=a11+a22,(3)
I2=∣a11a12a12a22∣,(4)
I_{2}=\left|
\begin{matrix}
a_{11} & a_{12} \\
a_{12} & a_{22} \\
\end{matrix}
\right|,(4)
I2=∣∣∣∣a11a12a12a22∣∣∣∣,(4)
I3=∣a11a12a1a12a22a2a1a2a0∣,(5)
I_{3}=\left|
\begin{matrix}
a_{11}&a_{12}&a_{1}\\
a_{12}&a_{22}&a_{2}\\
a_{1}&a_{2}&a_{0}\\
\end{matrix}
\right|,(5)
I3=∣∣∣∣∣∣a11a12a1a12a22a2a1a2a0∣∣∣∣∣∣,(5)
K1=∣a11a1a1a0∣+∣a22a2a2a0∣,(6)
K_{1}=\left|
\begin{matrix}
a_{11} & a_{1} \\
a_{1} & a_{0} \\
\end{matrix}
\right|+\left|
\begin{matrix}
a_{22} & a_{2} \\
a_{2} & a_{0} \\
\end{matrix}
\right|,(6)
K1=∣∣∣∣a11a1a1a0∣∣∣∣+∣∣∣∣a22a2a2a0∣∣∣∣,(6)
可以由不变量和半不变量就能完全确定二次曲线的类型和形状,即为二次曲线的化简式,如下表【1】所示:
型别 | 类别 | 识别标记 | 化简后方程 |
---|---|---|---|
椭圆型 I2>0I_{2}>0I2>0 |
(1) 椭圆; (2) 虚椭圆; (3) 一个点 |
I3与I1异号I_{3}与I_{1}异号I3与I1异号I3与I1同号I_{3}与I_{1}同号I3与I1同号I3=0I_{3}=0I3=0 | λ1x∗2+λ2y∗2+I3I1=0\lambda_{1}x^{*^{2}}+\lambda_{2}y^{*^{2}}+\frac{I_{3}}{I_{1}}=0λ1x∗2+λ2y∗2+I1I3=0其中λ1,λ2是多项式其中\lambda_{1},\lambda_{2}是多项式其中λ1,λ2是多项式λ2−I1λ+I2的两个实根\lambda^2-I_{1}\lambda+I_{2}的两个实根λ2−I1λ+I2的两个实根 |
双曲型 I2<0I_{2}<0I2<0 |
(4) 双曲线; (5) 一对相交直线 |
I3≠0I_{3}≠0I3̸=0I3=0I_{3}=0I3=0 | 同上 |
抛物型 I2=0I_{2}=0I2=0 |
(6) 抛物线 | I3≠0I_{3}≠0I3̸=0 | I1y∗2±2−I3I1x∗=0I_{1}y^{*^{2}}±2\sqrt{\frac{-I_{3}}{I_{1}}}x^{*}=0I1y∗2±2I1−I3x∗=0 |
同上 | (7) 一对平行直线; (8) 一对虚平行直线; (9) 一对重合直线 |
I3=0,K1<0I_{3}=0,K_{1}<0I3=0,K1<0I3=0,K1>0I_{3}=0,K_{1}>0I3=0,K1>0I3=0,K1=0I_{3}=0,K_{1}=0I3=0,K1=0 | I1y∗2+K1I1=0I_{1}y^{*^{2}}+\frac{K_{1}}{I_{1}}=0I1y∗2+I1K1=0 |
【表1】 二次曲线的不变量与曲线的类型和形状的关系
2.代码实现
MATLAB 中可以提取方程左端展开后的多项式的系数,在由系数计算不变量和半不变量,对比【表1】得到二次曲线方程的化简后方程,代码如下:
在运行时输入二次曲线方程 f(x,y) = 0 的左端,运行结果示例如下图所示:
代码文件可以在下面链接中下载:
https://download.csdn.net/download/m0_43484109/10861992
- 利用希尔伯特变换进行的单边带幅度调制matlab程序
- 利用matlab进行简单的贝叶斯网络构建
- 利用Matlab以蚁群算法(Ant Colony Algorithm)求解不闭合的旅行商问题(Travelling Salesman Problem, TSP)并进行可视化
- matlab 图像灰度值变换至指定范围,求转换方程
- 利用matlab的PDE工具箱求解Neumann边界的Poisson方程之2
- 利用MATLAB进行符号计算
- 利用matlab对xml文件进行批量处理
- [新手学Caffe之三]如何在Caffe中加入新的layer并利用Matlab进行调试
- 利用matlab自带函数对字符串进行Huffman编码
- 利用GMM进行无监督face recognition的MATLAB代码及分析
- 利用Matlab解方程
- 利用MATLAB进行直线拟合的程序
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【福利-内附源码与数据库】(一)
- 利用MATLAB对Rosbag中数据的进行提取(特别是当bag中存在图片信息的时候)
- 利用Matrix对图片进行变换以及实现动画方法浅谈
- 利用MATLAB 2016a进行BP神经网络的预测(含有神经网络工具箱)
- 利用MATLAB的GUI设计的一款可以进行FOCT电流比差计算的仿真平台
- 利用回归方程进行预测
- 利用matlab的PDE工具箱求解Neumann边界的Poisson方程
- 利用matlab怎样进行频谱分析