利用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) a11?x2+2a12?xy+a22?y2+2a1?x+2a2?y+a0?=0,(1)
其中a11,a12,a22a_{11},a_{12},a_{22}a11?,a12?,a22?不全為零。
我們常用的一個(gè)方法是先利用轉(zhuǎn)軸變換,坐標(biāo)旋轉(zhuǎn)角則可用以下公式得到:
cot(2θ)=a11?a22a12,(2)cot(2\theta)=\frac{a_{11}-a_{22}}{a_{12}} , (2)cot(2θ)=a12?a11??a22??,(2)
但是之后的過(guò)程略顯復(fù)雜,故本文采用不變量的方法來(lái)對(duì)二次曲線方程進(jìn)行化簡(jiǎn),并將結(jié)合MATLAB進(jìn)行實(shí)現(xiàn)。
1.數(shù)學(xué)原理
二次曲線的不變量和半不變量為:
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)
可以由不變量和半不變量就能完全確定二次曲線的類(lèi)型和形狀,即為二次曲線的化簡(jiǎn)式,如下表【1】所示:
| 橢圓型 I2>0I_{2}>0I2?>0 | (1) 橢圓; (2) 虛橢圓; (3) 一個(gè)點(diǎn) | I3與I1異號(hào)I_{3}與I_{1}異號(hào)I3?與I1?異號(hào)I3與I1同號(hào)I_{3}與I_{1}同號(hào)I3?與I1?同號(hào)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是多項(xiàng)式其中\(zhòng)lambda_{1},\lambda_{2}是多項(xiàng)式其中λ1?,λ2?是多項(xiàng)式λ2?I1λ+I2的兩個(gè)實(shí)根\lambda^2-I_{1}\lambda+I_{2}的兩個(gè)實(shí)根λ2?I1?λ+I2?的兩個(gè)實(shí)根 |
| 雙曲型 I2<0I_{2}<0I2?<0 | (4) 雙曲線; (5) 一對(duì)相交直線 | 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) 一對(duì)平行直線; (8) 一對(duì)虛平行直線; (9) 一對(duì)重合直線 | 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}}=0I1?y?2+I1?K1??=0 |
【表1】 二次曲線的不變量與曲線的類(lèi)型和形狀的關(guān)系
2.代碼實(shí)現(xiàn)
MATLAB 中可以提取方程左端展開(kāi)后的多項(xiàng)式的系數(shù),在由系數(shù)計(jì)算不變量和半不變量,對(duì)比【表1】得到二次曲線方程的化簡(jiǎn)后方程,代碼如下:
在運(yùn)行時(shí)輸入二次曲線方程 f(x,y) = 0 的左端,運(yùn)行結(jié)果示例如下圖所示:
代碼文件可以在下面鏈接中下載:
https://download.csdn.net/download/m0_43484109/10861992
總結(jié)
以上是生活随笔為你收集整理的利用MATLAB进行二次曲线方程的正交变换化简的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决github无法访问的问题
- 下一篇: (五十五)iOS多线程之GCD