मैं गो में एक पैकेज लिखने की कोशिश कर रहा हूं जो "जेनेरिक" प्रकार का उपयोग करके समीकरण की गणना करता है। विशिष्ट होने के लिए, मैं रनगे कुट्टा 5 सन्निकटन को कार्यान्वित करना चाहता हूं।जाओ (भाषा) सामान्य संख्यात्मक प्रकार/इंटरफ़ेस
यह सन्निकटन बिंदु t0 + h
में एक (अज्ञात) समारोह y
का मूल्यांकन t0
पर y
का ही मूल्य, प्रारंभ समय t0
, कदम चौड़ाई h
और एक अंतर समीकरण dgl
रूप dy/dt = g(t,y)
जहां की है जो का उपयोग कर g
कुछ फ़ंक्शन है।
यह अनुमान वैक्टरों (या यहां तक कि matrices) के साथ काम करते समय स्केलर प्रकारों के साथ काम करते समय बिल्कुल वही व्यवहार करता है। अधिक आम तौर पर बोलते हुए: यह सब कुछ के साथ काम करता है जिसे एक ही प्रकार के मान में जोड़ा/घटाया जा सकता है और स्केलर द्वारा स्केल किया जा सकता है (जिसके लिए मैं float64
का उपयोग करता हूं)
इसलिए मैंने इसे गो इंटरफ़ेस के रूप में व्यक्त करने का प्रयास किया:
type Numeric interface {
Add(rhs Numeric) Numeric
Sub(rhs Numeric) Numeric
Mul(rhs float64) Numeric
}
लेकिन जब मैं इस इंटरफेस "लागू" करने की कोशिश, मैं क्योंकि मानकों की परेशानियों में भाग लिखें:
type Vec6F struct {
x, y, z float64
vx, vy, vz float64
}
func (lhs *Vec6F) Add(rhs *Vec6F) rk5.Numeric {
result := new(Vec6F)
result.x = lhs.x + rhs.x
result.y = lhs.y + rhs.y
result.z = lhs.z + rhs.z
result.vx = lhs.vx + rhs.vx
result.vy = lhs.vy + rhs.vy
result.vz = lhs.vz + rhs.vz
return result
}
यह मैं त्रुटि देता है
cannot use result (type *Vec6F) as type rk5.Numeric in return argument:
*Vec6F does not implement rk5.Numeric (wrong type for Add method
have Add(*Vec6F) rk5.Numeric
want Add(rk5.Numeric) rk5.Numeric
जो एक हाथ पूरी तरह से तर्क पर है, मेरे लिए
लेकिन दूसरी तरफ (क्योंकि आरएचएस संख्यात्मक को लागू किसी अन्य वस्तु हो सकता है): मैं कैसे कि जाओ में की तरह कुछ व्यक्त करते हैं? सी ++ में मैं ऑपरेटर ओवरलोडिंग का उपयोग कर सकता हूं, लेकिन यह संभव नहीं है।
"ऑफ-विषय": विभेदक समीकरण हल किया गया है जो सरल (सरल) मर्स कक्षा का वर्णन करता है। Quick'n'dirty पूर्ण कोड के लिए http://play.golang.org/p/GwehylBbLK –