【问题标题】:Eigenvalue of the gradient of a vector valued function向量值函数梯度的特征值
【发布时间】:2016-11-06 22:13:46
【问题描述】:

向量(delta V)的梯度如何变成 3x3 矩阵?以及如何有效地计算其特征值?是否有任何 C++ 库可以做到这一点(C++ 库 Eigen 可以做到这一点)?

【问题讨论】:

  • en.wikipedia.org/wiki/Gradient#Gradient_of_a_vector。是的,特征可以计算矩阵的特征值......所以使用它或其他库,如犰狳
  • 是的,我读过那篇文章。梯度是单行向量,怎么变成3x3?如果我给 Eigen 一个向量,它可以把它变成一个 3x3 矩阵吗?
  • 因为你在 3 个维度上有不同的导数。不,你必须自己渲染你的矩阵。

标签: c++ math eigenvalue calculus


【解决方案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 线性代数库确实提供了这样的功能。

【讨论】:

  • 可能值得注意的是,一般来说,由任意向量场的导数形成的矩阵不会是对称的。这意味着该矩阵的特征分解可能涉及复数。另一方面,如果向量本身是标量函数的导数,则二阶导数矩阵将是对称的半实值特征值。
猜你喜欢
  • 2012-03-18
  • 2014-05-11
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2019-04-27
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多