Jacobiana di una funzione vettoriale
Salve devo calcolare numericamente la jacobiana di una funzione vettoriale $r: R^6->R^6$. Praticamente sto scrivendo un algoritmo per la risoluzione di GaussNewton per i minimi quadrati non lineari (mi serve tale algoritmo per la computer vision).
Dalla teoria sappiamo che la matrice jacobiana per una generica funzione $ f: R^n ->R^m $ é
.
La mia domanda é : dal momento che devo calcolare tale matrice come posso farlo avendo a disposizione il vettore in arrivo della funzione $r$?
Grazie
Dalla teoria sappiamo che la matrice jacobiana per una generica funzione $ f: R^n ->R^m $ é

La mia domanda é : dal momento che devo calcolare tale matrice come posso farlo avendo a disposizione il vettore in arrivo della funzione $r$?
Grazie
Risposte
Ogni funzione é $r_i$ è definita da 6 parametri che sono i tre angoli di Eulero , e le componenti $t_x,t_y,t_z$ di un vettore di traslazione, a me note, tali componenti vengono utilizzate nella stima di una matrice $[R|t]$ con R matrice di rotazione e t il vettore delle traslazioni. Esempio la funzione $r_1$ é : $ u_L- ( \alpha_u ( (r_(00)X+r_(01)Y+r_(02)Z+t_x)/ (r_(20)X+r_(21)Y+r_(22)Z+t_z) - u_0 ) $ dove $ u_L, \alpha_u, u_0$ sono costanti, mentre $X,Y,Z$ sono coordinate di un punto nello spazio 3d, e$r_(i,j)$ sono le componenti della matrice $R$ definita come il prodotto delle matrici di rotazione ,attorno ai tre angoli di Eulero. Adesso per ottenere la jacobiana dovrei derivare questa funzione , una volta per ogni parametro, infatti quello che devo calcolare è $ (dr)/(dm)$, dove $m$ é il vettore $ (\alpha,\beta,\gamma,t_x,t_y,t_z)$.
La Jacobiana mi serve successivamente per applicare la minimizzazione non lineare nel senso dei minimi quadrati di Gauss Newton
La Jacobiana mi serve successivamente per applicare la minimizzazione non lineare nel senso dei minimi quadrati di Gauss Newton
Non ho ben capito la domanda... Vuoi calcolare la Jacobiana numericamente? Immagino che quindi analiticamente non si riesca. Qual è il problema? La cosa più banale da fare, ma non necessariamente la più furba, è di fare i rapporti incrementali per tutte le derivate che ti servono.
Ciao Raptorista , ho proceduto in questo modo : sono riuscito a ricavarmi le espressioni analitiche delle funzioni $r_i$ , e ho usato la diff del matlab per derivarle rispetto ai 6 parametri, ottenendo una matrice 6x6. Che ne pensi?
p.s. certe derivate analitiche vengono enormi.
p.s. certe derivate analitiche vengono enormi.
Secondo me è il modo giusto di fare. Se i conti sono troppo lunghi allora puoi usare qualche software per il calcolo simbolico per facilitarti la vita.
si si ho provveduto jn questo modo . però anche col simbolico di matlab e con la semplificazione vengono delle derivate lunghissimi che poi ho dovuto usare in linguaggio c. e per questo che mi chiedevo se vi era un metodo numerico più breve.
Nessun metodo numerico può battere la conoscenza dell'espressione analitica
Allora definisco adesso la funzione di cui calcolare la Jacobiana. E mostrerò come ho proceduto:
Sia $f: R^3 -> R^3 $ e sia $ P \in R^3$ il vettore di componenti $X, Y,Z \in R $ la funzione $f$ é definita come :
$f_1=\alpha_u*(X/Z)-u_0$ e $f_2=\alpha_v*(Y/Z)-v_0$ e $f_3=\alpha_u*((X-b_L)/Z)-u_0$ con $u_0, v_0 ,\alpha_u,\alpha_v \in R $ parametri fissati. Sia $r_f: R^3->R^3$ una funzione tale che $r_f=y_k-f(M_k(m)*P_k)$ con $m=(\alpha,\beta,\gamma,t_x,t_y,t_z)$ vettore dei parametri di cui sopra che definiscono la matrice di rotazione $M_k(m)$ al passo k. Sia Sia $r_b: R^3->R^3$ una funzione tale che $r_b=y_(k+1)-f((M_k(m))^(-1)*P_(k+1))$ , la funzione $r_d$ viene definita come un vettore $\in R^6$ da $[r_f,r_b]^T$. Con $y_k$ e $y_(k+1) \in R^3$
Quello che devo fare è calcolare la Jacobiana di $(dr_d)/(dm)$.
Ho quindi scritto analiticamente ognuna delle tre funzioni che definiscono l'iesima componente delle due funzioni vettoriali sopra definite, per un totale di 6 funzioni $r_(f,i)$ con $ i=0..2 $ e $r_(b,i)$ con $ i=0..2 $. Per calcolare la Jacobiana ho derivato analiticamente ognuna di queste funzioni rispetto ai 6 parametri del vettore $m$ , ottenendo una matrice di dimensione 6x6. Che ne pensate?
Sia $f: R^3 -> R^3 $ e sia $ P \in R^3$ il vettore di componenti $X, Y,Z \in R $ la funzione $f$ é definita come :
$f_1=\alpha_u*(X/Z)-u_0$ e $f_2=\alpha_v*(Y/Z)-v_0$ e $f_3=\alpha_u*((X-b_L)/Z)-u_0$ con $u_0, v_0 ,\alpha_u,\alpha_v \in R $ parametri fissati. Sia $r_f: R^3->R^3$ una funzione tale che $r_f=y_k-f(M_k(m)*P_k)$ con $m=(\alpha,\beta,\gamma,t_x,t_y,t_z)$ vettore dei parametri di cui sopra che definiscono la matrice di rotazione $M_k(m)$ al passo k. Sia Sia $r_b: R^3->R^3$ una funzione tale che $r_b=y_(k+1)-f((M_k(m))^(-1)*P_(k+1))$ , la funzione $r_d$ viene definita come un vettore $\in R^6$ da $[r_f,r_b]^T$. Con $y_k$ e $y_(k+1) \in R^3$
Quello che devo fare è calcolare la Jacobiana di $(dr_d)/(dm)$.
Ho quindi scritto analiticamente ognuna delle tre funzioni che definiscono l'iesima componente delle due funzioni vettoriali sopra definite, per un totale di 6 funzioni $r_(f,i)$ con $ i=0..2 $ e $r_(b,i)$ con $ i=0..2 $. Per calcolare la Jacobiana ho derivato analiticamente ognuna di queste funzioni rispetto ai 6 parametri del vettore $m$ , ottenendo una matrice di dimensione 6x6. Che ne pensate?