OpenCascade Matrix

OpenCascade Matrix

eryar@163.com

摘要Abstract:本文对矩阵作简要介绍,并构成代码表达OpenCascade矩阵总计类的接纳办法。 

关键字Key Words:OpenCascade、Matrix、C++ 

随即快要考试了,表示压力十分的大呀啦噜。

一、引言Introduction

矩阵的钻研历史悠久,拉丁方阵和幻方在史2017时期已有人切磋。作为化解线性方程的工具,矩阵也有十分长的历史。16玖叁年,微积分的发现者之壹莱布尼茨建立了行列式论(theory
of
determinants)。1750年,克拉默又定下了克拉默法则。1800年份,高斯和威尔iam若尔当树立了高斯-若尔当消去法。 

从其进步历史足以见见,从行列式论的提出到克拉默法则合计历时50多年之久,而在大家《线性代数》的教科书中,也正是一章的始末,学习时间或许只有二个星期。难怪那几个概念这么抽象晦涩,也是未可厚非的,哈哈。可是,当明白那一个概念,也就领悟了1个有力的工具,因为它也使有个别计算统一、不难。 

矩阵是尖端代数中的常见工具,也常见于总计分析等应用数学科目中。在物法学中,矩阵用于电路学、力学、光学和量子物理中都有选取;计算机科学中,三维变换便是运用了矩阵的线性别变化换。矩阵的演算是数值分析世界的重大难题。 

在微型总括机图形相关的软件中,矩阵是必需的严重性工具。如:OpenGL、DirectX中的变换都以用矩阵完成的;OpenCascade中就有矩阵总计类(math_Matrix);OpenSceneGraph中也有矩阵的总结类(osg::Matrix)等等。矩阵在计算中主要性用来表明到规定的分数线性别变化换,统壹三个维度空间中物体的地点和自由化转换。 

正文重要介绍OpenCascade中矩阵类的利用办法。 

让本身预测一波考试场点先~

2、矩阵的演算 Matrix Calculation

矩阵的运算主要有矩阵的加法、数与矩阵相乘、矩阵与矩阵相乘、矩阵的转置、方阵的行列式、共轭矩阵、逆矩阵。还有通过矩阵来求解线性方程组的解难题。 

有关线性代数,无非正是解线性方程,通过行列式和矩阵的款式。

1. 矩阵的加法 Matrix Addition

ca88手机版登录网页 1

ca88手机版登录网页 2

应该专注,唯有当五个矩阵是同型矩阵时,才能展开加法运算。矩阵加法满足下列运算规律:设A、B、C都以m×n矩阵: 

ca88手机版登录网页 3

古人为了求解鸡兔同笼等难题,提议了设天元、地元、人元(也便是XYZ多少个未知量),通过以未知数求已知量。

2. 数与矩阵相乘 Matrix Multiplication

ca88手机版登录网页 4

ca88手机版登录网页 5

数乘矩阵满意下列运算规律(设A、B为m×n矩阵,λ、μ为数): 

ca88手机版登录网页 6

矩阵相加与矩阵相乘合起来,统称为矩阵的线性运算。 

于今返璞归真,今人为了便于求解包涵过多未知量的方程,发明了行列式和矩阵,以已知数实行有益的运算来求解。

三. 矩阵与矩阵相乘 Matrix Multiplication

ca88手机版登录网页 7

ca88手机版登录网页 8

并把此乘积记作:C = AB 

按此概念,三个壹×s行矩阵与一个s×一列矩阵的乘积是1个一阶方阵,也等于2个数: 

ca88手机版登录网页 9

经过注明乘积矩阵AB=C的(i,j)元cij正是A的第i行与B的第j列的乘积。必须小心:唯有当每三个矩阵(左矩阵)的列数等于第3个矩阵(右矩阵)的行数时,八个矩阵才能相乘。

矩阵的乘法虽不满意沟通律,但仍知足下列结合律和分配律(若是运算都以实用的): 

ca88手机版登录网页 10

首先章的行列式,单纯只是是相加和相乘的标题,有自然定理和公式供给小心。

4. 矩阵的转置 Matrix Transpose

ca88手机版登录网页 11

ca88手机版登录网页 12

矩阵转置也是一种运算,满意下列运算规律(假若运算都以一蹴而就的):

ca88手机版登录网页 13

写出方程组中的得D,分别将方程组右端的常数列依次举办替换后获得D一–n,X一-n=D一-n/D

五. 方阵的行列式 Determinant of the Square Matrix

ca88手机版登录网页 14

有道是专注,方阵与行列式是四个例外的概念,n阶方阵是n×n个数按一定措施排列成的数表,而n阶行列式是这么些数(也等于数表A)按一定的运算法则所规定的四个数。

由A明显|A|的那些运算满意下述运算规律(设A、B为n阶方阵,λ为数): 

ca88手机版登录网页 15

科学,那就是行列式的妙用,那么矩阵又是干啥的呢?

6. 逆矩阵 Inverse of Matrix

概念:对于n阶矩阵A,假诺一个n阶矩阵B,使AB=BA=E,则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆阵。 

方阵的逆矩阵满意下列运算规律: 

ca88手机版登录网页 16

好,老子近日不领悟。

7. 线性方程组的数值解法

在自然科学和工程中有很多题材的消除都总结为求解线性方程组也许非线性方程组的数学标题。例如,电学中的网络问题,用非常小二乘法求实验数据的网线拟合难题,一回样条的插值难题,用有限成分法计算结构力学中的壹些题目或用差分法解椭圆型偏微分方程的边值难点等等。 

求解线性方程组的直接法首要有选主元高斯消去法、平方根法、追赶法等。假使总结进度中向来不舍入抽样误差,则此种方法通过简单步算术运算可求得方程组的精确解,但其实总计中由于舍入舍入误差的留存和熏陶,那种格局也只好求得方程组的近似解。近来那种办法是电脑上解低阶稠密矩阵的有用方法。 

高斯消去法是一个古老的求解线性方程组的办法,但鉴于它创新获得的选主元的高斯消去法则是时下总结机上常用的解低阶稠密矩阵方程组的可行办法。 

用高斯消去法解方程组的核心情维是用矩阵行的初等变换将周密矩阵化为富有简易款式的矩阵,即三角形矩阵,再经过回代进度,求出方程组的解。 

先预测行列式考点吧。

三、OpenCascade矩阵总计

在OpenCascade中,矩阵的总计类是math_Matrix,它能够有专擅的行数和列数,达成了矩阵超越3/6的运算。以下通进程序实例来表明math_Matrix的运用方法: 

/*
*    Copyright (c) 2013 eryar All Rights Reserved.
*
*        File    : Main.cpp
*        Author  : eryar@163.com
*        Date    : 2013-07-17 21:46
*        Version : 1.0v
*
*    Description : Demonstrate how to use math_Matrix class.
*                  题目来自《线性代数》同济 第四版
*                  
*/

#include <math_Matrix.hxx>

#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")

int main(int argc, char* argv[])
{
    math_Matrix A(1, 3, 1, 3);
    math_Matrix B(1, 3, 1, 3);
    math_Matrix C(1, 3, 1, 3);

    // 1. Test Matrix Transpose and multiply.
    // 题目来自P53习题二 第3题
    // Set value of Matrix A
    A.Init(1);
    A(2, 3) = -1;
    A(3, 2) = -1;

    // Set value of Matrix B
    B(1, 1) = 1;    B(1, 2) = 2;    B(1, 3) = 3;
    B(2, 1) = -1;   B(2, 2) = -2;   B(2, 3) = 4;
    B(3, 1) = 0;    B(3, 2) = 5;    B(3, 3) = 1;

    C.TMultiply(A, B);

    cout<<"Matrix A: "<<endl;
    cout<<A<<endl;
    cout<<"Matrix B: "<<endl;
    cout<<B<<endl;
    cout<<"Matrix C: "<<endl;
    cout<<C<<endl;

    // 2. Test the Determinant of the Matrix.
    // 题目来自P12 例7
    math_Matrix D(1, 4, 1, 4);
    D(1, 1) = 3;    D(1, 2) = 1;    D(1, 3) = -1;    D(1, 4) = 2;
    D(2, 1) = -5;   D(2, 2) = 1;    D(2, 3) = 3;     D(2, 4) = -4;
    D(3, 1) = 2;    D(3, 2) = 0;    D(3, 3) = 1;     D(3, 4) = -1;
    D(4, 1) = 1;    D(4, 2) = -5;   D(4, 3) = 3;     D(4, 4) = -3;

    cout<<"Matrix D: "<<endl;
    cout<<D<<endl;
    cout<<"Determinant of Matrix D: "<<D.Determinant()<<endl;

    // 3. Calculate Inverse of the Matrix.
    // 题目来自P54 11题(3) 和P56 30题(1)
    math_Matrix E(1, 3, 1, 3);

    E(1, 1) = 1;    E(1, 2) = 2;    E(1, 3) = -1;
    E(2, 1) = 3;    E(2, 2) = 4;    E(2, 3) = -2;
    E(3, 1) = 5;    E(3, 2) = -4;   E(3, 3) = 1;

    cout<<"Inverse of the Matrix E: "<<endl;
    cout<<E.Inverse()<<endl;

    // P56 30题(1)
    math_Matrix F(1, 4, 1, 4);

    F(1, 1) = 5;    F(1, 2) = 2;
    F(2, 1) = 2;    F(2, 2) = 1;
    F(3, 3) = 8;    F(3, 4) = 3;
    F(4, 3) = 5;    F(4, 4) = 2;

    cout<<"Inverse of the Matrix F: "<<endl;
    cout<<F.Inverse()<<endl;

    return 0;
}

算算结果为:

 1 Matrix A:
 2 math_Matrix of RowNumber = 3 and ColNumber = 3
 3 math_Matrix ( 1, 1 ) = 1
 4 math_Matrix ( 1, 2 ) = 1
 5 math_Matrix ( 1, 3 ) = 1
 6 math_Matrix ( 2, 1 ) = 1
 7 math_Matrix ( 2, 2 ) = 1
 8 math_Matrix ( 2, 3 ) = -1
 9 math_Matrix ( 3, 1 ) = 1
10 math_Matrix ( 3, 2 ) = -1
11 math_Matrix ( 3, 3 ) = 1
12 
13 Matrix B:
14 math_Matrix of RowNumber = 3 and ColNumber = 3
15 math_Matrix ( 1, 1 ) = 1
16 math_Matrix ( 1, 2 ) = 2
17 math_Matrix ( 1, 3 ) = 3
18 math_Matrix ( 2, 1 ) = -1
19 math_Matrix ( 2, 2 ) = -2
20 math_Matrix ( 2, 3 ) = 4
21 math_Matrix ( 3, 1 ) = 0
22 math_Matrix ( 3, 2 ) = 5
23 math_Matrix ( 3, 3 ) = 1
24 
25 Matrix C:
26 math_Matrix of RowNumber = 3 and ColNumber = 3
27 math_Matrix ( 1, 1 ) = 0
28 math_Matrix ( 1, 2 ) = 5
29 math_Matrix ( 1, 3 ) = 8
30 math_Matrix ( 2, 1 ) = 0
31 math_Matrix ( 2, 2 ) = -5
32 math_Matrix ( 2, 3 ) = 6
33 math_Matrix ( 3, 1 ) = 2
34 math_Matrix ( 3, 2 ) = 9
35 math_Matrix ( 3, 3 ) = 0
36 
37 Matrix D:
38 math_Matrix of RowNumber = 4 and ColNumber = 4
39 math_Matrix ( 1, 1 ) = 3
40 math_Matrix ( 1, 2 ) = 1
41 math_Matrix ( 1, 3 ) = -1
42 math_Matrix ( 1, 4 ) = 2
43 math_Matrix ( 2, 1 ) = -5
44 math_Matrix ( 2, 2 ) = 1
45 math_Matrix ( 2, 3 ) = 3
46 math_Matrix ( 2, 4 ) = -4
47 math_Matrix ( 3, 1 ) = 2
48 math_Matrix ( 3, 2 ) = 0
49 math_Matrix ( 3, 3 ) = 1
50 math_Matrix ( 3, 4 ) = -1
51 math_Matrix ( 4, 1 ) = 1
52 math_Matrix ( 4, 2 ) = -5
53 math_Matrix ( 4, 3 ) = 3
54 math_Matrix ( 4, 4 ) = -3
55 
56 Determinant of Matrix D: 40
57 Inverse of the Matrix E:
58 math_Matrix of RowNumber = 3 and ColNumber = 3
59 math_Matrix ( 1, 1 ) = -2
60 math_Matrix ( 1, 2 ) = 1
61 math_Matrix ( 1, 3 ) = -8.88178e-017
62 math_Matrix ( 2, 1 ) = -6.5
63 math_Matrix ( 2, 2 ) = 3
64 math_Matrix ( 2, 3 ) = -0.5
65 math_Matrix ( 3, 1 ) = -16
66 math_Matrix ( 3, 2 ) = 7
67 math_Matrix ( 3, 3 ) = -1
68 
69 Inverse of the Matrix F:
70 math_Matrix of RowNumber = 4 and ColNumber = 4
71 math_Matrix ( 1, 1 ) = 1
72 math_Matrix ( 1, 2 ) = -2
73 math_Matrix ( 1, 3 ) = 0
74 math_Matrix ( 1, 4 ) = 0
75 math_Matrix ( 2, 1 ) = -2
76 math_Matrix ( 2, 2 ) = 5
77 math_Matrix ( 2, 3 ) = -0
78 math_Matrix ( 2, 4 ) = -0
79 math_Matrix ( 3, 1 ) = 0
80 math_Matrix ( 3, 2 ) = 0
81 math_Matrix ( 3, 3 ) = 2
82 math_Matrix ( 3, 4 ) = -3
83 math_Matrix ( 4, 1 ) = -0
84 math_Matrix ( 4, 2 ) = -0
85 math_Matrix ( 4, 3 ) = -5
86 math_Matrix ( 4, 4 ) = 8
87 
88 Press any key to continue . . .

 

线性方程组的测算办法请参考另1篇blog: 

运用OpenCASCADE的Math功用解线性方程组

http://www.cppblog.com/eryar/archive/2012/06/21/179629.html 

首先章第2节讲的是行列式的计算方法,从二阶时的对角线法到延伸为多阶后的代数余子式化归法。(D一-n/D即为X一-n)

四、结论 Conclusion

OpenCascade的math_Matrix实现了矩阵的大部运算,也得以当做3个袖珍的C++矩阵总结库来利用,在未曾安装Matlab、Mathematica等软件的情事下,能够接纳这几个库进行壹些盘算。 

其余,对《总计办法》中算法感兴趣的读者能够参考OpenCascade个中代码的贯彻,加深对有关算法的知道。 

内需专注的是上三角和(主)对三角行列式的值均为主对角线的数相乘。

5、参考文献 Bibliography

  1. 同济行使数学系 线性代数 高教出版社 2003 

  2. 易大义,沈云宝,李有法 总计办法 西藏大学出版社 贰零零3 

 

PDF Version: OpenCascade
Matrix

下三角行列式的值为副对角线的数相乘再乘以-一的n(n-壹)/二

n阶行列式等于他的任1行(列)成分与它们所对应的代数余子式乘积之和。

其次节讲的是一雨后鞭笋定理,比如行列式的转置与原行列式相等,故而行列式并无分别,关于行对称的属性关于列也1如既往适用。两行或列调换时,行列式要变号,那么只要有两行或列元素对应相等时,此行列式为零。

行列式的某一行或列同时提出的贰个数能够一向写在行列式的外部,也正是说用k乘以行列式也正是乘进入行列式的某1行或列。

能够生产行列式能够写为两行列式之和。供给那两行列式除了某壹行或列其他都同一,相加结果即为此行或列相加,其他照写。

把行列式的某1行的K倍加到另一行,行列式的值不变。

再有二个不晓得有啥用的个性:某一行或列的因素与另1行对应行或列的要素的代数余子式乘积之和等于0。

其三节是有关上述天性在估测计算中的的现实性运用。

也正是说关于怎么着简化运算(假如难题未有硬性供给,直接硬算也是相当的粗略的章程)

唯独只要行列式中蕴藏不少未知量,不得不认同化简后总计确实是必用的好措施。

ca88手机版登录网页,成为上三角,尽大概将某行或列化为0以简化运算。

再有范德蒙行列式的盘算规律。

第5节讲了克雷姆法则

D≠0时,线性方程组有唯1解,此时齐次线性方程组有唯一零解。

D=0时,齐次线性方程组有非零解。


第二章矩阵

第3章讲的多为矩阵的品质和基本概念

先是节,矩阵的概念

矩阵是更便利的化简线性方程组的款型。

打探阶梯形矩阵,增广矩阵,行矩阵(向量),列矩阵(向量),方阵,对角矩阵,数量矩阵,单位矩阵,上下三角矩阵,对称与反对成矩阵,同规模矩阵的基本概念,主对角线上的成分称为主对角元,矩阵A加相对值后为该矩阵的行列式。

其次节,矩阵的运算

问询矩阵的加法运算,数乘运算以及乘法运算,体会驾驭矩阵与行列式运算的不一样之处,以及对角矩阵乘以普通矩阵和壹般矩阵乘以对角矩阵的分别。(1)

除非前列与后行相等的矩阵才方可相乘,矩阵的乘法不满意调换律,互换后乘积仍卓殊的矩阵为可沟通矩阵。(二)

由(1)(二)可得数量矩阵与同阶的别的方阵都是可调换的。

多少个非零矩阵的乘积恐怕是零矩阵,且矩阵的乘法不满意消去律,别的律满足,且|AB|=|A||B|,简单推出|AB|=|BA|

A的0次为E。一般(AB)ⁿ≠AⁿBⁿ,但若A B为可交换矩阵,则树立。

矩阵与其转置的连锁性质

对称矩阵A=A’,反对称矩阵A=-A’


无戒365磨练营极限挑衅第肆0天

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图