问题标签 [ejml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
829 浏览

java - EJML 获取矩阵特征向量的实数值

我正在尝试将非正定矩阵转换为正定矩阵,以便能够进行cholesky分解。使用我认为是一个很好的库的EJML,我在尝试获取矩阵的特征向量时遇到了麻烦。

EJML为每个存在虚值的特征向量返回一个空值。与JBlas等其他java库不同,它不提供任何功能(至少不是显而易见的功能)来提取真正的价值。

根据EJML javadoc这里):

MatrixType getEigenVector(整数索引)

用于检索实值特征向量。如果特征向量与复特征值相关联,则返回 null。

参数:

index - 特征值特征向量对的索引。

回报:

如果关联的特征值是实数,则返回一个特征向量,否则返回 null。

为了重现我的问题,请考虑以下算法:

据我了解,特征向量矩阵的前两列是空的,因为存在使EJML返回空值的虚值。我需要一种方法或技术,可以让我保留虚值并提取真实值,而不会丢失过程中的所有向量。

0 投票
2 回答
1430 浏览

java - 用类似 Matlab 的样式在 ejml 中初始化一个向量

在 Mablab/Octave 中,我可以创建一个具有范围样式的新向量,例如:
v = [1:10];

但是,当我将它放入 ejml 方程(Java)时,它不起作用:
eq.process("v = [1:10]");

它仅适用于显式初始化,例如:
eq.process("v = [1 2 ]");

任何人都可以这样做,或者建议我解决它吗?谢谢。

0 投票
1 回答
102 浏览

java - 使用公式为矩阵元素赋值时出错

我在 Java 中有几行简单的代码,使用 ejml Equation 如下:

最后一行不起作用,抛出错误“Submatrix out of bounds. Lower extent”。显然,矩阵 T 的大小为 2x3,索引从 0 开始,因此 T(1,2) 必须有效。我还尝试转换为原始矩阵,如下所示:

它有效。这是这个库的错误吗?

0 投票
1 回答
582 浏览

java - Java:使用 EJML 的矩阵求逆未按预期工作

在我开发的 java 项目中,我需要计算矩阵的逆。为了与其他项目和其他开发人员保持一致,我正在使用 Efficient Java Matrix Library (orj.ejml)。

为了反转矩阵,我使用了 org.ejml.ops.CommonOps 中的反转,直到现在我都工作得很好,我得到了一个意想不到的结果

我已经隔离了不起作用的情况:

我从这个测试中得到的输出是:

类型 = 密集,numRows = 3,numCols = 3
77.440 -24.640 -8.800
-24.640 7.840 2.800
-8.800 2.800 1.000

类型 = 密集,numRows = 3,numCols = 3
NaN -Infinity Infinity
NaN Infinity -Infinity
NaN -Infinity Infinity

真的

我的第一个想法是它可能是一个奇异矩阵,因此不可逆,但是在使用不同的计算工具测试相同的矩阵后,我发现它不是奇异的。

所以我回到了 EJML 文档,找到了这个特定函数的以下信息。

如果算法无法反转矩阵,则返回 false。如果它返回 true,则意味着算法完成。结果可能仍然很糟糕,因为矩阵是奇异的或几乎是奇异的。

而且,在这种特殊情况下,矩阵不是奇异的,但我们可以说它接近奇异。

我能想到的唯一解决方案是在计算后搜索 NaN 或 Infinites 的倒置矩阵,如果我在那里发现一些有趣的东西,我只需用原始矩阵替换倒置矩阵,尽管这似乎不是一个非常干净的做法它产生合理的结果。

我的问题是:

  • 你能想出任何解决这种情况的办法吗?比仅使用原始矩阵作为自己的逆矩阵更聪明和更明智的方法。

  • 如果没有办法解决,你知道有没有其他 Java Matrix 库可以解决这种情况,我不期待引入一个新库,但如果这成为一个真正的问题,它可能是唯一的解决方案.

问候并感谢您的投入!

0 投票
1 回答
664 浏览

java - 使用 EJML 计算线性系统

我究竟如何格式化我的代码,以便它需要

并返回x,y,z,w

我试图遵循这个答案中描述的格式,目前我拥有的是以下代码,它IllegalArgumentException: "java.lang.IllegalArgumentException: Can't solve for wide systems. More variables than equations.在尝试计算 4 个结果时抛出:

我究竟做错了什么?

0 投票
2 回答
1902 浏览

java - 在 EJML 中将矩阵转换回数组

我已经开始使用 EJML 库来表示矩阵。我将使用SimpleMatrix. 我没有找到我需要的两件重要的事情。也许有人可以帮助我确定以下操作是否可行,如果可以,如何做到这一点:

  1. 是否可以将矩阵转换回一维双精度数组 ( double[]) 或二维双精度数组 ( double[][]),而无需遍历所有效率非常低的元素?我没有找到一种方法。例如,Jeigen 库提供了对一维数组的转换(但我不知道这是如何在内部完成的)。

  2. 是否可以删除行或列?

顺便说一句,有人知道 EJML 在运行时方面与大型矩阵的 Jeigen 相比如何吗?EJML 提供了更多的功能,并且记录得更好,但在运行时方面我有点害怕。

0 投票
1 回答
212 浏览

java - 如何使用 Jeigen 覆盖矩阵的列/行(与 EJML 相比)

我使用Jeigen来表示 Java 中的矩阵(Jeigen 是 Eigen 的包装器)。该库既快速又简单,但我缺少一个很酷的功能。据我所知,Jeigen 不支持交换列或行(例如,对列进行操作,然后用新值替换列)。Jeigen 仅支持设置单个条目。

有人对此有有效的解决方法吗?在列中设置每个值是低效的(尤其是在列很大的情况下)。

或者,也许 EJML 支持这一点。但是对于 EJML,我遇到的问题是不可能轻松快速地将 SimpleMatrix 转换为一维数组。

0 投票
1 回答
183 浏览

java - 使用 EJML 的 LM 算法

我尝试使用 EJML wiki 中的示例,我们在这里使用 Levenberg Marquardt 优化源代码

我将它与这个.Net 版本进行比较,在该版本中,我们可以提供函数模型参数。

例如:a*x^2+b*x+c我们可以将模型的所有参数作为输入。

但是,对于 EJML LM 代码,我看不到在哪里可以提供这些模型参数。

我在下面粘贴了我如何使用 LM EJML 类:

那么我怎样才能给出这些模型参数呢?

0 投票
1 回答
1157 浏览

scala - 无法使用 gradle 和 java 库依赖项构建 Scala 程序

我有一些简单的问题(虽然对我来说太难了):

我正在尝试使用 gradle 构建一个简单的 Scala 测试程序,该程序具有 Java 库依赖项。我的测试程序如下

src/main/scala/test.scala

我的 build.gradle 看起来像这样:

当我用

我得到了正确的文件夹结构(build/classes/main/test.class)。

如果我现在尝试运行 test.class

我收到以下错误:

所以似乎 EJML 没有正确链接。看起来我忽略了一些东西,但我想不出是什么。我确认已下载 EJML 库

如果我使用 Eclipse 并将 .jars 手动添加到项目中,该程序也可以正常构建

我过去使用相同的过程成功地使用 gradle 构建了 java 项目(虽然已经有几年了)。任何帮助表示赞赏。

PS。只是为了澄清,我正在尝试使用命令行进行构建。如果我手动添加 JAR,Eclipse(和其他 IDE)工作正常

聚苯乙烯。程序运行到“val M = ...”行(已测试)

0 投票
0 回答
254 浏览

java - 求解线性方程组时出现 SingularMatrixException

我使用 EJML 来求解线性方程组。

EJML 使用双打。我的输入(和预期输出)是整数。我将省略 toString() 中的 .000。

我的矩阵 A 看起来像这样(虽然它是 ~1000x1000):

我的 b 只是一个向量,在第一个和最后一个索引中都有一个值,其余的都是 0。

对于 5x5 尺寸,我可以使用 EJML,但对于我的 1000x1000 矩阵,我得到一个 -Error Solution contains uncountable numbers

结果如下所示:


我的代码看起来像这样(矩阵是正确的,我通过 Sysout 和 Debugger 进行了检查):


现在我假设我的系统以某种方式表现不佳。可悲的是,我不太喜欢矩阵,所以我认为我可能使用错误的方法来解决这个特定问题。我能想到的另一件事是双精度妨碍了我。

有什么我可以做的吗,或者 EJML 根本不是这里的正确工具?