OpenCascade中的math基本功能

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:Arial; mso-fareast-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1730298678; mso-list-type:hybrid; mso-list-template-ids:-2104622594 -329117226 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-number-format:alpha-upper; mso-level-text:%1、; mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

OpenCascade中的math模块提供了最低层的math功能,是基础而又核心的功能。其实现,对一些算法的学习有很好的借鉴作用,可以借鉴其中数学算法的实现。当然,math中的功能也可以直接拿来使用,由于math模块是最低层模块的低层功能,因此和其他代码的关联不大,单独使用也是比较方便的。

      下面简单分类总结一下其功能:

 

A、 方程 function 的表示

math 中包含的方程类别有:

单变量方程,包括单变量带一阶导数的方程,有如下类表示:

math_Function 单变量方程

―― math_FunctionWithDerivative 单变量带一阶导数的方程。

其主要功能就是表示一个函数,但不记录函数的显示表达式,而是提供接口,根据传入的参数计算函数的值,实现如下功能:

y = f(x)  dy = df(x)

从而达到表示一个函数的目的。具体的函数由这两个类派生,实现对应接口。

 

多变量方程     

类如下:

math_MultipleVarFunction

―― math_MultipleVarFunctionWithGradient

分别表示多变量方程和带一阶导数的多变量方程。基本接口是:

  返回包含的变量个数

  根据传入参数返回方程中函数的值和导数

 

多变量方程组

类如下:

math_FunctionSet

―― math_FunctionSetWithDerivatives

表示了 M 个变量 N 个方程的方程组。接口是:

  返回变量个数和方程个数

  根据传入的参数,计算方程的值和导数。

方程可以是非线性方程,不局限具体的形式。

具体的方程组,由上面类派生,并在接口中实现对应求值的功能,以方便外部的使用。

 

B、 方程和方程组求根的功能

math 包提供了多种方法来解方程和方程组。

对单变量方程,有如下求根类:

math_BracketedRoot 类,使用 Brent 方法求在范围 [a,b] 内的单变量方程的一个根。该方法不需要知道方程的导数。

math_BissecNewton 类,使用对分法和 Newton-Raphson 法求在范围 [a,b] 内的一个根。该方法需要知道方程的导数信息。

math_DirectPolynomialRoots 类,对小于 4 次的多项式,使用公式直接求解,获得的解再用 newton 法进行精化。

math_FunctionRoot 类,由一个猜测的初始值,计算出附近的一个精确解。需要知道方程的导数。

math_FunctionRoots 类,解出一个范围内的方程的所有实数解。需要知道方程的导数。

math_NewtonFunctionRoot 类,使用 newton 法从一个初始点解出一个精确点,需要知道方程的导数。

线性方程组的解法:

math_Crout 类,使用 Crout 方法解方程组 A * X = B, 其中 A 是对称矩阵。

Math_Gauss 类,使用 Gauss 分解法和行交换的方法解方程组。

math_Householder

math_GaussLeastSquare

math_SVD 类都是对 M 变量 N 个方程的方程组求解,前两个使用最小二乘法。

对多变量方程组有如下方法:

math_FunctionSetRoot 类,从一个初始值,计算 M 个变量 N 个方程的解。是一个很有用的类。内部使用了求最小值算法。也可以用于求最小值问题。

math_NewtonFunctionSetRoot 类,根据一个初始值,使用 Newton-Raphson 算法,计算 N 变量 N 个方程的方程组的解。

 

C、 方程和方程组求极值的功能

计算方程和方程组的极小值问题。有如下的算法:

math_BFGS ,求多变量方程的极小值算法。使用了 Broyden-Fletcher-Goldfarb-Shanno 算法。

math_BracketMinimum 算法,单变量方程的极小值算法。

math_BrentMinimum 类,求一个单变量方程极小值的算法。

Math_FRPR 类,实现了 Fletcher-Reeves-Polak_Ribiere 极小值算法。

 

D、 数值积分算法

实现了单变量和多变量积分,使用了 Gauss 积分实现。

math_GaussSingleIntegration 类,单变量积分。

math_GaussMultipleIntegration 类,多变量积分。

E、 特征值和特征向量算法

math_Jacobi 类,计算对称矩阵的特征值和特征向量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值