当前位置: 首页 > news >正文

Apache Commons Math3 使用指南:强大的Java数学库 - 教程

01 引言

Apache Commons Math3是一个开源的Java数学库,提供了丰富的数学和统计功能,广泛应用于科学计算、工程分析和数据处理领域。自己看了一下方法,才发现那些数学公式早已忘记。

本文将介绍Commons Math3的核心功能和使用方法。我们一起回忆回忆!

02 添加依赖

在项目中添加Commons Math3依赖。对于Maven项目,在pom.xml中添加:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>${latest.version}</version>
</dependency>

03 基本数学运算

Commons Math3提供了许多基础数学工具类:

import org.apache.commons.math3.util.ArithmeticUtils;
import org.apache.commons.math3.util.FastMath;
// 快速数学运算
double result = FastMath.sin(FastMath.PI / 2);
// 数论函数
long gcd = ArithmeticUtils.gcd(12, 18);
// 最大公约数
long factorial = ArithmeticUtils.factorial(5);
// 阶乘

04 统计功能

Commons Math3提供了强大的统计分析能力:

import org.apache.commons.math3.stat.StatUtils;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
// 使用StatUtils进行简单统计
double[] values = {
1.2, 2.3, 3.4, 4.5, 5.6
};
double mean = StatUtils.mean(values);
// 平均值
double variance = StatUtils.variance(values);
// 方差
// 使用DescriptiveStatistics进行详细分析
DescriptiveStatistics stats = new DescriptiveStatistics();
stats.addValue(1.2);
stats.addValue(2.3);
// 添加更多值...
double median = stats.getPercentile(50);
// 中位数
double stdDev = stats.getStandardDeviation();
// 标准差

05 线性代数

Commons Math3提供了完整的线性代数支持:

import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.LUDecomposition;
// 创建矩阵
double[][] matrixData = {
{
1, 2
}, {
3, 4
}
};
RealMatrix matrix = new Array2DRowRealMatrix(matrixData);
// 矩阵运算
RealMatrix inverse = new LUDecomposition(matrix).getSolver().getInverse();
RealMatrix product = matrix.multiply(inverse);
// 应该得到单位矩阵

矩阵运算也应用到AI领域。

06 数值积分

Commons Math3提供了多种数值积分方法:

import org.apache.commons.math3.analysis.UnivariateFunction;
import org.apache.commons.math3.analysis.integration.SimpsonIntegrator;
// 定义函数
UnivariateFunction function = x ->
Math.sin(x) * Math.cos(x);
// 数值积分
SimpsonIntegrator integrator = new SimpsonIntegrator();
double integral = integrator.integrate(1000, function, 0, Math.PI);

07 最优化

Commons Math3包含多种最优化算法:

import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction;
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer;
import org.apache.commons.math3.optim.PointValuePair;
import org.apache.commons.math3.optim.InitialGuess;
import org.apache.commons.math3.optim.MaxEval;
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
// 定义目标函数
ObjectiveFunction function = new ObjectiveFunction(x ->
-((x[0] - 3) * (x[0] - 3) + (x[1] - 4) * (x[1] - 4)) // 最大化负的平方和
);
// 使用Nelder-Mead算法进行优化
SimplexOptimizer optimizer = new SimplexOptimizer(1e-10, 1e-30);
PointValuePair solution = optimizer.optimize(
new MaxEval(1000),
function,
GoalType.MAXIMIZE,
new InitialGuess(new double[]{
0, 0
})
);
double[] point = solution.getPoint();
// 应该接近[3, 4]

08 随机数和概率分布

Commons Math3提供了丰富的随机数生成器和概率分布:

import org.apache.commons.math3.random.RandomDataGenerator;
import org.apache.commons.math3.distribution.NormalDistribution;
// 随机数生成
RandomDataGenerator randomData = new RandomDataGenerator();
int randomInt = randomData.nextInt(1, 100);
double randomNormal = randomData.nextGaussian(0, 1);
// 均值为0,标准差为1的正态分布
// 概率分布
NormalDistribution normal = new NormalDistribution(0, 1);
double probability = normal.cumulativeProbability(1.96);
// P(X ≤ 1.96)

09 插值

Commons Math3支持多种插值方法:

import org.apache.commons.math3.analysis.interpolation.LinearInterpolator;
import org.apache.commons.math3.analysis.polynomials.PolynomialSplineFunction;
// 创建插值数据
double[] x = {
0, 1, 2, 3, 4
};
double[] y = {
0, 1, 4, 9, 16
};
// 线性插值
LinearInterpolator interpolator = new LinearInterpolator();
PolynomialSplineFunction function = interpolator.interpolate(x, y);
// 计算插值点
double interpolatedValue = function.value(2.5);
// 在x=2.5处的值

10 小结

Apache Commons Math3是一个功能强大的Java数学库,提供了从基础数学运算到高级统计分析、线性代数、优化算法等广泛功能。甚至有些公式都没有听说过!

http://www.wxhsa.cn/company.asp?id=3747

相关文章:

  • HarmonyOS图形处理:Canvas绘制与动画开发实战
  • script setup 在 Vue 3 中的核心作用及具体实现方式
  • 0voice-1.4.1-cmake
  • test test test
  • 容器化改造基本原理
  • Blogroll 友链
  • Java 字节码与 ASM 框架实战解析
  • 计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解
  • Dos的常用命令
  • 持续集成自动化CI/CD
  • Lightroom Classic 2025(LRC 2025)安装教程(附直接安装包下载)+入门操作指南
  • 2025/09/14 【二叉树11】完全二叉树的节点个数
  • 8888
  • 接口限流代码 - 实践
  • OutGuess 安装与问题排查指南(Kali Linux 环境)
  • 拓展操作码举例
  • TryHackMe | Cicada-3301 Vol:1
  • 完整教程:Word添加图/表题注
  • [MCP][01]简介与概念
  • CF819B Mister B and PR Shifts
  • 第一次自我介绍
  • 在Linux环境部署Flask应用并启用SSL/TLS安全协议
  • 0127_责任链模式(Chain of Responsibility)
  • 洛枫娜娜米讨厌数学……?
  • Spatial 语言核心概念简介
  • Redis数据库的五类核心数据结构
  • RAG 个人知识库 向量查找原理
  • css-1
  • Java-JDK8新特性
  • 解决MySQL ONLY_FULL_GROUP_BY 错误的方案