2016-11-06 251 views
0

向量(delta V)的梯度如何變爲3x3矩陣?你如何有效地計算它的特徵值?有沒有任何C++庫可以做到這一點(C++庫Eigen可以做到這一點)?向量值函數的梯度的特徵值

+0

https://en.wikipedia.org/wiki/Gradient#Gradient_of_a_vector。是的,特徵可以計算矩陣的特徵值...所以使用它或另一個庫,如犰狳 – coincoin

+0

是的,我讀了那篇文章。漸變是單行矢量,它是如何變成3x3的?如果我給Eigen一個向量,它能變成一個3x3矩陣嗎? – user6682440

+0

,因爲您在三維上具有不同的派生詞。你不需要自己渲染你的矩陣。 – coincoin

回答

1

gradient是具有多個變量的函數的導數的推廣。它由函數的所有偏導數組成,所以它對每個變量都有一個導數。

  • 對於標量值 N元函數scalar y = f(x1, ..., xN),梯度爲矢量具有N標量元素

  • 歸納它進一步爲向量值功能vector y = f(x1, ..., xN),(其中載體具有N個元素,並且函數具有N個標量變量),梯度可以被認爲是一個矢量具有N矢量元素,這實際上是一個帶有NxN個元素的矩陣,也稱爲Jacobian

在你的情況下,函數必須像vector3 y = f(x1, x2, x3),所以梯度是3x3矩陣。

您可以像計算任何其他矩陣一樣計算它的特徵值。使用Eigen decomposition。顧名思義,Eigen線性代數庫確實提供了這樣的功能。

+0

可能值得注意的是,通常,由任意矢量場的導數形成的矩陣不會是對稱的。這意味着該矩陣的特徵分解可能涉及複數。另一方面,如果矢量本身是標量函數的導數,那麼二階導數的矩陣將是對稱的和半實值的特徵值。 – rwp

相關問題