OPEN CASCADE Multiple Variable Function

by admin on 2018年12月16日

OPEN CASCADE Multiple Variable Function

eryar@163.com

Abstract. Multiple variable function with gradient and Hessian
matrix is very very import in OPEN CASCADE optimization algorithms. In
order to understand these optimization algorithm better, let’s study
some basic knowledge about Gradient, Hessian Matrix.

Key Words. Multiple Variable Function, Gradient, Hessian Matrix,
最优化算法,

1. Introduction

当函数只出一个自变量时,感觉相对简便易行,一切还在控制其中。如参数u表示的B样条曲线,当参数u在[0,1]内转移时,就足以取得同参数对应之曲线上之点。当函数有多单自变量时,就出接触无法,毕竟人们还欢喜安稳,不爱太多之变动。当变化最为多时,拿到的结果吗再充裕多彩。如发生一定量只参数u,v表示的B样条曲面,参数变化之限定是一个u∈[0,1],v∈[0,1]矩形空间,与参数u,v对应的凡均等片曲面上之触发。

当骨子里利用中,与多元函数之同一阶导数(Gradient梯度)、二阶导数(Hessian
Matrix)和多元函数之极值等概念呢是明非线性最优化问题的基础知识。

OPEN
CASCADE中一些求极值和临界等算法中便用了非线性最优化算法,如下类图所示:

图片 1

Figure 1.1 Multiple Variable Function in OPEN CASCADE

假若达到图所示,具有二阶导数(Hessian
Matrix)的大半正函数应用至全局优化的求极值算法中。在为此能量法实现之曲线光顺(Fair
Curve)算法中也运用到了有二阶导数的几近老大函数。为了重新好地驾驭最优化的求实实现,先学下OPEN
CASCADE中以及多元函数有关概念的表明情势:多第一届函数、梯度Gradient和Hessian
Matrix。

2.Multiple Variable Function

在《高等数学》中为闹了大多首函数的定义:设D是平面及一个接触集合。如果对每个点P(x,y)∈D,变量z依据一定法虽总有确定的价与它们对应,则称z是变量x,y的次探花函数。点集D称为该函数之定义域,x,y称为自变量,z称为坐变量。当从变量的个数大于1个时,即n≥2,n元函数统称为两头函数。

以OPEN
CASCADE中及多级函数最直白的应和就是近似Geom_Surface,即参数表示的曲面,参数u,v的取值区域啊多第一位函数的定义域,当指定uv时拿到的曲面上之点即为多元函数值。OPEN
CASCADE的数学包中尚叫出了双重抽象地多元函数类:math_MultipleVarFunction。

图片 2

Figure 2.1 math_MultipleVarFunction class diagram

出于地点的类图可知,类math_MultipleVarFunction是个抽象类,有有限单纯虚函数:

v NbVariables() const = 0:自变量的个数;

v Value(const math_Vector& X, Standard_Real& F) =
0:统计指定由变量X对应的函数值F。自变量X是只向量,其中的价值分别针对许多独自变量;

下让起一个基本上头条函数的具体选用,即总结二重积分。题目来也《高等数学》教材习题9-2(1):

图片 3

每当OPEN CASCADE中总计上述二重积分代码如下所示:

/*
*    Copyright (c) 2015 Shing Liu All Rights Reserved.
*
*           File : main.cpp
*         Author : Shing Liu(eryar@163.com)
*           Date : 2015-11-28 21:00
*        Version : OpenCASCADE6.9.0
*
*    Description : Test Gauss Multiple integration.
*/

#define WNT
#include <math_MultipleVarFunction.hxx>
#include <math_GaussMultipleIntegration.hxx>

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

class math_TestFunction : public math_MultipleVarFunction
{
public:
    virtual Standard_Integer NbVariables() const
    {
        return 2;
    }

    virtual Standard_Boolean Value(const math_Vector& X, Standard_Real& F)
    {
        F = X(1) * X(1) + X(2) * X(2);

        return Standard_True;
    }
};

void testMultipleIntegration(void)
{
    math_Vector aLower(1, 2);
    math_Vector aUpper(1, 2);
    math_IntegerVector aOrder(1, 2, 10);

    aLower(1) = -1.0;
    aLower(2) = -1.0;

    aUpper(1) =  1.0;
    aUpper(2) =  1.0;

    math_TestFunction aFunction;
    math_GaussMultipleIntegration aIntegrator(aFunction, aLower, aUpper, aOrder);

    if (aIntegrator.IsDone())
    {
        std::cout << aIntegrator;
    }
}

int main(int argc, char* argv[])
{
    testMultipleIntegration();

    return 0;
}

经过打空洞类math_MultipleVarFunction派生出一个实际的多元函数接近,在虚函数Value()统计指定向量X对应之套数值,通过函数NbVariables()确定于变量的个数。为何可以针对类math_Vector的对象用括号直接开展取值和赋值呢?因为于这仿佛吃重载了括号运算符。总括结果而下图所示:

图片 4

Figure 2.2 Integration Value

坐使用math_GaussMultipleIntegration时需指定积分区域,且不得不为常数,所以如下所显示之积分区域中富含变量的文山会海积分就非克总计:

图片 5

OPEN CASCADE中同一类别函数对应的一元函数的积分总括参考:

OPEN CASCADE Gauss Integration:

http://www.cppblog.com/eryar/archive/2014/09/11/208275.html

3.Gradient

在其次老大函数情状,设计函数z=f(x,y)在面区域D内具有同等阶段连续偏导数,则对各一点P(x,y)∈D都得以毫无疑问出一个向量:

图片 6

霎时为量称为函数z=f(x,y)在点P(x,y)的梯度(gradient),记作gradf(x,y)。对于两头函数u=f(X),X=(x1,x2,
…, xn)T,有如下概念:

设u=f(X),X∈S,若当触及x0=(x1(0),x2(0), …, xn(0))T处对于自变量X=(x1,x2,
…,
xn)T的依次分量的偏导数图片 7犹留存,则称函数u=f(X)在触发x0处一等级可导,并遂向量图片 8大凡u=f(X)在触及x0处之梯度Gradient或一致阶导数。

无约束优化最优性的同路必要条件是:若x0是无约束优化问题的片最优值点,则图片 9

是因为数学分析可知,图片 10的方向为f(X)之顶值面(等值线)的法线在触及x0处之大势,即沿梯度方向函数值变化最为抢。目的函数梯度为零星之点称为无束缚优化问题之安定点。稳定点或者是目的函数的高大值点,也或是最好小值点,甚至二者都非是。最终一种植境况相应的点称为函数的鞍点,即以起该点出发的一个势头直达是函数的翻天覆地值,而于另一个势上是绝小值点。

针对无束缚优化问题,目的函数在无比优值点的人身自由方向达成的导数都为零星,即目的函数在最好优值点的切平面是水平的。然则不管框优化问题之部分最可怜值点和鞍点也知足上述标准。因而,要确认一个平安无事点是否也无限优值点,还欲考虑该点的二阶最优性条件。

图片 11

于OPEN
CASCADE中与此相应之好像是math_MultipleVarFunctionWithGradient,即具有梯度的几近第一函数。这多少个仿佛为是抽象类,不克间接实例化,若一旦采纳得派生出新类,并实现以下几单纯虚函数:

v NbVariables() const = 0:多元函数起变量个数;

v Value(const math_Vector& X, Standard_Real& F) =
0:统计多元函数以指定变量X处对应的函数值F,通过引用传出;

v Gradient(const math_Vector& X, math_Vector& G) =
0:总计多元函数以指定变量X处的梯度值,通过引用传出;

v Values(const math_Vector& X, Standard_Real& F, math_Vector& G) =
0:总计多元函数在指定变量X处的函数值F和梯度值G;

4.Hessian Matrix

多元函数之二阶导数和Hessian
Matrix的定义如下:设u=f(X),x0∈S,若f以接触x0∈S处对于自变量x∈S的各类重的二阶偏导数图片 12都是,则称函数f(X)在触及x0处二阶可导,且称矩阵

图片 13

为f(X)在接触x0处之二阶导数或Hessian Matrix,Hessian
Matrix有平常为记作H(x0)。

无约束最优化最优性条件的二阶必要条件为:设f(X)在触发x0∈S处二涂鸦可微,若x0最f(X)的有些极小点,则图片 14图片 15半正定。

无约束最优化最优性条件的二阶丰富规范吧:设f(X)在点x0∈S处二次可微,若图片 16图片 17正定,则x0是函数f(X)的严局部极小点。

二次型是X=(x1,x2,…,xn)T的亚涂鸦齐次函数,它当钻探非线性最优化问题中有首要性功效。通过线性代数中正定二次型相关定理,可以汲取Hessian
Matrix正定的论断标准。相对于高级数学中有关二头函数极值丰盛规范的定律,使用Hessian
Matrix更具备普通,适用于自由多首函数。终于了解正定二次型的一个运,将原在线性代数课本中赫然冒出这样个抽象概念,能和事实上使用有些干。看来线性代数必需在实际上应用中才会具有知,如关于现代决定工程被的微分方程组的求解,会用到特征值的辩护;无框最优化问题受到极值丰硕规范的求证要由此到正定二次型理论等。难怪当时于习线性代数的当儿那么难,对这个抽象概念不精晓,学习之时光便不得不是机械的记得,假若未来用非顶,肯定都归老师了。OPEN
CASCADE中及Hessian
Matrix对应的类似是math_MultipleVarFunctionWithHessian,其类图如下所示:

图片 18

Figure 4.1 math_MultipleVarFunctionWithHessian class diagram

出于方类图可知,math_MultipleVarFunctionWithHessian派生于带梯度的多元函数类math_MultipleVarFunctionWithGradient。因而,比带梯度的多元函数类多单求值的虚线函数:

Values(const math_Vector&X, Standard_Real&F, math_Vector&G,
math_Matrix&H) = 0

通过此线虚函数总计出多首届函数在指定变量X处的函数F,梯度值G和Hessian
Matrix H。

因为math_MultipleVarFunctionWithHessian有纯虚函数,所以也不可能一向实例化,需要遵照实际情状由该派生类来使用。正使本文起始所出示之类图中几乎单近乎一样,从带有Hessian
Matrix的多元函数派生出新类来计量全局极值和曲线光顺,如下类图所示:

图片 19

Figure 4.2 math_MultipleVarFunctionWithHessian class diagram

5.Conclusion

每当OPEN CASCADE的数学包Package
math中不仅仅讲述了仅仅爆发一个自变量的一元函数math_Function,也讲述了有三个自变量的基本上首批函数,及其一致阶导数(梯度)和二阶导数(Hessian
Matrix)。通过应用三头版函数的积分总括,可以见到OCC对这多少个概念举行的类封装仍然分外清楚,便于明白与行使。对于这么些基础概念的介绍,便于明白后边具体的优化算法的运用。

自从OPEN
CASCADE中之优化算法能够看出,大旨是数学是迷你工具的游刃有余使用。可以搜寻来《高等数学》、《线性代数》、《最优化措施》、《非线性最优化理论和方》、《数值分析》等息息相关书籍,通过对照OPEN
CASCADE中的程序实现有效的反驳联系实践,提升上效用。而针对高等数学与线性代数可以做到温故知新,对本来百思不解的问题可发只Aha!的清醒,找到学习的意。

6. References

  1. 同济大学数学教研室. 高等数学. 高等教育出版社. 1996

  2. 同济高校动用数学系. 线性代数. 高等教育出版社. 2003

  3. 善大义, 陈道琦. 数值分析引论. 山西高校出版社. 1998

  4. 《运筹学》教材编制组. 运筹学. 武大大学出版社. 2012

  5. 何坚勇. 最优化方法. 武大大学出版社. 2007

  6. 杨庆之. 最优化方法. 科学出版社. 2015

  7. 王宜举, 修乃华. 非线性最优化理论以及方法. 科学出版社. 2012

 

PDF Version: OPEN CASCADE Multiple Variable
Function

OpenCASCADE6.8.0 Reference Manual Serach Problem

eryar@163.com

1. Problem

生网友反映OpenCASCADE6.8.0之Reference
Manual的探寻功效不佳用,往日从未放在心上,自己尝试了下,的确在本机上无克对搜索出给有底重点字系的始末。如下图所示,在检索框中输入gp_Pnt:

图片 20

Figure 1. Search class gp_Pnt

结果莫出去想使之始末,如下图所示:

图片 21

Figure 2. Search Result in the Reference Manual

自打上图能够看,搜索用了search.php来执行搜效率,所以得出结论这些搜索效果要放在协理php的服务器上才可以是履行搜效果。即以OpenCASCADE的官网上是天经地义的,如下所示:

http://dev.opencascade.org/doc/refman/html/search.php?query=gp_Pnt

图片 22

 

2. Solution

OpenCASCADE是采取Doxygen来按照源程序自动生成那参考文档的,所以打源头上来分析,找来由。若想生成些文档,需要而下图所展现之老三正次:

图片 23

Figure 3. Documentation System Prerequistes

下载好这么些第三正在程序后,只待周转gendoc.bat批处理,即可自动生成这Reference
Manual了。如下图所示:

图片 24

Figure 4. Use gendoc.bat file to generate document automatically


实重要仍然赖了Tcl脚本的无敌效能来探寻和安装这一个第三方次,从而使文档生成自动化。从中可以看来,Tcl/Tk脚论以OpenCASCADE中的
又同样采用,除了Draw Test
Harness以外。所以,熟习Tcl/Tk脚本不仅方便针对OpenCASCADE程序的Draw模块的了解,及其自动化测试的落实;还有利于通常啊程
序开发提供有自动化的剧本,来减轻程序开发进程遭到之有机械劳动。运行gendoc.bat可以见到出如下选项:

图片 25

Figure 5. The options of gendoc.bat

起 下面的挑选项可以望,生成文档时可以指定生成的格式,如html, pdf,
chm;还可指定生成OCCT的什么样模块需要生成Reference
Manual;其中导致搜索出题目标凡点名搜索形式,其中有4种情势可供应选拔:none/local/server/external,从中可以看看
OpenCASCADE的装包被提供的是Server情势,所以于本机上不佳用了。假若只要以本机使用搜索功效,可以好来充裕成那一个文档,但是倘诺指定搜索
格局为local。

3. Conclusion

OpenCASCADE用Doxygen及片段叔正次来动生成文档,简化程序支付过程遭到之文档工作。尤其是Tcl/Tk脚本的应用,让更机械的分神由微机来机关就,提升工作效能及编程的乐趣。

如果想使用搜索效果,可以好运行gendoc.bat并点名搜索格局为local即可缓解问题。

4. References

  1. OpenCASCADE Documentation System. 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图