- 博客(39)
- 收藏
- 关注
原创 有限元中弱形式的一些数学基础
设fff是一个定义在开区间Ω⊂RΩ⊂R上的可积函数。若存在一个可积函数ggg,使得对于任意一个紧支撑φ∈Cc∞Ωφ∈Cc∞ΩΩ\OmegaΩ∫Ωfxφ′xdx−∫Ωgxφxdx∫Ωfxφ′xdx−∫Ωgxφxdx则称ggg是fff的弱导数,记作gf′;g = f';gf′;或gddxfgdxdf。
2024-07-14 22:21:25
835
原创 弹性力学变分原理:最小势能原理
在弹性体中,总势能Π\PiΠ包括应变能和外力势能。ΠU−WΠU−WUUU是系统的应变能。WWW是外力做的功。最小势能原理说明,在弹性体的平衡状态下,系统的总势能达到极小值。这一结论为结构分析和有限元方法提供了理论基础,通过变分法,我们能够求解平衡状态下的位移场和应力场。如何通过最小势能原理求解平衡方程?最小势能原理的适用范围是什么?对于非线弹性体是否能够推广?
2024-07-14 22:20:51
697
原创 力学有限元的基石:虚功原理的推导
虚位移原理是平衡方程和力的边界条件的等效积分“弱”形式。虚位移原理的力学意义是:如果力系(包括内力和外力)是平衡的,则它们在虚位移和虚应变上所作之功的总和为零。反之,如果力系在虚位移及虚应变上所作之功的和等于零,则它们一定是满足平衡的,所以虚位移原理表述了力系平衡的必要而充分的条件。
2024-07-08 23:41:39
1137
原创 加权余量法求解偏微分方程
加权余量法(Weighted Residual Method)是一种数值方法,用于求解偏微分方程(PDEs)。其基本思想是将偏微分方程的残差(或余量)通过加权函数加权,并使加权余量在定义域上为零,从而形成一组代数方程进行求解。
2024-07-08 23:41:15
749
原创 Qt中的事件循环
Gui框架一般都是基于事件驱动的,Qt也不例外,在 Qt 框架中,事件循环(Event Loop)是一个核心机制,负责管理和分发应用程序中的所有事件和消息。
2024-06-15 19:31:25
1176
原创 C++和Python相互调用(2)
编写 C++ 代码:编写你想要包装的 C++ 函数。创建包装代码:利用 Python C API 将 C++ 函数包装为 Python 函数。编写 setup.py:使用 setuptools 编译和安装扩展模块。编译扩展模块:运行 setup.py 进行编译。在 Python 中使用:导入并使用扩展模块。
2024-06-13 21:48:33
1122
原创 C++和Python相互调用(1)
Python的官方解释器CPython是用C语言编写,它提供了强大的C API,使得Python可以扩展和嵌入C和C++代码。
2024-06-13 21:43:13
361
原创 C++ XML文件和解析
DOM 解析:适合需要随机访问和操作 XML 内容的场景,使用简单但内存和性能消耗较大。SAX 解析:适合处理大文件或内存有限的场景,性能高但使用复杂。
2024-06-04 22:36:55
981
原创 MVC、MVP 和 MVVM 架构总结
MVC是一种经典的模式,适用于基础和中等复杂度的应用程序,但可能在复杂应用中导致 Controller 过于复杂。MVP提供了更清晰的视图和逻辑分离,提高了测试性,但可能增加 Presenter 的复杂性。MVVM通过数据绑定简化了视图和逻辑的交互,适合现代前端开发,但需要掌握数据绑定技术,且在复杂应用中可能增加调试难度。
2024-05-31 21:12:56
1355
1
原创 用Visual Studio进行Qt开发的Cmake模板
使用Visual Studio进行Qt开发的时候,我们可以借用Cmake的moc功能和相应对Qt的支持生成VS工程。
2024-05-24 21:27:11
278
原创 Qt moc系统的黑魔法?
我们可以发现,QT的元对象系统并没有什么神奇之处,主要干了下面几件事情通过一个静态成员QMetaObject存储类的元信息通过一个字符串编码存储了信号和槽函数信息通过信号和槽函数的索引。
2024-05-24 21:13:13
1092
原创 OpenMP:变量作用域
使用 lastprivate 子句声明的变量在并行区域内有线程私有副本,但在退出并行区域时,最后一个执行的线程的私有副本将被赋值给相应的共享变量。int x;i < n;// 最后一个迭代的x值被捕获// 现在x等于最后一个线程的x值。
2024-04-21 20:08:27
1020
原创 OpemMP指令: 共享任务构造
共享任务构造(Work-Sharing Constructs)将并行区域的代码执行分配给不同的线程,该指令不产生新的线程,进入共享工作区域不会有同步屏障(barrier),退出共享任务构造的时候会有隐式的同步屏障。
2024-03-22 20:46:41
409
原创 OCCT BRep数据结构
OCCT的拓扑数据结构定义在TopoDS(Topology data structure)为前缀的类中,分为两套派生结构,TopoDS_Shape和TopoDS_TShape
2024-03-20 22:17:19
494
1
原创 OpenMP API 概述
OpenMP API 包括三个独立的组件编译器指令运行时库例程环境变量不同的实现对API组件的支持有所差异,应用程序开发人员决定如何使用这些组件,对于简单的情况,只需要其中的一部分。
2024-03-11 20:01:43
972
1
原创 OpenMP简介
OpenMP 是一个应用程序接口 (API),由一组主要的计算机硬件和软件供应商共同定义。OpenMP 为共享内存并行应用程序的开发人员提供了一个可移植、可扩展的模型。该 API 支持各种架构上的 C/C++ 和 Fortran。
2024-03-10 20:40:06
411
1
原创 OpenCascade源码剖析:Handle类
Handle其实就是智能指针的上古版本,了解一点C++11的应该对shared_ptr非常熟悉,那么你就把Handle当做shared_ptr来理解就没有任何问题了。
2024-03-08 20:30:51
492
1
原创 OpenCascade源码剖析:Standard_Transient根类
Standard_Transient是OCCT继承体系最顶层的根类,Standard_Transient类主要提供了三个机制,内存分配,RTTI和引用计数。
2024-03-07 21:52:03
810
1
原创 C++模板元一生之敌之:std::disconjunction
disconjunction是上篇介绍的conjunction的同胞兄弟,模板参数包中至少有一个为ture时,其value为true,相当于对一系列类型特性(type traits)做逻辑或
2024-03-01 21:36:33
374
1
原创 C++模板元一生之敌之:std::conjunction
std::condition相当于对一系列类型特性(type traits)做逻辑与(And),例如conjunction<T1,T2,T3,>,如果T1,T2,T3能够萃取出bool类型的value,那么上面试式子相当于T1::value && T2::value && T3::value,按照惯例先看应用场景,condition可以用来判断一系列类型是否相同。想要理解这几行代码,首先需要理解递归模板,相信诸位接触过模板元的都知道用模板实现递归计算阶乘的代码。
2024-02-29 20:50:49
485
原创 C++ STL分配器rebind
大部分人在学习STL源码的时候,都会参考侯捷老师的《STL源码剖析》,在第二章介绍分配器的时候,出现过rebind的身影:这段代码神秘的出现在了这里,然后了无后续,相信给很多人造成了STL修仙练气期的心里阴影。
2024-02-27 19:43:37
596
原创 高斯积分和代码实现
高斯积分是有限元中常用的数值积分方法,由于有限元插值函数一般为多项式,被积函数一般也是多项式,高斯积分使用很少的积分点,就能达到较高的积分精度。
2024-02-26 19:50:21
820
1
原创 C++惯用法之:copy and swap idiom
如果拷贝构造函数中发生了异常,对象就不会被修改,因为当前对象的状态只在交换操作中发生变化,这使得整个赋值操作在异常发生时,对象状态仍然保持一致。考虑一个类,其中有成员变量是指针,而拷贝赋值操作需要分配内存,如果分配失败,将抛出异常,如果在这个过程中抛出异常,可能会导致对象的数据处于损坏的状态。这种方法的基本思想是,首先通过深拷贝源对象(operator = 右边的对象)创建一个临时对象,然后与当前对象进行交换。这样,传入对象的资源会转移到当前对象,当前对象原有的资源也能正确释放。操作中抛出了异常,对象的。
2024-02-25 21:40:17
599
原创 STL迭代器引发的崩溃问题
1、写符合C++规范的代码,通过基类指针析构子对象,没有虚析构函数是不符合规范的代码,不符合规范就容易坑你。2、STL的调试版迭代器还是很强大,这种防御性编程,能够帮你快速的定位到程序潜在的问题,否则无端的崩溃会让你怀疑人生。
2024-02-23 21:25:34
1317
原创 C++ std::vector和移动优化
移动语义下,vector扩容时就有了优化的空间,毕竟原来对象的资源是可以重复使用的,vector也确实使用移动构造来代替拷贝构造,但是这种优化是有限制的,即vector中存储对象必须有移动构造函数,而且需要是noexcept的。因为移动构造会损坏源对象,如果对象移动的过程中发生了异常,那么原来的vector的数据就处于损坏的状态,而且不可恢复,为了保证异常安全,因而才有noexception的限制。对于左值,直接用拷贝构造函数构造在容器,对于右值,直接用移动构造构造在容器,只需要调用一次构造函数。
2024-02-21 08:00:51
1527
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人