到目前爲止,您對我的幫助非常大,希望您能幫我解開這個問題。我正在構建一個用複雜矩陣進行計算的項目。我一直在使用mikera/core.matrix.complex,它使用mikera/core.matrix作爲矩陣材料,而complex.core用於在clojure中定義複數。在Clojure項目中將複雜算術設置爲默認值
我希望能夠做任何和所有的算術運算,包括使用非理性的數字,如e (def e (Math/E))
和pi (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.
我覺得我讓這更復雜,比它,核心。 matrix.complex看起來像它具有core.matrix和clojure.core中所有內容的擴展,但它沒有將它用於我擁有的命名空間聲明。我對Clojure協議並不熟悉,所以肯定會丟失一些東西。我只想包含所有三個庫,並有任何和所有的數學在複數的情況來進行,即1 =(1.0,0.0),和(Math/exp (* pi (complex 0 1)) => (-1.0, 0.0)
我怎麼能去這樣做?對不起,如果我不清楚,我會嘗試清除人們對我所問的任何問題。
編輯:我一直在思考這個問題,並真正開始最好的地方是我列出的最後一個等式:獲得E 1 PI *我等於-1。如果我嘗試使用複數Math/exp,我會得到一個轉換異常。