【OpenHarmony】鸿蒙开发之jama

82 阅读6分钟

简介

在OpenHarmony上支持矩阵运算、矩阵分解、线性代数等功能。例如构造和操作真实密集矩阵、计算矩阵的行列式等线性代数功能,为开发者提供了丰富的数学运算。

下载安装

ohpm install @ohos/jama

使用说明

  1. 引入依赖
  import { Matrix } from '@ohos/jama'

2. 创建矩阵

   let array: number[][] = [[1., 2., 3], [4., 5., 6.], [7., 8., 10.]]
   let A: Matrix = new Matrix(array);
   let array2: number[][] = [[1,1,1],[1,1,1],[1,1,1]]
   let B: Matrix = new Matrix(array2);
   let x: Matrix = A.plus(B);
  1. 矩阵加法
  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let array2: number[][] = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
  let B: Matrix = new Matrix(array2);
  let C = A.plus(B)

2. 矩阵减法

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let array2: number[][] = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
  let B: Matrix = new Matrix(array2);
  let C = A.minus(B)

3. 矩阵乘法

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let array2: number[][] = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
  let B: Matrix = new Matrix(array2);
  let C = A.times(B)

4. 矩阵左除除法

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let array2: number[][] = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
  let B: Matrix = new Matrix(array2);
  let C = A.arrayLeftDivide(B)

5. 矩阵缩放

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let C = A.times(2) // 矩阵元素扩大2

6. 矩阵求逆

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let C = A.inverse() 

7. 矩阵转置

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let C = A.transpose() 

8. 矩阵范式

  let array: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  let A: Matrix = new Matrix(array);
  let C = A.cond() 

DD一下:欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。

`欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点学习。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

接口说明

类名方法名功能
CholeskyDecompositiongetL() : Matrix返回三角因子
CholeskyDecompositionisSPD() : boolean该矩阵是否对称且正定
CholeskyDecompositionsolve(B : Matrix) : Matrix求解 A*X = B
LUDecompositiondet() : number行列式
LUDecompositiongetDoublePivot() : number[]以一维双精度数组形式返回枢轴排列向量
LUDecompositiongetL() : Matrix返回下三角因子
LUDecompositiongetPivot() : number[]返回枢轴置换向量
LUDecompositiongetU() : Matrix返回上三角因子
LUDecompositionisNonsingular() : boolean该矩阵是否非奇异
LUDecompositionsolve(B : Matrix) : Matrix求解 A*X = B
QRDecompositiongetH() : Matrix返回Householder矢量
QRDecompositiongetQ() : Matrix生成并返回正交因子
QRDecompositiongetR() : Matrix返回上三角因子
QRDecompositionisFullRank() : boolean是否是满秩的矩阵
QRDecompositionsolve(B : Matrix) : Matrix求解 A*X = B
EigenvalueDecompositiongetD() : Matrix返回块对角特征值矩阵
EigenvalueDecompositiongetV() : Matrix返回特征向量矩阵
EigenvalueDecompositiongetRealEigenvalues() : number[]返回特征值的实部
EigenvalueDecompositiongetImagEigenvalues() : number[]返回特征值的虚部
SingularValueDecompositioncond() : number两个范数条件数
SingularValueDecompositiongetS() : Matrix返回奇异值的对角矩阵
SingularValueDecompositiongetSingularValues() : number[]返回奇异值的一维数组
SingularValueDecompositiongetU() : Matrix返回左奇异向量
SingularValueDecompositiongetV() : Matrix返回右奇异向量
SingularValueDecompositionnorm2() : number两个范数
SingularValueDecompositionrank() : number有效数值矩阵秩
MatrixarrayLeftDivide(B : Matrix) : Matrix逐元素左分割,C=A\B
MatrixarrayLeftDivideEquals(B : Matrix) : Matrix一个元素接一个元素,左分割到位,A=A\B
MatrixarrayRightDivide(B : Matrix) : Matrix逐个元素的右划分,C=A./B
MatrixarrayRightDivideEquals(B : Matrix) : Matrix逐元素右划分到位,A=A./B
MatrixarrayTimes(B : Matrix) : Matrix逐元素相乘,C=A.*B
MatrixarrayTimesEquals(B : Matrix) : Matrix逐元素相乘到位,A=A.*B
Matrixchol() : CholeskyDecompositionCholesky分解
Matrixclone() : any克隆Matrix对象。
MatrixconstructWithCopy(A : number[][]) : Matrix从二维数组的副本构造矩阵。
Matrixcopy() : Matrix深入复制矩阵
Matrixdet() : number返回左奇异向量
Matrixeig() : EigenvalueDecomposition特征值分解
Matrixget(i : number, j : number) : number获取单个元素
MatrixgetArray() : number[][]访问内部二维数组
MatrixgetArrayCopy() : number[][]复制内部二维数组
MatrixgetColumnDimension() : number获取列维度
MatrixgetColumnPackedCopy() : number[]制作内部数组的一维列压缩副本
MatrixgetMatrix(i0? : any, i1? : any, j0? : any, j1? : any) : any获取一个子矩阵。
MatrixgetRowDimension() : number获取行维度。
MatrixgetRowPackedCopy() : number[]制作内部数组的一维行压缩副本
Matrixidentity(m : number, n : number) : Matrix生成身份矩阵
Matrixinverse() : Matrix矩阵逆或伪逆
Matrixlu() : LUDecompositionLU分解
Matrixminus(B : Matrix) : MatrixC = A - B
MatrixminusEquals(B : Matrix) : MatrixA = A - B
Matrixnorm1() : number一个范数
Matrixnorm2() : number两个范数
MatrixnormF() : numberFrobenius范数
MatrixarrayLeftDivide(B : Matrix) : Matrix逐元素左分割,C=A\B
MatrixarrayLeftDivideEquals(B : Matrix) : Matrix一个元素接一个元素,左分割到位,A=A\B
MatrixarrayRightDivide(B : Matrix) : Matrix逐个元素的右划分,C=A./B
MatrixarrayRightDivideEquals(B : Matrix) : Matrix逐元素右划分到位,A=A./B
MatrixarrayTimes(B : Matrix) : Matrix逐元素相乘,C=A.*B
MatrixarrayTimesEquals(B : Matrix) : Matrix逐元素相乘到位,A=A.*B
Matrixchol() : CholeskyDecompositionCholesky分解
Matrixclone() : any克隆Matrix对象。
MatrixconstructWithCopy(A : number[][]) : Matrix从二维数组的副本构造矩阵。
Matrixcopy() : Matrix深入复制矩阵
Matrixdet() : number返回左奇异向量
Matrixeig() : EigenvalueDecomposition特征值分解
Matrixget(i : number, j : number) : number获取单个元素
MatrixgetArray() : number[][]访问内部二维数组
MatrixgetArrayCopy() : number[][]复制内部二维数组
MatrixgetColumnDimension() : number获取列维度
MatrixgetColumnPackedCopy() : number[]制作内部数组的一维列压缩副本
MatrixgetMatrix(i0? : any, i1? : any, j0? : any, j1? : any) : any获取一个子矩阵。
MatrixgetRowDimension() : number获取行维度。
MatrixgetRowPackedCopy() : number[]制作内部数组的一维行压缩副本
Matrixidentity(m : number, n : number) : Matrix生成身份矩阵
Matrixinverse() : Matrix矩阵逆或伪逆
Matrixlu() : LUDecompositionLU分解
Matrixminus(B : Matrix) : MatrixC = A - B
MatrixminusEquals(B : Matrix) : MatrixA = A - B
Matrixnorm1() : number一个范数
Matrixnorm2() : number两个范数
MatrixnormF() : numberFrobenius范数
MatrixnormInf() : number无穷范数
Matrixplus(B : Matrix) : MatrixC = A + B
MatrixplusEquals(B : Matrix) : MatrixA = A + B
Matrixqr() : QRDecompositionQR分解
Matrixrandom(m : number, n : number) : Matrix生成具有随机元素的矩阵
Matrixrank() : number矩阵秩
Matrixset(i : number, j : number, s : number):void设置单个元素
MatrixsetMatrix(i0? : any, i1? : any, j0? : any, j1? : any, X? : any) : any设置一个子矩阵。
Matrixsolve(B : Matrix) : Matrix求解A*X=B
MatrixsolveTranspose(B : Matrix) : Matrix求解X*A=B,也就是A'*X'=B'
Matrixsvd() : SingularValueDecomposition奇异值分解
Matrixtimes(B? : any) : any线性代数矩阵乘法,A*B
MatrixtimesEquals(s : number) : Matrix将矩阵乘以一个标量,a=s*a
Matrixtrace() : number矩阵跟踪
Matrixtranspose() : Matrix矩阵转置
Matrixuminus() : Matrix减号

目录结构

|---- jama
|    |---- entry  # 示例代码文件夹
|    |---- library  # jama库文件夹
|        |---- src
|            |---- main
|                |---- ets
|                    |---- components
|                        |---- util  # 工具类文件
|                            |---- Maths.ts  # 指数计算类
|                        |---- CholeskyDecomposition.ts  # 乔列斯基分解类
|                        |---- EigenvalueDecomposition.ts  # 矩阵的特征值和特征向量
|                        |---- LUDecomposition.ts  # LU分解
|                        |---- Matrix.ts  # 矩阵类
|                        |---- QRDecomposition.ts  # QR分解
|                        |---- SingularValueDecomposition.ts  # 奇异值分解
|        |---- index.ets  # 对外接口
|    |---- README.md  # 安装使用方法                    
|    |---- README_zh.md  # 安装使用方法