关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言
Apache Commons Math3
是一个开源的Java数学库,提供了丰富的数学和统计功能,广泛应用于科学计算、工程分析和数据处理领域。自己看了一下方法,才发现那些数学公式早已忘记。
本文将介绍Commons Math3
的核心功能和使用方法。我们一起回忆回忆!
02 添加依赖
在项目中添加Commons Math3依赖。对于Maven项目,在pom.xml中添加:
xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>${latest.version}</version>
</dependency>
03 基本数学运算
Commons Math3提供了许多基础数学工具类:
java
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提供了强大的统计分析能力:
java
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提供了完整的线性代数支持:
java
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提供了多种数值积分方法:
java
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包含多种最优化算法:
java
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提供了丰富的随机数生成器和概率分布:
java
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支持多种插值方法:
java
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数学库,提供了从基础数学运算到高级统计分析、线性代数、优化算法等广泛功能。甚至有些公式都没有听说过!