青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

OpenCascade Matrix

Posted on 2013-07-17 22:57 eryar 閱讀(3461) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCascade Matrix

eryar@163.com

摘要Abstract:本文對矩陣作簡要介紹,并結合代碼說明OpenCascade矩陣計算類的使用方法。

關鍵字Key Words:OpenCascade、Matrix、C++

一、引言Introduction

矩陣的研究歷史悠久,拉丁方陣和幻方在史前年代已有人研究。作為解決線性方程的工具,矩陣也有不短的歷史。1693年,微積分的發現者之一萊布尼茨建立了行列式論(theory of determinants)。1750年,克拉默又定下了克拉默法則。1800年代,高斯和威廉若爾當建立了高斯-若爾當消去法。

從其發展歷史可以看出,從行列式論的提出到克拉默法則總共歷時50多年之久,而在我們《線性代數》的課本中,也就是一章的內容,學習時間可能只有一個星期。難怪這些概念這么抽象晦澀,也是情有可原的,哈哈。不過,當理解這些概念,也就掌握了一個強大的工具,因為它也使有些計算統一、簡單。

矩陣是高等代數中的常見工具,也常見于統計分析等應用數學學科中。在物理學中,矩陣用于電路學、力學、光學和量子物理中都有應用;計算機科學中,三維變換就是使用了矩陣的線性變換。矩陣的運算是數值分析領域的重要問題。

在計算機圖形相關的軟件中,矩陣是必不可少的重要工具。如:OpenGL、DirectX中的變換都是用矩陣實現的;OpenCascade中就有矩陣計算類(math_Matrix);OpenSceneGraph中也有矩陣的計算類(osg::Matrix)等等。矩陣在計算中主要用來表達線性變換,統一三維空間中物體的位置和方向變換。

本文主要介紹OpenCascade中矩陣類的使用方法。

二、矩陣的運算 Matrix Calculation

矩陣的運算主要有矩陣的加法、數與矩陣相乘、矩陣與矩陣相乘、矩陣的轉置、方陣的行列式、共軛矩陣、逆矩陣。還有通過矩陣來求解線性方程組的解問題。

1. 矩陣的加法 Matrix Addition

wps_clip_image-24960

wps_clip_image-26221

應該注意,只有當兩個矩陣是同型矩陣時,才能進行加法運算。矩陣加法滿足下列運算規律:設A、B、C都是m×n矩陣:

wps_clip_image-24741

2. 數與矩陣相乘 Matrix Multiplication

wps_clip_image-10866

wps_clip_image-26972

數乘矩陣滿足下列運算規律(設A、B為m×n矩陣,λ、μ為數):

wps_clip_image-18082

矩陣相加與矩陣相乘合起來,統稱為矩陣的線性運算。

3. 矩陣與矩陣相乘 Matrix Multiplication

wps_clip_image-21494

wps_clip_image-8947

并把此乘積記作:C = AB

按此定義,一個1×s行矩陣與一個s×1列矩陣的乘積是一個1階方陣,也就是一個數:

wps_clip_image-23994

由此表明乘積矩陣AB=C的(i,j)元cij就是A的第i行與B的第j列的乘積。必須注意:只有當每一個矩陣(左矩陣)的列數等于第二個矩陣(右矩陣)的行數時,兩個矩陣才能相乘。

矩陣的乘法雖不滿足交換律,但仍滿足下列結合律和分配律(假設運算都是可行的):

wps_clip_image-20509

4. 矩陣的轉置 Matrix Transpose

wps_clip_image-769

wps_clip_image-13729

矩陣轉置也是一種運算,滿足下列運算規律(假設運算都是可行的):

wps_clip_image-16264

5. 方陣的行列式 Determinant of the Square Matrix

wps_clip_image-29034

應該注意,方陣與行列式是兩個不同的概念,n階方陣是n×n個數按一定方式排列成的數表,而n階行列式是這些數(也就是數表A)按一定的運算法則所確定的一個數。

由A確定|A|的這個運算滿足下述運算規律(設A、B為n階方陣,λ為數):

wps_clip_image-3633

6. 逆矩陣 Inverse of Matrix

定義:對于n階矩陣A,如果一個n階矩陣B,使AB=BA=E,則說矩陣A是可逆的,并把矩陣B稱為A的逆矩陣,簡稱逆陣。

方陣的逆矩陣滿足下列運算規律:

wps_clip_image-32006

7. 線性方程組的數值解法

在自然科學和工程中有很多問題的解決都歸結為求解線性方程組或者非線性方程組的數學問題。例如,電學中的網絡問題,用最小二乘法求實驗數據的網線擬合問題,三次樣條的插值問題,用有限元素法計算結構力學中的一些問題或用差分法解橢圓型偏微分方程的邊值問題等等。

求解線性方程組的直接法主要有選主元高斯消去法、平方根法、追趕法等。如果計算過程中沒有舍入誤差,則此種方法經過有限步算術運算可求得方程組的精確解,但實際計算中由于舍入誤差的存在和影響,這種方法也只能求得方程組的近似解。目前這種方法是計算機上解低階稠密矩陣的有效方法。

高斯消去法是一個古老的求解線性方程組的方法,但由于它改進得到的選主元的高斯消去法則是目前計算機上常用的解低階稠密矩陣方程組的有效方法。

用高斯消去法解方程組的基本思想是用矩陣行的初等變換將系數矩陣化為具有簡單形式的矩陣,即三角形矩陣,再通過回代過程,求出方程組的解。

三、OpenCascade矩陣計算

在OpenCascade中,矩陣的計算類是math_Matrix,它可以有任意的行數和列數,實現了矩陣大部分的運算。以下通過程序實例來說明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(
1313);
    math_Matrix B(
1313);
    math_Matrix C(
1313);

    
// 1. Test Matrix Transpose and multiply.
    
// 題目來自P53習題二 第3題
    
// Set value of Matrix A
    A.Init(1);
    A(
23= -1;
    A(
32= -1;

    
// Set value of Matrix B
    B(11= 1;    B(12= 2;    B(13= 3;
    B(
21= -1;   B(22= -2;   B(23= 4;
    B(
31= 0;    B(32= 5;    B(33= 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(1414);
    D(
11= 3;    D(12= 1;    D(13= -1;    D(14= 2;
    D(
21= -5;   D(22= 1;    D(23= 3;     D(24= -4;
    D(
31= 2;    D(32= 0;    D(33= 1;     D(34= -1;
    D(
41= 1;    D(42= -5;   D(43= 3;     D(44= -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(1313);

    E(
11= 1;    E(12= 2;    E(13= -1;
    E(
21= 3;    E(22= 4;    E(23= -2;
    E(
31= 5;    E(32= -4;   E(33= 1;

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

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


線性方程組的計算方法請參考另一篇blog:

使用OpenCASCADE的Math功能解線性方程組

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

四、結論 Conclusion

OpenCascade的math_Matrix實現了矩陣的大部分運算,也可以作為一個小型的C++矩陣計算庫來使用,在沒有安裝Matlab、Mathematica等軟件的情況下,可以使用這個庫進行一些計算。

另外,對《計算方法》中算法感興趣的讀者可以參考OpenCascade其中代碼的實現,加深對相關算法的理解。

五、參考文獻 Bibliography

1. 同濟大學應用數學系 線性代數 高等教育出版社 2003

2. 易大義,沈云寶,李有法 計算方法 浙江大學出版社 2002

 

PDF Version: OpenCascade Matrix

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美大胆人体视频| 99精品国产热久久91蜜凸| 欧美国产一区在线| 国产精品一卡二卡| 亚洲精品日韩一| 亚洲国产欧美日韩精品| 亚洲专区一二三| 一区二区三区成人| 欧美成人乱码一区二区三区| 久久久夜夜夜| 国产乱码精品| 亚洲一区二区在| 亚洲影院高清在线| 欧美日韩精品欧美日韩精品一| 欧美成人自拍| 伊人精品视频| 久久久亚洲一区| 另类成人小视频在线| 国模 一区 二区 三区| 亚洲欧美日本另类| 欧美一级精品大片| 国产精品网红福利| 亚洲一区网站| 久久精品国产亚洲一区二区三区| 国产精品美女主播| 国产精品99久久久久久人| 亚洲午夜高清视频| 欧美色欧美亚洲高清在线视频| 亚洲精品久久久久久久久久久久久| 国内偷自视频区视频综合| 欧美一区亚洲| 乱中年女人伦av一区二区| 韩国成人福利片在线播放| 欧美在线www| 久久亚洲免费| 亚洲国产精品成人精品| 欧美mv日韩mv国产网站| 亚洲第一在线| 一区二区免费看| 国产精品福利片| 亚洲欧美视频| 欧美xxx成人| 99热这里只有成人精品国产| 欧美日韩一区二区三区免费| 亚洲免费在线视频一区 二区| 久久久久九九九| 亚洲成色精品| 欧美日韩国产在线播放网站| 中文av一区特黄| 久久婷婷激情| 9国产精品视频| 国产欧美一区二区精品忘忧草| 久久国产精品网站| 亚洲国产精品久久久久秋霞蜜臀| 在线视频一区观看| 国产精品视频自拍| 久久亚洲精选| 亚洲一级片在线看| 久久嫩草精品久久久精品| 亚洲精品日韩在线观看| 国产精品亚洲综合天堂夜夜| 久久综合电影一区| 99在线热播精品免费99热| 久久久久久夜| 亚洲永久精品大片| 亚洲第一精品夜夜躁人人躁| 欧美视频手机在线| 久久精品国产第一区二区三区| 亚洲国产精品传媒在线观看| 性做久久久久久| 91久久精品网| 国产一区二区三区在线观看免费视频 | 在线国产日韩| 欧美系列一区| 另类尿喷潮videofree| 一区二区三欧美| 欧美国产另类| 久久精品青青大伊人av| 一区二区三区四区五区视频 | 99av国产精品欲麻豆| 久久精品视频网| 亚洲网站在线观看| 亚洲国产成人在线| 国产伪娘ts一区| 欧美午夜久久久| 欧美大片免费观看| 久久久久久精| 欧美一区成人| 亚洲免费在线观看视频| 亚洲精品国产无天堂网2021| 欧美96在线丨欧| 久久人人看视频| 欧美自拍丝袜亚洲| 亚洲一区免费在线观看| 日韩一级大片在线| 亚洲国产精品久久久久久女王| 国产一区二区你懂的| 国产精品久久久久久久久久久久久久| 欧美成人国产va精品日本一级| 久久久精品tv| 欧美一区国产在线| 午夜精品一区二区三区四区| 亚洲淫片在线视频| 亚洲午夜激情网页| 亚洲一区二区三区精品在线| 在线视频精品一区| 一本色道久久88亚洲综合88| 日韩视频一区二区三区在线播放免费观看| 欧美成人首页| 欧美激情第4页| 亚洲大片免费看| 亚洲国产成人在线播放| 亚洲国产电影| 亚洲欧洲精品一区二区三区不卡 | 两个人的视频www国产精品| 久久国产加勒比精品无码| 午夜久久久久久| 欧美在线视频一区二区三区| 欧美一区二区三区男人的天堂| 午夜精品久久久久久久白皮肤 | 亚洲一区3d动漫同人无遮挡| 亚洲无亚洲人成网站77777 | 亚洲精品一区二区在线观看| 亚洲免费福利视频| 日韩一级裸体免费视频| aa亚洲婷婷| 午夜精品视频在线观看一区二区| 性娇小13――14欧美| 久久精品国产99精品国产亚洲性色| 久久久99精品免费观看不卡| 奶水喷射视频一区| 欧美性猛交xxxx乱大交退制版| 国产伦精品一区二区三区高清版| 国产综合色产在线精品| 91久久国产综合久久蜜月精品 | 久久久久久久一区| 欧美国产日韩精品| 国产精品xxxav免费视频| 国产欧美日韩精品a在线观看| 激情综合自拍| 一二三区精品| 久久九九热免费视频| 欧美二区在线观看| 一区二区三区|亚洲午夜| 欧美在线免费观看| 欧美精品粉嫩高潮一区二区| 国产精品永久免费观看| 亚洲一级特黄| 久久久久久一区| 久久久久久久一区二区三区| 免费亚洲电影| 国产精品乱人伦一区二区 | 欧美日韩精品免费观看| 国产视频一区二区在线观看| 亚洲精品久久久一区二区三区| 午夜精品福利电影| 欧美好骚综合网| 亚洲欧美网站| 欧美日本在线观看| 黄色成人av网| 性色av香蕉一区二区| 亚洲国产日韩在线| 欧美一区二区三区视频在线观看| 欧美精品日日鲁夜夜添| 国产午夜精品久久久| 一区二区高清| 欧美成人一二三| 欧美一区二区三区免费观看视频| 欧美久久电影| 在线免费日韩片| 久久久久久久久久久久久女国产乱 | 亚洲欧美日韩天堂| 欧美啪啪成人vr| 亚洲国产精品一区二区尤物区| 午夜久久久久久| 日韩写真在线| 欧美精品九九| 亚洲国产成人久久综合| 久久久久九九九九| 午夜欧美精品| 国产女人水真多18毛片18精品视频 | 精品动漫3d一区二区三区免费| 亚洲欧美日韩直播| 日韩一级视频免费观看在线| 欧美激情精品久久久久久久变态 | 亚洲精品久久久久中文字幕欢迎你| 久久久久这里只有精品| 亚洲一区二区在线观看视频| 欧美亚男人的天堂| 一区二区三区精品视频| 亚洲三级毛片| 欧美人与禽性xxxxx杂性| 亚洲日本无吗高清不卡| 欧美岛国激情| 欧美高清hd18日本| 亚洲伦理在线观看| 91久久精品www人人做人人爽 | 亚洲精品欧美在线| 欧美成人免费在线| 免费久久精品视频|