matlab中eig函数是怎么编写的
时间: 2024-01-21 12:01:55 浏览: 124
`eig` 函数是 MATLAB 中内置的函数,是通过调用 LAPACK 中的 DGEEV 或 ZGEEV 子程序来实现的。这些子程序是用 FORTRAN 语言编写的,因此 `eig` 函数的实现也是通过 MATLAB 的 MEX 接口调用 FORTRAN 子程序来实现的。
DGEEV 子程序用于计算实对称矩阵的特征值和特征向量,而 ZGEEV 子程序则用于计算复数域上的特征值和特征向量。在 MATLAB 中,`eig` 函数可以处理实矩阵和复矩阵,因此在实现时需要进行分类讨论。
具体实现过程可以参考 MATLAB 官方文档中的描述:[How MATLAB Calculates Eigenvalues and Eigenvectors](https://www.mathworks.com/help/matlab/math/how-matlab-calculates-eigenvalues-and-eigenvectors.html)。
相关问题
matlab中的eig函数与C++中eig函数算出来的特征向量不一样
MATLAB中的eig函数和C++中的eig函数都是用于计算矩阵的特征值和特征向量。但是,在使用不同的编程语言时,由于计算机的计算精度、计算方式等方面的差异,可能会导致结果不同。此外,MATLAB中的eig函数默认返回的是归一化的特征向量,而C++中的eig函数默认返回的是非归一化的特征向量。因此,如果你需要比较两个函数的结果,需要进行一些额外的处理,如对特征向量进行归一化。
如何解决matlab的eig函数计算实对称矩阵出现复数特征值的问题呢
对于一个实对称矩阵,其特征值应该是实数。但是,由于计算机的舍入误差等原因,当使用 MATLAB 的 eig 函数计算实对称矩阵的特征值时,有时会出现复数特征值的情况。这时可以采用以下方法来解决这个问题:
1. 检查矩阵是否真的是实对称的。有时候,由于程序编写错误或计算误差等原因,可能会导致矩阵不满足实对称性,这时就会出现复数特征值。可以使用 isreal 函数检查矩阵是否为实矩阵,并使用 issymmetric 函数检查矩阵是否对称。
2. 对矩阵进行修正。如果矩阵确实是实对称的,但是由于计算误差等原因导致 eig 函数计算出复数特征值,可以尝试对矩阵进行修正。一种常见的修正方法是加上一个很小的对角线元素,使得矩阵变得正定。例如,可以使用以下代码对矩阵进行修正:
```
A = A + eye(size(A))*eps;
```
其中,eps 是 MATLAB 中最小的浮点数,用来表示非常接近于零的数。
3. 使用其他函数计算特征值。除了 eig 函数,MATLAB 中还有其他函数可以用来计算矩阵的特征值,例如 eigs 函数和 eigsh 函数。这些函数可以更准确地计算矩阵的特征值,并且可以指定计算的特征值的个数。
总之,当使用 MATLAB 的 eig 函数计算实对称矩阵的特征值时,出现复数特征值的情况应该引起注意。可以通过检查矩阵是否真的是实对称的,对矩阵进行修正,或者使用其他函数计算特征值等方法来解决这个问题。
阅读全文