commons-math3
推荐的jar包是commons-math3
- 看看它有什么上图:(来源于浏览器翻译)
目录
- 我们先看看它都有些什么功能,我将官网目录翻译为中文复制了过来
- 以下来源于浏览器翻译,可能有误差!
- 概述
0.1 关于用户指南
0.2 公地数学中有什么
0.3 公地数学是如何组织的
0.4 如何在 commons-math javadoc 中指定接口合约
0.5 依赖关系 - 统计
1.1 概述
1.2 描述性统计量
1.3 频率分布
1.4 简单回归
1.5 多元回归
1.6 排名转换
1.7 协方差和相关性
1.8 统计检验 - 数据生成
2.1 概述
2.2 随机数
2.3 随机向量
2.4 随机字符串
2.5 随机排列、组合、抽样
2.6 生成"类似"输入文件的数据
2.7 PRNG可插拔性 - 线性代数
3.1 概述
3.2 实矩阵
3.3 实向量
3.4 求解线性系统
3.5 特征值/特征向量和奇异值/奇异向量
3.6 非实数场(复数、分数等) - 数值分析
4.1 概述
4.2 错误处理
4.3 寻根
4.4 插值
4.5 集成
4.6 多项式
4.7 差异化 - 特殊功能
5.1 概述
5.2 Erf 函数
5.3 伽玛函数
5.4 测试版功能 - 公用事业
6.1 概述
6.2 双阵列实用程序
6.3 整数/双哈希映射
6.4 连续分数
6.5 二项式系数、阶乘、斯特林数和其他常用数学函数
6.6 快速数学函数
6.7 杂项 - 复数
7.1 概述
7.2 复数
7.3 复杂的超越函数
7.4 复杂格式和解析 - 概率分布
8.1 概述
8.2 分发框架
8.3 用户定义的分布 - 分数
9.1 概述
9.2 分数数
9.3 分数格式和解析 - 转换方法
- 几何形状
11.1 概述
11.2 欧几里得空间
11.3 n球
11.4 二进制空间分区
11.5 地区 - 优化
12.1 概述
12.2 单变量函数
12.3 线性规划
12.4 直接方法
12.5 一般情况 - 曲线拟合
13.1 概述
13.2 实现的功能
13.3 一般情况 - 最小二乘法
14.1 概述
14.2 最小平方生成器和最小方块工厂
14.3 模型函数
14.4 参数验证
14.5 调谐
14.6 优化引擎
14.7 求解
14.8 示例 - 常微分方程积分
15.1 概述
15.2 连续输出
15.3 离散事件处理
15.4 可用的集成商
15.5 衍生品 - 遗传算法
16.1 概述
16.2 GA 框架
16.3 实现和示例 - 过滤器
17.1 概述
17.2 卡尔曼滤波器 - 机器学习
18.1 概述
18.2 聚类算法和距离测量
18.3 实现 - 例外情况
19.1 概述
19.2 未选中的异常
19.3 层次结构
19.4 功能
pom
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
使用
线性代数
矩阵相关
先写一个用于输出二维数组的方法:
void print(double[][] arr){
System.out.println(Arrays.deepToString(arr));
}
测试矩阵相乘、求逆等
@Test
public void testRealMatrix(){
// 创建2*3的矩阵
double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
// 3*2的矩阵
double[][] matrixData2 = { {1d,2d}, {2d,5d}, {1d, 7d}};
RealMatrix n = new Array2DRowRealMatrix(matrixData2);
//相乘
RealMatrix p = m.multiply(n);
System.out.println(p.getRowDimension()); // 2
System.out.println(p.getColumnDimension()); // 2
print(p.getData());
// 求逆
RealMatrix pInverse = new LUDecomposition(p).getSolver().getInverse();
// 检验相乘是否为1
System.out.println(p.multiply(pInverse)); //1
print(pInverse.getData());
}
线性方程组
@Test
public void t1(){
/*
求解线性系统
2x + 3y - 2z = 1
-x + 7y + 6x = -2
4x - 3y - 5z = 1
*/
//首先分解系数矩阵 A(在本例中使用 LU 分解)并构建求解器
RealMatrix coefficients =
new Array2DRowRealMatrix(new double[][] { { 2, 3, -2 }, { -1, 7, 6 }, { 4, -3, -5 } },
false);
DecompositionSolver solver = new LUDecomposition(coefficients).getSolver();
//接下来创建一个数组来表示常量向量 B 并用于求解系统RealVector.solve(RealVector)
RealVector constants = new ArrayRealVector(new double[] { 1, -2, 1 }, false);
RealVector solution = solver.solve(constants);
// 获取结果
for (int i = 0; i < 3; i++) {
System.out.println(solution.getEntry(i));
}
}