您的位置:首页 > 编程语言 > MATLAB

利用MATLAB进行二次曲线方程的正交变换化简

2018-12-19 16:40 85 查看

我们知道平面上二次曲线的一般方程是:
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) a11​x2+2a12​xy+a22​y2+2a1​x+2a2​y+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θ)=a12​a11​−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​=∣∣∣∣​a11​a12​​a12​a22​​∣∣∣∣​,(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​=∣∣∣∣∣∣​a11​a12​a1​​a12​a22​a2​​a1​a2​a0​​∣∣∣∣∣∣​,(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​=∣∣∣∣​a11​a1​​a1​a0​​∣∣∣∣​+∣∣∣∣​a22​a2​​a2​a0​​∣∣∣∣​,(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λ1​x∗2+λ2​y∗2+I1​I3​​=0其中λ1,λ2是多项式其中\lambda_{1},\lambda_{2}是多项式其中λ1​,λ2​是多项式λ2−I1λ+I2的两个实根\lambda^2-I_{1}\lambda+I_{2}的两个实根λ2−I1​λ+I2​的两个实根
双曲型
I2&lt;0I_{2}&lt;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^{*}=0I1​y∗2±2I1​−I3​​​x∗=0
同上 (7) 一对平行直线;
(8) 一对虚平行直线;
(9) 一对重合直线
I3=0,K1&lt;0I_{3}=0,K_{1}&lt;0I3​=0,K1​<0I3=0,K1&gt;0I_{3}=0,K_{1}&gt;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}}=0I1​y∗2+I1​K1​​=0

【表1】 二次曲线的不变量与曲线的类型和形状的关系

2.代码实现

MATLAB 中可以提取方程左端展开后的多项式的系数,在由系数计算不变量和半不变量,对比【表1】得到二次曲线方程的化简后方程,代码如下:

在运行时输入二次曲线方程 f(x,y) = 0 的左端,运行结果示例如下图所示:

代码文件可以在下面链接中下载:
https://download.csdn.net/download/m0_43484109/10861992

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: