[G+smo] gsMultiPatch 类

2024-01-19 12:58
文章标签 smo gsmultipatch

本文主要是介绍[G+smo] gsMultiPatch 类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1. gsMultiPatch类

gsMultiPatch类的继承关系


重要函数

得到几何信息: 
/// Dimension of the parameter domain (must match for all patches).
    int parDim() const 

/// Dimension of the geometry (must match for all patches).
    int geoDim() const;

/// Number of patches
    std::size_t nPatches() const          { return m_patches.size(); }

得到patch和geometry:

/// Return the \a i-th patch.
    gsGeometry<T>& patch( std::size_t i ) const


/// Return the basis of the \a i-th patch.
    gsBasis<T> & basis( std::size_t i ) const;

/// Returns the range of parameter
    gsMatrix<T> parameterRange(int i = 0) const;

 /// Number of patches
    std::size_t nPatches() const          { return m_patches.size(); }

/// Returns a vector of patches // to do : replace by copies
    PatchContainer const& patches() const { return m_patches; }

/// Return the \a i-th patch.
    const gsGeometry<T> & operator []( size_t i ) const { return *m_patches[i]; }

 /// Makes a deep copy of all bases and puts them in a vector
    std::vector<gsBasis<T> *> basesCopy() const;

修改几何:
/// Add a patch.
    void addPatch( gsGeometry<T> * g );

/// Search for the given geometry and return its patch index.
    int findPatchIndex( gsGeometry<T>* g ) const;

/// Add boundary
void addPatchBoundary( gsGeometry<T>* g, boxSide s ) 

///几何的细化和升阶

void uniformRefine(int numKnots = 1, int mul = 1);
    void degreeElevate(int elevationSteps = 1);


/// Attempt to compute interfaces and boundaries automatically. 几何类的计算
    bool computeTopology( T tol = 1e-4 );

///初始化
/// Clear (delete) all patches
    void clear()


重要变量



2. 使用示范

声明和定义


gsMultiPatch的声明:gsMultiPatch<> * patches;
gsMultiPatch的定义:patches = gsNurbsCreator<>::BSplineSquareGrid(1, 1, 2, -1,-1); 定义一个 1×1 NURBS片,每个片的边长为2,左下侧点坐标为(-1,-1)。


升阶和细化

patches->patch(0).degreeElevate(1);    
for (int i = 0; i < numRefine; ++i)
        patches->patch(0).uniformRefine();

patches->degreeElevate(1); 
    for (int i = 0; i < numRefine; ++i)
        patches->uniformRefine();

控制点


gsMultiPatch<> * patches  = gsNurbsCreator<>::BSplineSquareGrid(2, 2, 1, -1,-1);
//Scaling
    //for ( size_t i = 0; i<patches->nPatches(); ++i)
    //    patches->patch(i).coefs().array() /= 10.0;
    //gsWrite(*patches,"scaledpatches");


附录
头文件:stable\src\gsCore\gs\gsMultiPatch.h

这篇关于[G+smo] gsMultiPatch 类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/622504

相关文章

SVM-SMO算法

SMO算法思想 上面这个优化式子比较复杂,里面有m个变量组成的向量α𝛼需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 ∑ i = 1 m α i y i = 0 \sum\limits_{i=1}^{m}\alpha_iy_i = 0 i=1∑m​αi​yi​=0.假如将 α 3 , α 4 , . .

机器学习算法实践-SVM中的SMO算法

前言 前两篇关于SVM的文章分别总结了SVM基本原理和核函数以及软间隔原理,本文我们就针对前面推导出的SVM对偶问题的一种高效的优化方法-序列最小优化算法(Sequential Minimal Optimization, SMO)的原理进行总结并进行相应的Python实现。 坐标上升算法(Coordinate Ascent) 在SMO算法之前,还是需要总结下坐标上升算法,因为SMO算法的

SVM(三) SMO优化算法求解

SMO优化算法(Sequential minimal optimization) SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for

Python3:《机器学习实战》之支持向量机(2)简化版SMO

Python3:《机器学习实战》之支持向量机(2)简化版SMO 转载请注明作者和出处:http://blog.csdn.net/u011475210代码地址:https://github.com/WordZzzz/ML/tree/master/Ch06操作系统:WINDOWS 10软件版本:python-3.6.2-amd64编  者:WordZzzz Python3机器学习实

SVM-SMO算法C++实现

SMO程序 #include <iostream>#include <stdlib.h>#include <string>#include <math.h>#include "matrix.h"#include <fstream>#include <sstream>#include <stack>using namespace std;#define MAX_SIZE_OF_T

复现SMO算法:序列最小优化的启发式方法【三、算法原理揭秘-2】

接下来的内容将转向SMO算法的第二个核心组成部分——选择要优化的乘数的启发式方法。在这篇博客中,我们将探讨算法如何通过启发式选择策略高效地识别和更新拉格朗日乘数。通过对比直接优化的分析方法和启发式方法的策略选择,我们能够更全面地理解SMO算法在解决支持向量机(SVM)优化问题中的独特优势。 启发式方法 二、选择要优化的乘数的启发式方法1.外层循环 - 选择 α 1 \alpha_1 α1

复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】

在这篇深入探讨序列最小优化(SMO)算法的第一部分中,我们专注于算法核心的第一个组成部分——求解两个拉格朗日乘数的分析方法。我们将逐步展开详细的数学推导,明确如何从约束的确定到乘数的优化更新,直至找到最优解。在介绍这一复杂的过程时,我们将特别注意保持逻辑的清晰性和步骤的精确性,确保即使是初学者也能跟随每一个推导步骤。 一、求解两个拉格朗日乘数的分析方法 SMO算法的一个关键创新是将大型二次规划

支持向量机(三)序列最小最优化算法(SMO)

在支持向量机(一)和支持向量机(二)两篇文章中,我们分别介绍了线性可分的支持向量机和线性向量机,从中可知,我们最终的目的是要计算得出支持向量对应的拉格朗日乘子α,但是我们并没有说怎么算。这篇文章主要介绍了序列化最小优化算法,用来计算α。在介绍之前我们先简单介绍一下其中用到的核函数。 核函数         首先我们看下面的两个图:

SVM——(七)SMO(序列最小最优算法)

在说SMO (Sequential minimal optimization)之前,先介绍一种与之类似的算法,坐标上升(下降)算法. 1.Coordinate ascent 所谓坐标上升(下降)指的是同一个算法,只是若实际问题是求极大值则是上升,反之为下降。我们知道梯度下降算法在每次迭代过程中都是沿着梯度的(反)方向进行的;而坐标下降算法则是在每次迭代中分步沿着你n个(n为特征维度)方向进行的

SMO Algorithm流程

SMO Algorithm流程 SMO Algorithm Input: T T T = (x1,y1),(x2,y2),...,(xN,yN)(x1,y1),(x2,y2),...,(xN,yN){(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})} ,精度 ϵ ϵ \epsilon Output:近似解 y^ y ^ \hat{y