C++学习笔记—Ceres库
1. 安装略 2. 问题定义以 $y = \exp \left( {a{x}^{2} + {bx} + c}\right)$ 为例 我们现在拥有一系列的观测值 x $x_1$ $x_2$ … $x_n$ y $y_1$ $y_2$ … $y_n$ 目标是用函数 $y = \exp(ax^2 + bx + c)$ 拟合这些数据点,确定参数 $a$、$b$ 和 $c$ 的最佳值 在迭代的某一步,假设我们有参数的当前估计值 $a_k$、$b_k$ 和 $c_k$。 对于每个数据点 $x_i$,我们可以计算模型预测值 :$\hat{y}_i$ $\hat{y}_i = \exp(a_k x_i^2 + b_k x_i + c_k)$ 那么残差就是实际观测值与预测值的差 $r_i = y_i - \hat{y}_i = y_i - \exp(a_k x_i^2 + b_k x_i + c_k)$ 我们不希望正负残差相互抵消,所以计算残差的平方,然后求和得到代价函数: $J(a, b, c) =...
C++学习笔记—cmake的新旧方法
CMake新旧方法对比详解一、include_directories() vs target_include_directories()这两者的核心区别在于作用域(Scope): 1. include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 …])作用域:目录级别 作用: 将指定的目录添加到当前CMakeLists.txt文件以及所有在它之后处理的子目录的头文件搜索路径中 影响: 在调用后定义的所有目标都会将这些目录添加到它们的include路径中 特点: 类似于”全局”设置(在当前目录及子目录范围内) 问题: 不够精确,可能导致目标获得不必要的包含路径 2. target_include_directories(<target> [SYSTEM] [AFTER|BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1…] [<INTERFACE|PUBLIC|PRIVATE> [items2…] …])作用域:目标级别 作用:...
C++学习笔记—find原理—以ceres为例子的实操
1. 更新 locate 数据库(必做!) 操作: 打开终端,运行 sudo updatedb 原因: 确保 locate 的数据库包含你刚刚安装的新库的文件信息,否则后续步骤可能找不到任何内容 2. 初步定位:查找核心配置文件 (Config.cmake) 操作: 运行以下命令 1locate -i 'config.cmake' | grep -i...
C++学习笔记—find原理—以opencv为例子的实操
更新 locate 数据库 (必做!) 操作: 打开终端,运行 sudo updatedb。 原因: 确保 locate 的数据库包含你刚刚安装的新库的文件信息。否则后续步骤可能什么也找不到。 初步定位:查找核心配置文件 (Config.cmake) 操作: 运行以下命令 123456789101112131415161718192021222324252627282930locate -i 'config.cmake' | grep -i 'opencv'# 结果为~ ❯ locate -i 'config.cmake' | grep -i...
C++学习笔记—find原理
如何在CMake中找到并链接新安装的库目标在安装新库后,找出在CMake中find_package所需的精确包名(包括大小写),并了解如何正确链接该库(优先使用现代CMake目标)。 操作步骤1. 更新locate数据库(必做!) 操作: 打开终端,运行sudo updatedb 原因: 确保locate的数据库包含你刚刚安装的新库的文件信息 注意: 如果跳过此步骤,后续步骤可能找不到任何结果 2. 初步定位:查找核心配置文件(Config.cmake) 操作: 运行以下命令(替换库名关键词):1locate -i 'config.cmake' | grep -i '库名关键词' 目的: 查找包含config.cmake(不区分大小写)且路径中包含指定库名关键词的文件 分析结果: 注意文件路径,例如: /usr/lib/x86_64-linux-gnu/cmake/SomeLib/SomeLibConfig.cmake /opt/my_libs/lib/cmake/somelib/somelib-config.cmake 3....
C++学习笔记—CMake
1. 最小可行的 CMakeLists.txt思考: 我需要告诉 CMake 什么? 它需要知道最低兼容的 CMake 版本是多少?(cmake_minimum_required) 我的项目叫什么名字?(project) 我想生成什么?(一个可执行文件?一个库?)(add_executable 或 add_library) 这个生成目标需要哪些源文件?(add_executable 或 add_library 的参数) 123456789101112131415# 1. 指定 CMake 最低版本要求# Ubuntu 22.04 自带的 CMake 版本通常较高 (如 3.22+),但设置一个稍低的版本(如 3.16)可以增加兼容性。# 这确保了我们使用的 CMake 命令和特性在该版本及以上可用。cmake_minimum_required(VERSION 3.16)# 2. 定义项目名称和语言# 项目名称会用在一些默认变量和 IDE 中。# 指定 CXX 表示这是一个 C++ 项目,CMake 会自动寻找并配置 C++...
C++学习笔记—基础篇
C++学习笔记—基础篇1. 安装最基础的编译环境1sudo apt install build-essential 验证有没有装好,输出版本信息即装好了 12g++ --versionmake --version 2. 第一个程序使用任意的编辑器编写一个hello.cpp然后编译 1g++ hello.cpp -o hello g++: 调用 GNU C++ 编译器。 hello.cpp: 你要编译的源文件。 o hello: 这个选项告诉编译器,将生成的可执行文件命名为 hello。如果没有 o 选项,默认会生成一个名为 a.out 的文件。 3. 使用 make 简化编译如果项目比较复杂的话,只通过命令编译就会很长 1g++ main.cpp math_utils.cpp -o my_calc -Wall -Wextra -std=c++11 make 通过 Makefile 文件来解决手动编译的许多问题 创建一个 Makefile 文件然后通过 make 命令就可以自动的编译(过程省略)但是 Makefile 文件不是很好写 4. 使用 CMakeCMake...
git学习记录
Git学习笔记 1. 安装在官方网站安装: https://git-scm.com/ 2. 初始化配置123456789101112# 配置全局用户名和邮箱git config --global user.name "name"git config --global user.email xxxx@gmail.com# 凭证存储# 第一次通过 HTTPS 方式 push 或 pull 时,Git 会要求输入用户名和密码# (或 Personal Access Token)。操作成功后,"store" 会把凭证以明文格式写入文件# 以后再访问同一个远程仓库时,Git 会自动读取凭证,不再重复询问git config --global credential.helper store# 配置默认分支,现在推荐使用maingit config --global init.defaultBranch main 3. 创建一个新仓库12345# 1. 初始化本地仓库git init# 2. 克隆远程仓库git clone...