Advanced Math Library 🧮 C语言数学计算库
一个完整的C语言数学计算库,提供代数、线性代数、几何、微积分、统计学和数值方法等模块,适用于科学计算、工程仿真和教育应用。
📖 概述
Advanced Math Library 是一个用C11编写的轻量级数学库,提供丰富的数学函数和数据结构。核心模块包括:
🧮 代数运算
二次方程求解、多项式运算、高斯消元法、矩阵求逆。
📐 线性代数
向量/矩阵运算、LU分解、幂法求特征值、QR分解框架。
📏 几何计算
2D/3D点线距离、面积/体积、圆/球/三角形/矩形运算。
📈 微积分
数值微分(中心差分)、积分(辛普森/Romberg)、常微分方程求解(欧拉/RK4)。
📉 统计学
描述性统计、概率分布、随机数生成、线性回归、t检验。
🔢 数值方法
二分法/牛顿法求根、黄金分割优化、拉格朗日插值、ODE系统求解。
✨ 核心特性
- 纯C实现 — 无外部依赖,易于嵌入和移植
- 模块化设计 — 各模块独立,可按需编译
- 数值稳定性 — 使用霍纳法则、中心差分、龙贝格积分等数值优化技术
- 完整的线性代数支持 — 矩阵运算、LU分解、特征值幂法
- 丰富的统计功能 — 描述统计、概率分布、假设检验、线性回归
- 数值积分与微分 — 辛普森法则、龙贝格积分、中心差分
- 常微分方程求解 — 欧拉法、经典四阶Runge-Kutta法
- CMake构建系统 — 支持静态/动态库、单元测试、Doxygen文档生成
⚡ 快速开始
最简单的使用示例:
#include <stdio.h>
#include "algebra.h"
#include "statistics.h"
int main() {
// 二次方程求解
QuadraticSolution sol = solve_quadratic(1, -3, 2);
printf("x² - 3x + 2 = 0 的解: %.2f, %.2f\n",
sol.root1.real, sol.root2.real);
// 统计分析
double data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printf("均值: %.2f, 标准差: %.2f\n",
statistics_mean(data, 10),
statistics_std_dev(data, 10));
return 0;
}
-lmath_static 或 -ladv_math。📦 编译与依赖
Ubuntu/Debian 依赖安装
sudo apt update
sudo apt install build-essential cmake
CMake 构建
git clone https://github.com/example/AdvancedMathLibrary.git
cd AdvancedMathLibrary
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
# 运行演示程序
./math_demo
构建选项
| 选项 | 说明 | 默认值 |
|---|---|---|
BUILD_TESTING | 构建单元测试 | OFF |
BUILD_EXAMPLES | 构建示例程序 | OFF |
BUILD_DOCS | 生成Doxygen文档 | OFF |
🏗️ 架构设计
库采用模块化分层架构,各模块职责清晰:
🛠️ 基础工具 (math_utils)
提供基础数学函数、复杂数和内存管理。
主要函数
math_deg_to_rad()/math_rad_to_deg()— 角度弧度转换math_clamp()— 数值限幅math_approximately_equal()— 浮点数近似比较Complex结构及运算:complex_create(),complex_add(),complex_multiply(),complex_magnitude()math_vector_create()/math_matrix_create()— 动态内存分配
📊 代数运算 (algebra)
二次方程求解
返回 QuadraticSolution 结构,包含根和实根个数。
多项式运算
polynomial_create()/polynomial_free()— 创建/销毁多项式polynomial_evaluate()— 霍纳法则求值polynomial_add()/polynomial_multiply()— 多项式加法和乘法polynomial_root_newton()— 牛顿法求根
线性方程组求解
使用高斯消元法求解 Ax = b,返回解向量。
矩阵运算
matrix_determinant()— 递归计算行列式matrix_inverse()— 伴随矩阵法求逆
📐 线性代数 (linear_algebra)
向量操作
vector_dot_product()— 点积vector_norm()— 欧几里得范数vector_add()/vector_subtract()/vector_scale()— 基本运算vector_angle()— 向量夹角(弧度)
矩阵操作
matrix_add()/matrix_multiply()/matrix_transpose()matrix_identity()— 单位矩阵matrix_trace()— 迹matrix_lu_decomposition()— LU分解matrix_eigenvalues_power_method()— 幂法求最大特征值
double**,行优先,使用 math_matrix_create() 分配内存。📏 几何计算 (geometry)
2D几何类型
Point2D— 二维点Line2D— 线段Circle— 圆Triangle— 三角形Rectangle— 矩形
3D几何类型
Point3D— 三维点Sphere— 球体
主要函数
distance_2d()/distance_3d()— 距离计算triangle_area()/triangle_perimeter()— 三角形面积/周长circle_area()/circle_circumference()— 圆面积/周长rectangle_area()/rectangle_perimeter()— 矩形面积/周长sphere_surface_area()/sphere_volume()— 球表面积/体积point_in_triangle()— 点是否在三角形内rotate_point_2d()— 二维点旋转
📈 微积分 (calculus)
数值微分
中心差分公式,误差估计通过比较不同步长获得。
数值积分
integrate_simpson()— 辛普森法则(需要偶数个区间)integrate_romberg()— 龙贝格积分,自适应精度integrate_gauss_legendre()— 高斯-勒让德求积(框架)
常微分方程
solve_ode_euler()— 欧拉法(一阶精度)solve_ode_rk4()— 经典四阶Runge-Kutta法(高精度)solve_ode_system_rk4()— 一阶ODE系统求解
多变量微积分
partial_derivative()— 偏导数(中心差分)gradient_norm()— 梯度范数
📉 统计学 (statistics)
描述性统计
statistics_mean()— 均值statistics_median()— 中位数(快速排序)statistics_variance()— 样本方差statistics_std_dev()— 标准差statistics_skewness()— 偏度statistics_kurtosis()— 峰度
概率分布
pdf_normal()/cdf_normal()— 正态分布PDF/CDF(误差函数近似)pdf_uniform()/cdf_uniform()— 均匀分布pdf_exponential()/cdf_exponential()— 指数分布
随机数生成
random_uniform()— 均匀分布随机数(线性同余)random_normal()— 正态分布随机数(Box-Muller变换)random_sample_normal()— 生成正态分布样本
回归与检验
correlation_pearson()— 皮尔逊相关系数linear_regression()— 最小二乘线性回归t_test_one_sample()— 单样本t检验
🔢 数值方法 (numerical_methods)
方程求根
solve_bisection()— 二分法,要求区间端点函数值异号solve_newton()— 牛顿-拉夫森法,需要导数函数solve_secant()— 割线法,不需要导数
优化方法
optimize_golden_section()— 黄金分割搜索,求单峰函数极小值
插值
interpolate_lagrange()— 拉格朗日插值多项式interpolate_newton()— 牛顿插值(框架)
💡 示例程序
库提供了多个示例程序展示核心功能:
| 示例文件 | 描述 |
|---|---|
math_demo.c | 主演示程序,展示代数、几何、微积分、统计、线性代数 |
example_algebra.c | 二次方程求解和线性方程组演示 |
test_algebra.c | 代数模块单元测试 |
test_geometry.c | 几何模块单元测试 |
编译并运行示例
cd build
make math_demo
./math_demo
📚 API 参考摘要
错误处理
所有函数使用 MathError 枚举返回状态:MATH_SUCCESS, MATH_ERROR_DIVISION_BY_ZERO, MATH_ERROR_SINGULAR_MATRIX, MATH_ERROR_NO_CONVERGENCE 等。
内存管理
动态分配的函数如 polynomial_create()、matrix_inverse() 返回需要释放的内存,使用对应的 _free 函数或 math_vector_free() / math_matrix_free()。
⚖️ 许可证
MIT License
Copyright (c) 2025 AdvancedMathLibrary Contributors
本软件按“原样”提供,不提供任何明示或暗示的保证。允许自由使用、修改、分发,需保留版权声明。
📐 Advanced Math Library · C语言数学计算库 · 文档生成于 2026-03-21