あなたはこれまで私が驚くほど役に立つと思っています。私は、複雑な行列を使って計算を行うプロジェクトを構築しています。私はmikera/core.matrix.complexを使用していました。これは、マトリクス用にmikera/core.matrix、クロージャに複素数を定義するのにcomplex.coreを使用しています。Clojureプロジェクト内でComplex算術演算をデフォルトにする
私は、(def e (Math/E))
や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を必要とせずにcore.matrix.complexが必要な場合は、どの行列関数も動作しません。
(+ 3 4)
と同じものになります。私が直接(use 'complex.core)
をreplにした場合、それは(7.0, 0.0)
と評価されます。そうでなければ、それは7になります。
私はこれがコアよりも複雑になっているように感じます。 matrix.complexはcore.matrixとclojure.coreのすべての拡張を持っているようですが、私が持っている名前空間宣言ではそれを利用していません。私はClojureプロトコルに精通していないので、間違っているものがあります。 3つのライブラリをすべて組み込み、すべての数学を複素数の文脈で行うことを望みます。つまり、1 =(1.0,0.0)、(Math/exp (* pi (complex 0 1)) => (-1.0, 0.0)
どうすればいいですか?申し訳ありませんが、私は明確ではない場合、私はしようとし、人々が私が求めていることについての質問をクリアします。
編集:私はこの問題について考えてきましたが、実際に開始するのに最適な場所は、私がリストした最後の式です。e^pi * iを-1にする。複素数でMath/expを使用しようとすると、キャスト例外が発生します。