使用OpenCASCADE的Math功能解线性方程组

简介: Use Math Utilities in the OpenCASCADE OpenCASCADE由七个模块组成,分别如下: Module FoundationClasses; 基础类; Module ModelingData; 造型数据; Module ModelingAlgori...

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; 核心工具箱;

根据OpenCASCADEReference文档,查到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分解方法,可作如下计算:

  • 线性方程组的求解;
  • 矩阵的逆;
  • 矩阵的行列式;

为简单起见,先做个简单的测试,求以下方程组的解:

Equation

OpenCASCADEC++代码如下:(新建一个控制台程序,需要包含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慢慢进行了解。

目录
相关文章
一看就会R语言绘制限制性立方样条(Restricted cubic spline,RCS)
最近在研究怎么处理论文数据,各种分析软件都有使用,比如:SPSS、Origin、stata16、medcalc和R语言都有些研究,其中除R语言外都是收费的。不过经过一番功夫,我这边有SPSS、stata16、Origin和medcalc的破解版,有需要的可以关注我的公众号,私聊我来获取,我将给你一个百度网盘下载地址。
722 0
|
4月前
|
Python
python实现:旋转矩阵转换为四元数
python实现:旋转矩阵转换为四元数
120 0
|
7月前
|
机器学习/深度学习 Python
R语言在逻辑回归中求R square R方
R语言在逻辑回归中求R square R方
C# Math(数学公式类)
C# Math(数学公式类)
|
7月前
|
存储 C++
[C++/PTA] 立方体类的实现
[C++/PTA] 立方体类的实现
111 0
[Eigen中文文档] 无矩阵求解器
本文介绍Eigen的无矩阵求解器。
150 0
|
图形学
Unity Mathf【Deg & Rad】- 关于数学运算中的度与弧度
Unity Mathf【Deg & Rad】- 关于数学运算中的度与弧度
290 1
Unity Mathf【Deg & Rad】- 关于数学运算中的度与弧度
|
算法
F#实现Simpson's Rule求数值积分
我们知道,微积分的求值是比较复杂的。一般来说,求积分有定积分和不定积分之分。不定积分需要求出具体的表达式,但被积函数非常复杂时,求解非常费劲,非常可能找不到原函数。而定积分给定了区间范围,可以利用数值方法,利用F#实现对积分的数值计算。
1062 0
F#实现Simpson's Rule求数值积分
旋转矩阵(Rotation Matrix)的推导及其应用
向量的平移,比较简单。   缩放也较为简单   矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了。     稍微复杂一点的是旋转,如果只是二维也很简单(因为很直观),但因为是三维的,有xyz三个轴,先推导二维的再延伸到三维。
4980 0