问题标签 [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.
java - EJML 获取矩阵特征向量的实数值
我正在尝试将非正定矩阵转换为正定矩阵,以便能够进行cholesky分解。使用我认为是一个很好的库的EJML,我在尝试获取矩阵的特征向量时遇到了麻烦。
EJML为每个存在虚值的特征向量返回一个空值。与JBlas等其他java库不同,它不提供任何功能(至少不是显而易见的功能)来提取真正的价值。
根据EJML javadoc(这里):
MatrixType getEigenVector(整数索引)
用于检索实值特征向量。如果特征向量与复特征值相关联,则返回 null。
参数:
index - 特征值特征向量对的索引。
回报:
如果关联的特征值是实数,则返回一个特征向量,否则返回 null。
为了重现我的问题,请考虑以下算法:
据我了解,特征向量矩阵的前两列是空的,因为存在使EJML返回空值的虚值。我需要一种方法或技术,可以让我保留虚值并提取真实值,而不会丢失过程中的所有向量。
java - 用类似 Matlab 的样式在 ejml 中初始化一个向量
在 Mablab/Octave 中,我可以创建一个具有范围样式的新向量,例如:
v = [1:10];
但是,当我将它放入 ejml 方程(Java)时,它不起作用:
eq.process("v = [1:10]");
它仅适用于显式初始化,例如:
eq.process("v = [1 2 ]");
任何人都可以这样做,或者建议我解决它吗?谢谢。
java - 使用公式为矩阵元素赋值时出错
我在 Java 中有几行简单的代码,使用 ejml Equation 如下:
最后一行不起作用,抛出错误“Submatrix out of bounds. Lower extent”。显然,矩阵 T 的大小为 2x3,索引从 0 开始,因此 T(1,2) 必须有效。我还尝试转换为原始矩阵,如下所示:
它有效。这是这个库的错误吗?
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 库可以解决这种情况,我不期待引入一个新库,但如果这成为一个真正的问题,它可能是唯一的解决方案.
问候并感谢您的投入!
java - 使用 EJML 计算线性系统
我究竟如何格式化我的代码,以便它需要
并返回x,y,z,w
?
我试图遵循这个答案中描述的格式,目前我拥有的是以下代码,它IllegalArgumentException: "java.lang.IllegalArgumentException: Can't solve for wide systems. More variables than equations.
在尝试计算 4 个结果时抛出:
我究竟做错了什么?
java - 在 EJML 中将矩阵转换回数组
我已经开始使用 EJML 库来表示矩阵。我将使用SimpleMatrix
. 我没有找到我需要的两件重要的事情。也许有人可以帮助我确定以下操作是否可行,如果可以,如何做到这一点:
是否可以将矩阵转换回一维双精度数组 (
double[]
) 或二维双精度数组 (double[][]
),而无需遍历所有效率非常低的元素?我没有找到一种方法。例如,Jeigen 库提供了对一维数组的转换(但我不知道这是如何在内部完成的)。是否可以删除行或列?
顺便说一句,有人知道 EJML 在运行时方面与大型矩阵的 Jeigen 相比如何吗?EJML 提供了更多的功能,并且记录得更好,但在运行时方面我有点害怕。
java - 如何使用 Jeigen 覆盖矩阵的列/行(与 EJML 相比)
我使用Jeigen来表示 Java 中的矩阵(Jeigen 是 Eigen 的包装器)。该库既快速又简单,但我缺少一个很酷的功能。据我所知,Jeigen 不支持交换列或行(例如,对列进行操作,然后用新值替换列)。Jeigen 仅支持设置单个条目。
有人对此有有效的解决方法吗?在列中设置每个值是低效的(尤其是在列很大的情况下)。
或者,也许 EJML 支持这一点。但是对于 EJML,我遇到的问题是不可能轻松快速地将 SimpleMatrix 转换为一维数组。
java - 使用 EJML 的 LM 算法
我尝试使用 EJML wiki 中的示例,我们在这里使用 Levenberg Marquardt 优化源代码
我将它与这个.Net 版本进行比较,在该版本中,我们可以提供函数模型参数。
例如:a*x^2+b*x+c
我们可以将模型的所有参数作为输入。
但是,对于 EJML LM 代码,我看不到在哪里可以提供这些模型参数。
我在下面粘贴了我如何使用 LM EJML 类:
那么我怎样才能给出这些模型参数呢?
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 = ...”行(已测试)
java - 求解线性方程组时出现 SingularMatrixException
我使用 EJML 来求解线性方程组。
EJML 使用双打。我的输入(和预期输出)是整数。我将省略 toString() 中的 .000。
我的矩阵 A 看起来像这样(虽然它是 ~1000x1000):
我的 b 只是一个向量,在第一个和最后一个索引中都有一个值,其余的都是 0。
对于 5x5 尺寸,我可以使用 EJML,但对于我的 1000x1000 矩阵,我得到一个 -Error Solution contains uncountable numbers
。
结果如下所示:
我的代码看起来像这样(矩阵是正确的,我通过 Sysout 和 Debugger 进行了检查):
现在我假设我的系统以某种方式表现不佳。可悲的是,我不太喜欢矩阵,所以我认为我可能使用错误的方法来解决这个特定问题。我能想到的另一件事是双精度妨碍了我。
有什么我可以做的吗,或者 EJML 根本不是这里的正确工具?