Use Math Utilities in the OpenCASCADE
OpenCASCADE由七个模块组成,分别如下:
- Module FoundationClasses; 基础类;
- Module ModelingData; 造型数据;
- Module ModelingAlgorihtms; 造型算法;
- Module Visualization; 可视化;
- Module ApplicationFramework; 程序框架;
- Module DataExchange; 数据交换;
- Module Draw;
其中基础类模块有三个工具箱:
- Toolkit TKAdvTools; 高级工具箱;
- Toolkit TKMath; 数学工具箱;
- Toolkit TKernel; 核心工具箱;
根据OpenCASCADE的Reference文档,查到math_Gauss类,描述如下:
This class implements the Gauss LU decomposition (Crout algorithm) with partial pivoting (rows interchange) of a square matrix and the different possible derived calculation :
- Solution of a set of linear equations.
- Inverse of a matrix.
- Determinant of a matrix.
主要根据矩阵的三角分解中的LU分解方法,可作如下计算:
为简单起见,先做个简单的测试,求以下方程组的解:
OpenCASCADE的C++代码如下:(新建一个控制台程序,需要包含TKernel.lib;TKMath.lib两个库;)
1: //------------------------------------------------------------------------------
2: // Copyright (c) 2012 eryar All Rights Reserved.
3: //
4: // File : Main.cpp
5: // Author : eryar@163.com
6: // Date : 2012-6-20 20:06
7: // Version : 1.0v
8: //
9: // Description : Learn to use OpenCASCADE Math Utilities.
10: //
11: //==============================================================================
12:
13: #include <math_Gauss.hxx>
14:
15: int main(int argc, char* argv[])
16: {
17: math_Matrix aMatrix(1, 3, 1, 3);
18: math_Vector b1(1, 3);
22:
23: //aMatrix, b1 and b2 are set here to the appropriate values
24: aMatrix(1, 1) = 10;
25: aMatrix(2, 2) = 2;
26: aMatrix(3, 3) = 8;
27:
28: b1.Init(1);
29:
30: // Use Gause method
31: math_Gauss sol(aMatrix);
32:
33: // LU decomposition of A
34: if (sol.IsDone())
35: {
36: sol.Solve(b1, x1);
37: }
38: else
39: {
40: // Fix up
41: try
42: {
43: sol.Solve(b1, x1);
44: }
45: catch (Standard_Failure)
46: {
47: Handle(Standard_Failure) error = Standard_Failure::Caught();
48: cout<<error<<endl;
49: }
50: }
51:
52: cout<<aMatrix;
53: cout<<b1;
54: cout<<x1;
55:
56: return 0;
57: }
输出结果如下所示:
1: math_Matrix of RowNumber = 3 and ColNumber = 3
2: math_Matrix ( 1, 1 ) = 10
3: math_Matrix ( 1, 2 ) = 0
4: math_Matrix ( 1, 3 ) = 0
5: math_Matrix ( 2, 1 ) = 0
6: math_Matrix ( 2, 2 ) = 2
7: math_Matrix ( 2, 3 ) = 0
8: math_Matrix ( 3, 1 ) = 0
9: math_Matrix ( 3, 2 ) = 0
10: math_Matrix ( 3, 3 ) = 8
11: math_Vector of Length = 3
12: math_Vector(1) = 1
13: math_Vector(2) = 1
14: math_Vector(3) = 1
15: math_Vector of Length = 3
16: math_Vector(1) = 0.1
17: math_Vector(2) = 0.5
18: math_Vector(3) = 0.125
19: Press any key to continue . . .
结论
通过对基础类模块中数学工具箱的使用,对OpenCASCADE慢慢进行了解。