Fitování kružnice

Obecná rovnice kuželosečky je \begin{equation}\label{eq} ax^2 + by^2 + cxy +dx +ey +f = 0, \end{equation} kde $a,b,c,d,e,f$ (které nejsou všechny zároveň $0$) určují kuželosečku a bod $(x,y)$ leží na dané kuželosečce, právě tehdy když vyhovuje rovnici \ref{eq}. Pro kružnici se \ref{eq} redukuje na \begin{equation}\label{eq2} x^2 + y^2 + dx + ey +f = 0. \end{equation} Data kterými chceme proložit kružnici jsou ale zatížena chybou, proto body nebudou ležet přesně na kružnici a zformulujeme problém jako optimalizační úlohu. Napište funkce:

  • [d e f] = fit_circle_nhom(X), kde $X \in \mathbb{R}^{n \times 2}$ je matice, která v řádcích obsahuje body $(x_i, y_i)$, které mají ležet na kružnici. Tato funkce minimalizuje výraz

\begin{equation*} \sum_{i = 1}^n (x_i^2 + y_i^2 + dx_i + ey_i +f)^2. \end{equation*}

  • [d e f] = fit_circle_hom(X), kde $X \in \mathbb{R}^{n \times 2}$ je matice, která v řádcích obsahuje body $(x_i, y_i)$, které mají ležet na kružnici. Tato funkce minimalizuje výraz

\begin{equation*} \begin{split} \sum_{i = 1}^n (ax_i^2 + ay_i^2 + dx_i + ey_i +f)^2, \\ \text{s.t. } a^2 + d^2 + e^2 + f^2 = 1, \end{split} \end{equation*} a následně normalizuje d,e,f, abychom dostali rovnici ve tvaru \ref{eq2} reprezentující stejnou kružnici.

  • [x0 y0 r] = homoegnous_to_cartesian(d,e,f), kde d,e,f určují kružnici ve tvaru \ref{eq2} a x0, y0, r určují tu samou kružnici v kartézských souřadnicích, bude tedy platit \begin{equation*} \{\,x,y \mid x,y \in \mathbb{R},\; x^2 + y^2 + dx + ey +f \,\} = \{\,x,y \mid x,y \in \mathbb{R},\; (x-x_0)^2 + (y-y_0)^2 = r^2 \,\}. \end{equation*}
courses/b0b33opt/cviceni/hw/kruznice_lin/start.txt · Last modified: 2020/10/05 12:01 by wernetom