原文链接:JAMA:Java矩阵包

API文档链接:线性代数Java包 JAMA

jama是一个非常好用的java的线性代数软件包。适用于日常编程可能碰到的各种矩阵运算问题,提供了一个优雅的简便的解决方案。

jama:java 矩阵包

背景

jama是一个基本的线性代数java包,它提供了实数非稀疏矩阵类,程序员可构造操控这些类。对于经常使用到矩阵运算的码农来说,即使不精通线性代数也没有关系,因为jama包提供的功能已经够用,调用方便,使用自然,而且易于理解。Jama包意欲称为java的标准矩阵包,这一标准计划将提交给Java Grande论坛,转而交给sun公司。java矩阵类的潜在竞争对手包括Mathworks公司和国家标准化管理委员会(NIST)实现的矩阵类,我们发布这一版本,以广收评议。将来jama的新版本不一定和现在的版本兼容。

NIST和马里兰大学曾开发过一个类似的矩阵包:Jampack,这两个包的出现,出于用户对矩阵的不同实现需求。Jama基于单个矩阵类,是一个严格的面向对象的框架,而Jampack的方案更为开放,便于用户的扩展。对一般用户而言,这两个包只是在矩阵操作的语法层面上有所差别。我们希望你有时间同时了解一下这两个矩阵包,一定会受益匪浅。

功能:

jama由如下6个类组成: Matrix,CholeskyDecomposition, LUDecomposition, QRDecomposition, SingularValueDecomposition and EigenvalueDecomposition

Matrix类提供了基本的线性代数数值运算的功能,不同的构造函数可以构造双精度和浮点精度的二维数组,而不同的gets和
sets方法可以返回子矩阵和矩阵元素。基本的算术运算包括矩阵相加,矩阵相乘,矩阵范式以及基于矩阵元素的算术运算。打印矩阵的函数也包括在内。

矩阵的五大分解,涉及一对或三元组,排列向量矩阵等,对应于jama的5个矩阵分解类。这些分解类可由Matrix类访问,可以求解线性方程组,求解方阵行列式,求逆和其他矩阵运算。这些分解类如下:

  • 对称正定矩阵的Cholesky分解
  • 矩阵的LU分解(高斯消元)
  • 矩阵的QR分解
  • 对称和非对称方阵的特征向量值分解
  • 矩阵的奇异值分解

目前jama只支持实数矩阵。将来可能会加入复数矩阵的支持。现在暂不实现复数矩阵,主要是由于现在还没有太多这方面的需求,故先不冒重新设计而带来的复杂风险。

Jama的设计其实是一种纯面向对象的易用性和高性能计算需求之间的折中。

JAMA功能汇总

对象操作
构造函数  
set 方法  
get 方法 
拷贝方法
克隆方法
矩阵元素级别的操作 矩阵加法
矩阵减法
矩阵乘法
放大缩小
元素乘法  
元素除法
求反
倒置  
范式
矩阵分解

Cholesky  
LU  
QR  
SVD  
对称矩阵的特征值
非对称矩阵的特征值

线性方程求解

非奇异系统
最小二乘

矩阵相关的数学量

条件数  
行列式
矩阵秩  
求逆
伪逆

使用范例 下面的例子求解了一个线性方程Ax = b,矩阵规模为 3 * 3,最后算出了残差的范式。

double[][] array = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}}; 
      Matrix A = new Matrix(array); 
      Matrix b = Matrix.random(3,1); 
      Matrix x = A.solve(b); 
      Matrix Residual = A.times(x).minus(b); 
      double rnorm = Residual.normInf();

参考实现. 

本网站下载的jama实现只能作为参考实现。它本质上还是一个教学性质的软件包。其中的算法类于于Wilkinson和Reinsch的手册中的内容,比如在EISPACK,LINPACK和MATLAB中使用的算法。Matrices类的内部数据存储为java的基本数组类型(比如,double[][]),代码可读性强,易于理解。虽然对于中小型的数据规模,我们的程序足够快速,但我们还是非常希望软件商和java虚拟机能够针对特征环境做一些优化。

未涵盖的内容

jama不是一个完整的线性代数运算库,比如我们就没有提供特征结构的矩阵类(比如带状矩阵,稀疏矩阵等),也没有实现更多的特定矩阵分解类(比如Shur,泛特征值分解等)。复数矩阵也不在其内。忽略这些实现并不是我们的本意。我们希望未来的本版中可以提供其中的一些功能(比如复数矩阵)。我们设计的宗旨是,不封死将来针对其他扩展功能的路。

最后,jama也不是一个通用的数组类,相反,它主要关注于与矩阵数值计算相关的数学运算。所以其中并没有任何关于数组的操作,比如对矩阵各个元素求sine,exp,log,或者变形矩阵之类的操作。这些操作在很多应用中很有用,在一个单独的array类中提供显然最好。

矩阵包1.0.2版

早期保本


我们计划把jama做成java的标准库,这一标准化将给java增加数值计算模块,带来更好的可移植性和性能,我们乐意听到大家的任何反馈。 当然我们也自知jama并不适用于所有用户,但对于日常的矩阵计算,我们相信还是会迎合大部分程序员的需求。

讨论组. 用户可在已经建立的讨论组中评论.评论和建议可以发送至jama@nist.gov,它们将自动转发给jama的作者们,以及其他邮件订阅者。 如果你想订阅邮件,请发邮件到listproc@nist.gov ,包含文本为 subscribe jama your-name .订阅邮件列表可在此阅览:archive of the discussion.

JAMA:Java矩阵包的更多相关文章

  1. java矩阵包jama的简单操作

    本文转自http://www.cnblogs.com/zangbo/p/5622351.html 一.jama简介 Jama是一个基本的线性代数java包.包括一个基本的Matrix类和5个矩阵分解类 ...

  2. java jar包收集

    activation~与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到lib中去,具体负责mail的数据源和类 ...

  3. java基础-包

    浏览以下内容前,请点击并阅读 声明 为了使类型更容易查找和使用,避免命名冲突,以及可视范围的控制,程序员一般将相关的一些类型组合到一个包中.组合的类型包括类,接口,枚举和注释,枚举是一种特殊的类,而注 ...

  4. java中包命名常见规则

    做java的都知道java的包.类.接口.枚举.方法.常量.变量等等模型都有一套约定的命名规则! 学习每一种语言都应该学习对应语法和命名规则,以保持一个良好的编码风格.一来显示自己的专业.二来方便阅读 ...

  5. java util包概述

    util是utiliy的缩写,意为多用途的,工具性质的包这个包中主要存放了:集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类.这些类极大方便了Java编程, ...

  6. java.io包详细解说

    转自:http://hzxdark.iteye.com/blog/40133 hzxdark的博客 我不知道各位是师弟师妹们学java时是怎样的,就我的刚学java时的感觉,java.io包是最让我感 ...

  7. java.io包中的字节流—— FilterInputStream和FilterOutputStream

    接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...

  8. java jar包解析:打包文件,引入文件

    java jar包解析:打包文件,引入文件 cmd下: jar命令:package包打包 javac命令:普通类文件打包 Hello.java: package org.lxh.demo; publi ...

  9. 如何理解和使用Java package包

    Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起.这个名称空间就是包名.可以使用import关键字来导入一个包.例如使用import java.util.* ...

随机推荐

  1. 我喜欢的乐队-Euphoria

    来自日本的后摇乐团,001年冬天由森川裕之.佐藤昭太.木下阳辅三人于东京组建,2003年签约日本独立厂牌123Record,并发行首张EP细碟<Floral Dew>.包括EP.Singl ...

  2. JAVA与图形界面开发(Applet应用程序、AWT库、Swing)

    Applet 1)简单说,Applet就是嵌入到网页中的小程序,Java代码. 2)编写Applet程序,要继承JApplet类,并根据自己需要覆写相关方法(init.start.stop.destr ...

  3. HTML5每日一练之input新增加的URL类型与email类型应用

    1.URL类型: <form> <input name="urls" type="url" value="http://www.w3 ...

  4. 浏览器插件-ActiveX

    浏览器插件:B/S模式下通过在客户端浏览器安装插件调用外设或者处理特殊格式数据. 常用插件有身份证阅读器.sim卡阅读器.银行卡校验插件.手写板插件.小键盘插件: 处理表格数据的华表插件.图片合成插件 ...

  5. Spring Named Parameters examples in SimpleJdbcTemplate

    In JdbcTemplate, SQL parameters are represented by a special placeholder "?" symbol and bi ...

  6. Linux递归删除文件命令

    Linux递归删除文件命令 find . -name "*.log.*" -exec ls {} \; find . -name "*.log.*" -exec ...

  7. codeforces 630H (组合数学)

    H - Benches Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  8. Light oj 1197 - Help Hanzo (素数筛技巧)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 给你a和b求a到b之间的素数个数. 先在小区间素数筛,大区间就用类似素数筛的想法 ...

  9. System.getProperties()对应的key/value列表

    Key                     Meaning ——————-     —————————— "file.separator"        File separa ...

  10. UVa 10801 Lift Hopping / floyd

    乘电梯 求到目标层的最短时间 有n个电梯 换一个电梯乘需要额外60秒 所以建图时每个电梯自己能到的层数先把时间算好 这是不需要60秒的 然后做floyd时 如果松弛 肯定是要换电梯 所以要加60秒 # ...