2016-03-01 8 views
5

में डिफ़ॉल्ट बनाएं, अब तक आप मेरे लिए शानदार रूप से सहायक रहे हैं, मुझे आशा है कि आप मुझे इस बारे में अपना मन प्राप्त करने में मदद कर सकते हैं। मैं एक परियोजना का निर्माण कर रहा हूं जो जटिल matrices के साथ computations करता है। मैं mikera/core.matrix.complex का उपयोग कर रहा हूं, जो क्लोजर में जटिल संख्याओं को परिभाषित करने के लिए मैट्रिक्स सामान के लिए mikera/core.matrix और complex.core का उपयोग करता है।कॉम्प्लेक्स अंकगणित को क्लोजर प्रोजेक्ट

मैं किसी भी और सभी अंकगणित करने में सक्षम होना चाहता हूं, जिसमें ई (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 की आवश्यकता के बिना कोर.मैट्रिक्स की आवश्यकता होती है, तो मैट्रिक्स फ़ंक्शंस में से कोई भी काम नहीं करता है।

यह (+ 3 4) जैसी चीजों के लिए भी जाता है। यदि मैं प्रतिलिपि में सीधे (use 'complex.core) का मूल्यांकन करता हूं, तो यह (7.0, 0.0) का मूल्यांकन करेगा, जो मैं चाहता हूं, अन्यथा यह 7 के रूप में आता है।

मुझे लगता है कि मैं इसे कोर की तुलना में अधिक जटिल बना रहा हूं। matrix.complex ऐसा लगता है कि इसमें core.matrix और clojure.core में सब कुछ के लिए एक्सटेंशन हैं, लेकिन यह मेरे पास नेमस्पेस घोषणा के साथ इसका उपयोग नहीं करता है। मैं क्लोजर प्रोटोकॉल से परिचित नहीं हूं, इसलिए निश्चित रूप से कुछ ऐसा है जो मुझे याद आ रहा है। मैं बस सभी तीन पुस्तकालयों को शामिल करना चाहता हूं, और जटिल संख्याओं के संदर्भ में कोई भी और सभी गणित किया जाना चाहिए, यानी 1 = (1.0, 0.0), और (Math/exp (* pi (complex 0 1)) => (-1.0, 0.0)

मैं यह करने के बारे में कैसे जा सकता हूं? क्षमा करें अगर मैं स्पष्ट नहीं हूं, तो मैं जो कुछ पूछ रहा हूं उसके बारे में लोगों के किसी भी प्रश्न का प्रयास और साफ़ कर दूंगा।

संपादित करें: मैं समस्या के बारे में सोच रहा हूं, और वास्तव में शुरू करने के लिए सबसे अच्छी जगह है कि मैंने सूचीबद्ध अंतिम समीकरण है: e^pi * i बराबर -1 प्राप्त करना। यदि मैं जटिल संख्याओं के साथ मैथ/एक्सप का उपयोग करने का प्रयास करता हूं, तो मुझे एक कास्टिंग अपवाद मिलता है।

उत्तर

1

मैं core.matrix.complex से परिचित नहीं हूं लेकिन यहां कुछ ऐसे बिंदु हैं जिनके बारे में आपको शायद पता नहीं है। यह तकनीकी रूप से उत्तर नहीं है लेकिन टिप्पणी में ठीक करना बहुत लंबा है।

  1. core.matrix एपीआई का एक सेट में परिभाषित किया गया, प्रोटोकॉल के रूप में, here परिभाषित किया।

  2. core.matrix.complexextend जटिल मैट्रिक्स के सभी प्रोटोकॉल नहीं है। उदाहरण के लिए, mat/mmul परिभाषित here प्रोटोकॉल PMatrixMultiply पर निर्भर करता है। लेकिन यह प्रोटोकॉल जटिल matrices तक बढ़ाया नहीं गया है।

  3. (+ 3 4) रिटर्न (7.0, 0.0)उपयोग आईएनजी complex.core क्योंकि complex.core समारोह/ऑपरेटर + दुबारा लिखा के बाद। लेकिन मुझे संदेह है कि आपको इन ऑपरेटरों को संदर्भित करना चाहिए या नहीं। complex.coreorg.apache.commons.math3.complex.Complex के आसपास केवल एक पतली आवरण है और यह matrices के बारे में कुछ भी नहीं जानता है। शायद आप core.matrix एपीआई जैसे add में फ़ंक्शंस/ऑपरेटरों का उपयोग करना बेहतर कर देंगे।

संबंधित मुद्दे