avatar
文章
130
标签
58
分类
37

Home
Tags
Categories
Music
港乐Live Show
Eden Mo Blog
搜索
Home
Tags
Categories
Music
港乐Live Show

Eden Mo Blog

数值分析:三次样条插值算法(Cubic Spline Interpolation)
发表于2025-08-02|CPP数值分析方法|数值分析方法•插值算法
龙格现象(Runge Phenomenon) 在对数据进行估计时往往有拟合和插值两种方法,拟合只会尽量估计数据集的整体分布趋势,不会确保经过所有的样本点,而插值会经过所有的样本点,但一般而言线性插值产生折线效果,其一阶导数不连续,往往使用高阶插值,但高阶插值可能产生龙格现象,龙格现象指的是均匀分布的插值点函数阶数升高,在多项式端点处可能造成振荡,产生严重误差,龙格现象的原因剖析详见龙格现象,解决这种现象可以通过引入高斯或切比雪夫插值点,或者使用分段的插值进行解决。 三次样条插值(Cubic Spline Interpolation) 样条插值源自工程制图,其通过固定的钉子,将柔软的木条固定: 引入数学,木条的函数可以由分段的端点函数进行表示,保证了整体函数的光滑性,三次样条插值在数学上是一个三次分段函数: 可见其有4n个方程参数,但只能建立4n-2个方程. 具体而言,根据函数连续性,n+1个端点,可建立2n个方程(两侧端点只能各建立一个方程): 因为函数光滑,其除两侧外的端点满足二阶导数连续、一阶导数连续,分别建立n-1个方程: 剩下两个条件根据边界 ...
(Private)基于C++ boost与ZeroMQ远程发布订阅远程调用网络设计
发表于2025-07-22|Private Content
103c704d716c2a6b4b59a60c7b698e01e267a92d601a60f130246c8b57cc624a9933f09653cb8ae792d31f011500a065940fb391eecc0e17d2bd57d1fab6c0d1144c1f5c92ed1ba36ff05a279c108cdb29a273c67cdf35956c598ad27624052eaaac6b2338574150321a002a8a0878375ebbe3d163ea7a99f3ce3203c1def7dfa2563feff714e05bb34da4b7a72c21f3aea0edcf962574c062693b88246c17ee094d52dd6b8f042a7fad72d03347641eaa692961827d585413604ae6c348bbee1099a3511768b4c8b51f427356888e316b44a1837d02a04138141fcd6020745f3b738390a3ac6b71866ac3eb080b9aff41640e08c908d7c01 ...
boost库开发笔记(五):boost库杂记
发表于2025-07-19|CPPC++ boost库开发|C++高阶•boost库笔记
记录了boost库一些特别的设计。 boost::program_options 命令行解析:基本类型支持 boost::program_options可以用于解析命令行参数,常常被用于解析项目运行命令、配置文件、环境变量等到boost::program_options::variables_map,这个map是一个string-boost::program_options::variable_value的键值对集合,variable_value.as<T>()方法能够将其转换到基本数据类型,以及std::vector<T>以及自定义结构体等,见下文。 一个简单实例如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <iostream>#include <boost/program_options.hpp>using namespace std;namespace program_op ...
boost库开发笔记(四):boost::property_tree的json与ini封装与解析
发表于2025-07-16|CPPC++ boost库开发|C++高阶•json序列化•boost库笔记
boost::property_tree::ptree boost::property_tree::ptree是一种树结构,其本质相当于(注意这不是定义式): 1234struct basic_ptree{ string data; basic_ptree* next;}; 可见其结构上就是一种树/链表,适合用于解析嵌套的键值对文件,如json、ini等。 json json方法基本没有可参考性,看不看都行,真是脑子被踢了才会学。 json解析 json解析首选仍然是boost::json库,因为其支持类型检查、序列化等,ptree基本只能解析结构相对简单、且知道值类型的(或者类型比较统一的)json结构,了解基本接口即可: 其中get_child表示获取子节点,得到的是一个新的ptree对象,对于一般数据类型,遍历ptree,迭代器是一个pair对象:std::pair<string, property_tree::ptree>,若second为空,意味着无子节点(注意ptree.second.empty成立,指的是ptre ...
boost库开发笔记(三):boost::beast websocket异步网络编程
发表于2025-07-14|CPPC++ boost库开发|C++高阶•网络编程•C++ WebSocket•boost库笔记•ASIO异步编程•Beast库
boost::beast boost::beast是一个基于boost::asio封装的一个网络编程库,与asio注重网络底层不同,beast专注于搭建Http和WebSocket服务器框架,其完全由C++实现,支持零拷贝、异步、多线程、协程等,性能极高,支持ssl/tls加密等,但它的缺点也来自C++,例如开箱即用的轮子少、编译时间较长、更注重底层使得应用层兼容性一般、较繁杂的错误处理机制。 示例来自官方示例。 同步服务器-客户端 服务器端:比asio中的示例多了几步,首先是使用socket初始化一个websocket的流对象,设置其http响应头:websocket的连接建立是通过http握手开始的: websocket的http握手 客户端发送消息: 1234GET /index.html HTTP/1.1 #起始行Host: www.example.com #HTTP 头(Header)User-Agent: Mozilla/5.0Accept: text/html 服务器响应: 123HTTP/1.1 200 OK #起始行Content-Type: text/ ...
网络编程库:C++ ZeroMQ学习笔记
发表于2025-07-07|CPP|C++高阶•网络编程•ZeroMQ
ZeroMQ是一个高性能、跨语言的网络编程框架,许多人称其命名为MQ并不准确,因为ZeroMQ已经超越消息队列范畴,完全是一种高抽象的Socket,原生使用C语言进行撰写,随即涵盖到基本几十种的开发语言中,当然包括C++/Java/Go/Python/Rust等。 ZeroMQ在2007年由比利时软件设计师皮特·亨特金斯(Pieter Hintjens)及其公司团队开发,旨在提高消息中间件的易用性和性能,也由于此ZeroMQ推出几年间逐渐受到社区关注,在许多大型交易系统得到应用。2016年,身患癌症的亨特金斯在比利时接受安乐死,但他的作品仍然活跃以及被持续维护在十年后的今天,致敬。 ZeroMQ的设计思想十分精巧,虽然从今天视角来看许多艺术已经是非常惯用的设计,这些在英文文档Zguide中展示得详尽且淋漓尽致,详见:https://zguide.zeromq.org,暂未找到近年的中文翻译版本。 本文以Zguide示例为蓝本,完成了C++基本示例的阐述,仅集中于前五章基本设计,更多架构设计哲学参考原文,原文示例仓库来自:https://github.com/imatix/zgu ...
C++ 11 新特性总结(五):tuple元组类型
发表于2025-07-02|CPP|C++高阶•C++11 新特性
元组类型 C++越来越往Python方向靠近,以致习惯上回到纯C的时代开始使人无比痛苦。 是的,C++ 11引入了元组支持,支持将任意数量的类型封装成单一对象,且在C++ 17引入了auto[x,y,z] = t简单的解包方法;tuple没有size和type成员,需要std::tuple_size和std::tuple_element结合类型推导或萃取来获取大小和类型,以下: 1234567891011121314151617181920212223242526#include <iostream>#include <tuple>#include <type_traits>using namespace std;int main(){ //构造方式一: std::tuple<int, std::string, double> mytuple(0, "Eden", 1.2); //解包: cout << std::get<0>(mytuple) < ...
【sem_timedwait问题解决】系统时间向前跳变导致sem_timedwait长久阻塞
发表于2025-06-30|Linux|进程与线程•Linux
问题概述 系统时间跳变会导致一些系统时间依赖函数的异常工作,一个例子是sem_timedwait。当处于sem_timedwait阻塞等待时,如果此时系统时间跳变到起始时间之前: 1sudo date -s "2025-06-30 9:40:00" //修改系统时间 那么sem_timedwait会处于持续的阻塞状态,sem_timedwait不会返回,也不会产生任何打印效果,如下代码: 1234567891011121314151617181920212223242526272829#include <iostream>#include <time.h>#include <semaphore.h>#include <thread>using namespace std;struct timespec ts{};int main(){ sem_t sem_; sem_init(&sem_,0,0); while(true){ clo ...
boost库开发笔记(二):boost::asio异步网络编程
发表于2025-06-15|CPPC++ boost库开发|C++高阶•网络编程•boost库笔记•ASIO异步编程
boost::asio boost::asio是C++高级异步网络编程库,主要用于异步编程、调度和通讯,包括定时器、信号处理、异步执行、socket等基本功能。 本文围绕了asio入门的基础、常用接口部件等进行讨论,从简单的asio对象开始,分成异步编程和网络编程两大板块,并且相应地结合源码进行记录。本文会随着项目进展更新,相信会成为比较完备的ASIO入门体系。 boost::asio异步编程 asio::io_context 每个asio程序至少存在一个io_context对象(boost 1.66前称io_service),io_context是asio工作的核心,其提供了一个事件循环队列机制(类似Qt),作为调度器完成事件调度;io_context本身不直接与通信对象通信,而是管理一系列IO资源如定时器、socket等。 asio定时器 asio支持三种定时器,为asio::system_timer、asio::steady_timer和asio::high_resolution_timer,另一种旧版本的deadline_timer已经被弃用;其中: as ...
C++ 11 新特性总结(四):enable_from_this/shared_from_this
发表于2025-06-12|CPP|C++高阶•C++11 新特性
问题起源 问题来自std::shared_ptr,为了保证shared_ptr的计数正确,只允许使用一个智能指针对象去使用裸指针构造,因此这样的代码是错误的: 123Person* p = new Person();std::shared_ptr<Person> p1(p);std::shared_ptr<Person> p2(p); 其后果是p在new时候执行了一次构造,p1和p2都认为自己管理了p,因此两个共享指针独立的控制块都显示引用数为1,所以析构时各自执行一次,导致双重删除: 123Person constructor called!Person destructor called!Person destructor called! 显式上我们不会这么干,但是有一些隐晦的写法还是触碰到这条红线,例如: 123456789101112131415161718192021222324#include <iostream>#include <memory>using namespace std;class Person&# ...
123…13
avatar
Eden
不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫
文章
130
标签
58
分类
37
Follow Me
公告
文章任何错误、疏漏、建议麻烦请联系博主qq邮箱2436444815@qq.com
最新文章
深入理解计算机系统CMU-15213 CSAPP(二):DataLab2025-10-08
OpenGL C++记录(二):基本渲染与着色器2025-09-30
OpenGL C++记录(一):基于MinGw的环境搭建2025-09-29
设计模式(四):组合模式、责任链模式、策略模式2025-09-23
矩阵求导2025-09-14
分类
  • C21
  • C++ Qt开发7
  • C/C++14
  • CPP24
    • C++ Generic Programming3
    • C++ boost库开发5
  • FPGA2
    • verilog2
标签
boost库笔记 Git基本使用 Vivado IP核 MIT 18.06 Givens变换 Linux扩容 信号与系统 进程与线程 数据结构与算法 OpenGL SVD分解 格式化输出 OpenCV ASIO异步编程 最小二乘法 Stanford CS144 引导程序 MathType快捷键 C++基础 Modern C++ Design 奇奇怪怪的实现 插值算法 拟合算法 网络编程 C++ Qt ZeroMQ 计算机图形学 Private Content Protobuf Linux QR分解 C++ SFINAF and Type Traits C++ WebSocket Beast库 C++11 新特性 CMake 设计模式 Effective C++ C++高阶 3D目标检测
归档
  • 十月 20251
  • 九月 20254
  • 八月 20256
  • 七月 20256
  • 六月 20256
  • 五月 20253
  • 四月 20254
  • 三月 20256
网站资讯
文章数目 :
130
本站总字数 :
566.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2023 - 2025 By Eden
框架 Nodejs|你忘掉理想 只能忙于生活吗
粤公网安备 44010602011738号|粤ICP备2023072610号
搜索
数据库加载中