gpt4 book ai didi

math - 使复杂算术成为 Clojure 项目中的默认值

转载 作者:行者123 更新时间:2023-12-04 21:36:53 25 4
gpt4 key购买 nike

到目前为止,您对我的帮助非常大,我希望您能帮助我解决这个问题。我正在构建一个使用复杂矩阵进行计算的项目。我一直在使用mikera/core.matrix.complex , 它使用 mikera/core.matrix对于矩阵的东西,complex.core用于在 clojure 中定义复数。

我希望能够做任何和所有的算术,包括使用像 e (def e (Math/E)) 这样的无理数和圆周率 (def pi (Math/PI)) ,并包括可能复杂也可能不复杂的矩阵数学。当我混合来自不同库的函数时,问题就来了。

现在我的命名空间看起来像这样:

(ns qgame.utils.math
(:require
[clojure.walk :as w :refer [postwalk
prewalk]]
[clojure.core.matrix :as mat]
[clojure.core.matrix.complex :as compl]
[incanter.core :as ic]
[complex.core :as c :refer [+ - / *]]))

如果我这样做 (mat/mmul matrix1 matrix2) , 然后一切都被视为常规数字,使用复数会搞砸。我得到了很多 ClassCastException org.apache.commons.math3.complex.Complex cannot be cast to java.lang.Number .如果我只需要 core.matrix.complex 而不需要 core.matrix,那么矩阵函数都不起作用。

(+ 3 4) 这样的东西也是如此。 .如果我直接 (use 'complex.core)在一个 repl 中,那将评估为 (7.0, 0.0) ,这就是我想要的,否则它只会显示为 7。

我觉得我让这比它更复杂,core.matrix.complex 看起来它对 core.matrix 和 clojure.core 中的所有内容都有扩展,但它没有将它与我拥有的命名空间声明一起使用.我对 Clojure 协议(protocol)不是很熟悉,所以我肯定缺少一些东西。我只想包含所有三个库,并在复数的上下文中完成所有数学运算,即 1 = (1.0, 0.0) 和 (Math/exp (* pi (complex 0 1)) => (-1.0, 0.0)
我该怎么做呢?抱歉,如果我不清楚,我会尝试解决人们对我所问问题的任何问题。

编辑:我一直在考虑这个问题,实际上最好的起点是我列出的最后一个等式:让 e^pi*i 等于 -1。如果我尝试将 Math/exp 与复数一起使用,则会出现强制转换异常。

最佳答案

我不熟悉 core.matrix.complex 但这里有一些你可能不知道的点。这在技术上不是一个答案,但在评论中修复它太长了。

  • core.matrix定义了一组API,以协议(protocol)的形式,定义here .
  • core.matrix.complexextend复杂矩阵的所有协议(protocol)。例如,mat/mmul定义 here依赖协议(protocol) PMatrixMultiply .但是这个协议(protocol)没有扩展到复杂的矩阵。
  • (+ 3 4)返回 (7.0, 0.0)使用后complex.core因为complex.core重写了函数/运算符 + .但我怀疑你是否应该引用这些运营商。 complex.core只是对 org.apache.commons.math3.complex.Complex 的一个薄包装它对矩阵一无所知。也许你最好使用core.matrix 中的函数/运算符。 API 像 add .
  • 关于math - 使复杂算术成为 Clojure 项目中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729907/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com