OpenCascade Eigenvalues and Eigenvectors of Square Matrix

eryar@163.com

Abstract. OpenCascade use the Jacobi method to find the eigenvalues and the eigenvectors of a real symmetric square matrix. Use class math_Jacobi to computes all eigenvalues and eigenvectors by using Jacobi method. The exception NotSquare is raised if the matrix is not square. No verification that the matrix is really symmetric is done.

Key words. Eigenvalues, Eigenvectors, OpenCascade, Matrix, Jacobi method,

1. Introduction

工程技术中的一些问题,如振动问题和稳定性问题,常可归结为求一个方阵的特征值和特征向量的问题。数学中诸如方阵的对角化及解常微分方程等问题,也都有要用到特征值的理论。

定义:设A是n阶矩阵,如果数λ和n维非零列向量x使关系式 Ax = λx成立,那么这样的数λ称为方阵A的特征值,非零向量x称为A对应于特征值λ的特征向量。

推论:若n阶矩阵A与对角阵

相似,则λ1,λ2,...,λn即是A的n个特征值。

定理:n阶矩阵A与对角阵相似(即A能对角化)的充分必要条件是A有n个线性无关的特征向量。

推论:如果n阶矩阵A的n个特征值互不相等,则A与对角阵相似。

当A的特征方程有重根时,就不一定有n个线性无关的的特征向量,从而不一定能对角化。一个n阶矩阵具备什么条件才能对角化呢?这是一个较复杂的问题。

定理:设A为n阶对称阵,则有正交阵P,使

其中∧是以A的n个特征值为对角元的对角阵。

OpenCascacde中使用了Jacobi方法来计算对称方阵的特征值和特征向量。本文对math_Jacobi的使用进行详细说明。

2. Code Example

结合同济第四版《线性代数》中的例子,来验证Jacobi方法计算的结果。示例程序如下所示:

/*
* Copyright (c) 2014 eryar All Rights Reserved.
*
* File : Main.cpp
* Author : eryar@163.com
* Date : 2014-06-22 21:46
* Version : 1.0v
*
* Description : Demonstrate how to find the eigenvalues and
* eigenvectors for a symmetric square Matrix.
* 题目来自《线性代数》同济 第四版
*
*/ #define WNT #include <math_Jacobi.hxx> #pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib") /**
* OpenCascade use Jacobi method to find the eigenvalues and
* the eigenvectors of a real symmetric square matrix.
*/
void EvalEigenvalue(const math_Matrix &A)
{
math_Jacobi J(A); std::cout << A << std::endl; if (J.IsDone())
{
std::cout << "Jacobi: \n" << J << std::endl;
//std::cout << "Eigenvalues: \n" << J.Values() << std::endl;
//std::cout << "Eigenvectors: \n" << J.Vectors() << std::endl; for (Standard_Integer i = A.LowerRow(); i <= A.UpperRow(); ++i)
{
math_Vector V(, A.RowNumber()); J.Vector(i, V); std::cout << "Eigenvalue: " << J.Value(i) << std::endl;
std::cout << "Eigenvector: " << V << std::endl;
}
}
} void TestJacobi(void)
{
// 1. P120 Example 5:
math_Matrix A1(, , , , 0.0); A1(, ) = 3.0; A1(, ) = -1.0;
A1(, ) = -1.0; A1(, ) = 3.0; EvalEigenvalue(A1); // 2. P120 Example 6:
math_Matrix A2(, , , , 0.0); A2(, ) = -1.0; A2(, ) = 1.0; A2(, ) = 0.0;
A2(, ) = -4.0; A2(, ) = 3.0; A2(, ) = 0.0;
A2(, ) = 1.0; A2(, ) = 0.0; A2(, ) = 2.0; EvalEigenvalue(A2); // 3. P120 Example 7:
math_Matrix A3(, , , , 0.0); A3(, ) = -2.0; A3(, ) = 1.0; A3(, ) = 1.0;
A3(, ) = 0.0; A3(, ) = 2.0; A3(, ) = 0.0;
A3(, ) = -4.0; A3(, ) = 1.0; A3(, ) = 3.0; EvalEigenvalue(A3); // 4. P127 Example 12:
math_Matrix A4(, , , , 0.0); A4(, ) = 0.0; A4(, ) = -1.0; A4(, ) = 1.0;
A4(, ) = -1.0; A4(, ) = 0.0; A4(, ) = 1.0;
A4(, ) = 1.0; A4(, ) = 1.0; A4(, ) = 0.0; EvalEigenvalue(A4); // 5. P138 Execise 5(3);
math_Matrix A5(, , , , 0.0); A5(, ) = 1.0; A5(, ) = 2.0; A5(, ) = 3.0;
A5(, ) = 2.0; A5(, ) = 1.0; A5(, ) = 3.0;
A5(, ) = 3.0; A5(, ) = 3.0; A5(, ) = 6.0; EvalEigenvalue(A5);
} int main(int argc, char* argv[])
{
// The Jacobi method to find the eigenvalues and
// eigenvectors of a real symmetric square matrx.
// The exception NotSquare is raised if the matrix is not square.
// No verification that the matrix is really symmetric is done.
TestJacobi(); return ;
}

计算结果部分如下图所示:

Figure 2.1 Jacobi method Result

3. Conclusion

矩阵的特征值和特征向量的理论能用来求解微分方程组的问题。振动分析、现代控制理论中的数学模型都可归结为对微分方程组的求解。因此,对特征值和特征向量的数值计算有重要的意义。

OpenCascade中提供了使用Jacobi方法来计算特征值和特征向量的类math_Jacobi。从计算结果可以看出,math_Jacobi只对对称方阵的计算结果准确,若不是对称阵,则计算结果是不准确的。

会使用OpenCascade中现成的算法是一回事,能实现这些算法又是另外一回事。对计算特征值和特征向量的数值方法感兴趣的读者,可以参考《计算方法》或《数值分析》等相关书籍。


4. References

1. 同济大学应用数学系. 线性代数. 高等教育出版社. 2003

2. 易大义, 沈云宝, 李有法. 计算方法. 浙江大学出版社. 2002

3. 杨明, 李先忠. 矩阵论. 华中科技大学出版社. 2005

OpenCascade Eigenvalues and Eigenvectors of Square Matrix的更多相关文章

  1. 方差variance, 协方差covariance, 协方差矩阵covariance matrix | scatter matrix | weighted covariance | Eigenvalues and eigenvectors

    covariance, co本能的想到双变量,用于描述两个变量之间的关系. correlation,相关性,covariance标准化后就是correlation. covariance的定义: 期望 ...

  2. A.Kaw矩阵代数初步学习笔记 10. Eigenvalues and Eigenvectors

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  3. m*n matrix min rank square matrix

    m*n matrix m*n=1000 f(A)=25 https://www.cs.princeton.edu/courses/archive/spring12/cos598C/svdchapter ...

  4. <<Numerical Analysis>>笔记

    2ed,  by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is l ...

  5. <Numerical Analysis>(by Timothy Sauer) Notes

    2ed,  by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is l ...

  6. OpenCascade Matrix

    OpenCascade Matrix eryar@163.com 摘要Abstract:本文对矩阵作简要介绍,并结合代码说明OpenCascade矩阵计算类的使用方法. 关键字Key Words:Op ...

  7. Matrix Factorization SVD 矩阵分解

    Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...

  8. A geometric interpretation of the covariance matrix

    A geometric interpretation of the covariance matrix Contents [hide] 1 Introduction 2 Eigendecomposit ...

  9. What is an eigenvector of a covariance matrix?

    What is an eigenvector of a covariance matrix? One of the most intuitive explanations of eigenvector ...

随机推荐

  1. div内文字超出换行问题

    1.强制换行: div的样式加上: word-wrap:break-word;word-break:break-all; 2.在文字中间加入建议换行标志<wbr>可以每隔几个字符加一个,

  2. maven构建简单的web项目

    把jdk给换掉 项目修改好了以后写个页面测试一下,结果正常 下面应该添加依赖让web项目一步步丰满起来. 0-添加依赖 1-建一个servlet 2-web.xml中添加servlet声明 3-重新运 ...

  3. S3C2440UART之FIFO

    一.基础知识 S3C2440有3个独立的串口,每一个都可以利用DMA和中断方式操作.每个包含2个64字节FIFO,一个收,一个发.非FIFO模式相当于FIFO模式的一个寄存器缓冲模式.每一个UART有 ...

  4. ACCEPTANCE CRITERIA FOR USER STORIES

    One of the teams I have recently coached quickly got a grasp of how to phrase user stories but found ...

  5. TreeSet

    一.TreeSet中的元素比较有两种方式 1.定义一个类,实现Comparable接口  复写的是comparato方法 2.定义一个类,实现Comparator接口,覆盖compara方法(此种方法 ...

  6. siteserver cms选择栏目搜索无效

    标签必须以空格分开,且option 的value必须给id不能给名称

  7. 远程桌面连接 win7 主机提示“您的凭据不工作”的解决办法

    搞了大半天,找了百度N中方式操作,至少翻看10种以上解决方式,结果还是不得行 索性使用了360搜索,搜了几次就搞定了. 解决办法: “ 最重要一点, 主机上要允许用户以非guest身份登录:主机上运行 ...

  8. PHP好任性 —— 大小写敏感有两种规则,然而并没有什么特别原因

    大小写敏感 变量.常量大小写敏感 大小写不敏感 类名.方法名.函数名.魔法变量大小写不敏感 原因 有人原引了Rasmus 在一次会议上的发言大意: "I'm definitely not a ...

  9. [PDO绑定参数]使用PHP的PDO扩展进行批量更新操作

    最近有一个批量更新数据库表中某几个字段的需求,在做这个需求的时候,使用了PDO做参数绑定,其中遇到了一个坑. 方案选择 笔者已知的做批量更新有以下几种方案: 1.逐条更新 这种是最简单的方案,但无疑也 ...

  10. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...