मूल विचार काफी सरल है। आप एक मैट्रिक्स ( ) की व्यवस्था करते हैं जो आपके सिस्टम में "नोड्स" या कोने का प्रतिनिधित्व करता है। इन नोड्स में से प्रत्येक में एक स्केलर-वैल्यूड "वोल्टेज" जुड़ा हुआ है जिसे एल्गोरिथ्म आय के रूप में बदला या अपडेट किया जा सकता है। दो नोड भी होंगे जिनके वोल्टेज को बदला नहीं जा सकता है। हम यहां एक "बैटरी" प्रकार लागू करने जा रहे हैं, इसलिए वे दो नोड्स इस बैटरी के दो छोरों का प्रतिनिधित्व करते हैं।V
RvRh
आपके द्वारा उपयोग की जाने वाली कंप्यूटर भाषा के आधार पर, आप नकारात्मक सूचकांकों का उपयोग कर सकते हैं या नहीं कर सकते हैं। कोई बात नहीं। यह सिर्फ आपको ध्यान में रखने की बात है कि आपका सामना किससे है।
LNLANA(NL+1)⋅(NA+1)NA⋅(NL+1)NL⋅(NA+1)
अभी। साथ सभी शीर्षकों को प्रारंभ करें0V0V1V
(दक्षता कारणों के लिए अन्य तकनीकें हैं। लेकिन यह शायद उनके साथ परेशान करने लायक नहीं है।)
i+j
Vi,j=Rhi,j−1⋅Rhi,j⋅(Vi−1,j⋅Rvi,j+Vi+1,j⋅Rvi−1,j)Rhi,j−1⋅Rhi,j⋅(Rvi,j+Rvi−1,j)+Rvi−1,j⋅Rvi,j(Rhi,j+Rhi,j−1)+Rvi−1,j⋅Rvi,j⋅(Vi,j−1⋅Rhi,j+Vi,j+1⋅Rhi,j−1)Rhi,j−1⋅Rhi,j⋅(Rvi,j+Rvi−1,j)+Rvi−1,j⋅Rvi,j(Rhi,j+Rhi,j−1)
उपरोक्त समीकरण केंद्रीय नोड के वोल्टेज को गणना करने से ज्यादा कुछ नहीं है जिसमें चार प्रतिरोधों को इससे जोड़ा जा रहा है, जहां चार प्रतिरोधों के दूसरे छोर पर वोल्टेज ज्ञात हैं। केंद्रीय नोड वोल्टेज तब उपरोक्त समीकरण से गणना की जाती है। चूँकि भाजक प्रत्येक पद के लिए समान होता है, आप केवल संख्यावालों के योग की गणना कर सकते हैं और फिर भाजक द्वारा एक बार विभाजित कर सकते हैं।
i+ji+j
0V1V
आप अगले चक्र के लिए तैयार हैं। इन चक्रों को जितनी बार आप महसूस करते हैं, समग्र राज्य को बसाने के लिए आवश्यक है (और यह होगा) करें।
1V
मैं कुछ कोड को घूर रहा हूं मैंने लिखा है कि योग, बहुत सारी टिप्पणियों के साथ, सिर्फ 67 लाइनें। इसलिए लिखना मुश्किल नहीं है।
इस विचार का "संक्षिप्त सारांश" यह है कि आप लागू करते हैं1V
ऐसा क्यों है कि आपको सिस्टम को i + j = सम और i + j = विषम में अलग करना होगा?
V5,5=f(V4,5,V6,5,V5,4,V5,6)V5,5V5,6=f(V4,6,V6,6,V5,5,V5,7)V5,5V5,7=f(V4,7,V6,7,V5,6,V5,8)क्योंकि फ़ंक्शन में कोई भी इनपुट नोड नहीं है जो इस चरण के दौरान बदल दिए गए थे । फिर आप चारों ओर झूलते हैं और विकल्पों की गणना करते हैं, सुलगने से बचते हैं लेकिन अब विकल्पों को अपडेट करते हैं। आपको वास्तव में इसे इस तरह करना होगा।
भी, सूत्र दोनों और विषम चरणों के लिए समान है?
हाँ, यह वही है।
क्या यह सभी एक प्रकार के रैखिक प्रणाली का उपयोग करके हल किया जा सकता है Ax = b जहां A एक रैखिक ऑपरेटर है और b सीमा की स्थिति प्रदान करता है? इसे देखते हुए, यह आंशिक अंतर समीकरणों को हल करने के लिए अंतर विधियों के लिए कुछ हद तक अनुरूप लगता है ..
एक कनेक्शन है। मुझे लगता है कि इसे 'मैट्रिक्स-मुक्त' कार्यान्वयन कहा जाता है।
यहाँ एक उदाहरण है। प्रतिरोधक मूल्यों के निम्नलिखित सेट को सिमुलेशन के लिए LTSpice में रखा गया था:
मैंने इसे छोटा और सरल रखा। जैसा कि आप देख सकते हैं, अनुमानित गणना से वर्तमान1V30.225mA30.224552mA
मैंने निम्नलिखित VB.NET कार्यक्रम चलाया:
Module GEOGRID
Const NL As Integer = 2
Const NA As Integer = 2
Const INF As Double = 1.0E+32
Sub Main()
Static Rh As Double(,) = New Double(NL + 2, NA + 1) {
{INF, INF, INF, INF},
{INF, 5, 21, INF},
{INF, 76, 10, INF},
{INF, 32, 22, INF},
{INF, INF, INF, INF}}
Static Rv As Double(,) = New Double(NA + 1, NL + 2) {
{INF, INF, INF, INF, INF},
{INF, 61, 50, 16, INF},
{INF, 56, 45, 18, INF},
{INF, INF, INF, INF, INF}}
Dim V As Double(,) = New Double(NL + 2, NA + 2) {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0}}
Dim PDE As Func(Of Integer, Integer, Double) = Function(ByVal i As Integer, ByVal j As Integer) (
Rh(i, j - 1) * Rh(i, j) * (V(i - 1, j) * Rv(i, j) + V(i + 1, j) * Rv(i - 1, j)) +
Rv(i - 1, j) * Rv(i, j) * (V(i, j - 1) * Rh(i, j) + V(i, j + 1) * Rh(i, j - 1))
) / (
Rh(i, j - 1) * Rh(i, j) * (Rv(i, j) + Rv(i - 1, j)) +
Rv(i - 1, j) * Rv(i, j) * (Rh(i, j) + Rh(i, j - 1))
)
Dim IV As Func(Of Integer, Integer, Double) = Function(ByVal i As Integer, ByVal j As Integer) 0 +
(V(i, j) - V(i - 1, j)) / Rv(i - 1, j) + (V(i, j) - V(i + 1, j)) / Rv(i, j) +
(V(i, j) - V(i, j - 1)) / Rh(i, j - 1) + (V(i, j) - V(i, j + 1)) / Rh(i, j)
Dim idx As Integer = NA \ 2 + 1
Dim jdx1 As Integer = NL + 1
Dim jdx2 As Integer = 1
For x As Integer = 1 To 1000
For k As Integer = 0 To (NA + 1) * (NL + 1) - 1 Step 2
Dim i As Integer = k \ (NL + 1)
Dim j As Integer = k - i * (NL + 1) + 1
i += 1
If Not (i = idx AndAlso (j = jdx1 OrElse j = jdx2)) Then V(i, j) = PDE(i, j)
Next
For k As Integer = 1 To (NA + 1) * (NL + 1) - 1 Step 2
Dim i As Integer = k \ (NL + 1)
Dim j As Integer = k - i * (NL + 1) + 1
i += 1
If Not (i = idx AndAlso (j = jdx1 OrElse j = jdx2)) Then V(i, j) = PDE(i, j)
Next
Next
Console.WriteLine("R = " & (1.0 / IV(idx, jdx1)).ToString)
Console.WriteLine("R = " & (-1.0 / IV(idx, jdx2)).ToString)
End Sub
End Module
R=33.0856844038614Ω
उपरोक्त कार्यक्रम प्रतिरोधों, ऊर्ध्वाधर और क्षैतिज, साथ ही वोल्टेज मैट्रिक्स को स्थापित करने का एक तरीका दिखाता है, ताकि यह गैर-मौजूद नोड्स और / या प्रतिरोधक मानों के लिए कुछ परीक्षणों को सरल कर दे। कोड थोड़ा क्लीनर है, इस तरह से, हालांकि इसके लिए कुछ और सरणी तत्वों की आवश्यकता होती है। (मैंने बस अतिरिक्त प्रतिरोधक मानों को मूल्य में अनंत बना दिया है।) बस तुलना करें कि मैंने जिस तरह से योजनाबद्ध तरीके से रखी गई थी, उसके साथ सरणियों को कैसे सेट किया है, और मुझे लगता है कि आप सभी सटीक तरीके से काम कर पाएंगे। यहाँ विवरण।
मैंने प्रतिरोधों और नोड मानों को भी हैक कर लिया है, बेशक, इसे किसी भी तरह से मूल्यों की तालिका को पढ़ने के लिए एक सामान्य उद्देश्य कार्यक्रम के बिना। लेकिन उस व्यापकता को जोड़ना बहुत आसान है। और इस कोड को वह सबकुछ बनाना चाहिए जो मैंने लिखा था बिल्कुल अस्पष्ट।
xx
और एक अंतिम नोट। बस यह साबित करने के लिए कि आप प्रतिरोधक की गणना करने के लिए निश्चित वोल्टेज नोड के वर्तमान का उपयोग कर सकते हैं, मैंने दोनों मानों को प्रिंट करने के लिए दो पंक्तियों का उपयोग किया है: से गणना की गई0V1V
(ठीक है। एक और अंतिम नोट। यह एफ # या किसी भी सभ्य संकलक प्रणाली को लक्षित करने वाले किसी भी सभ्य संकलक पर बेहतर लक्षित होगा। प्रत्येक गणना या तो "लाल" या "ब्लैक" समानांतर में की जा सकती है, पूरी तरह से एक दूसरे से स्वतंत्र रूप से। एफ # यह तुच्छ बनाता है। इसलिए एफ # में कोडित, आप इसे अपने सभी उपलब्ध कोर पर बिना किसी विशेष के चला सकते हैं। यह सिर्फ काम करता है। यदि आप किसी फैशन में बहुत सारे डेटा एकत्र कर रहे हैं तो सिर्फ एक नोट। मल्टी-कोर सिस्टम का पूरा फायदा।)
END नोट:
व्युत्पत्ति केसीएल से बहुत सरल है। निम्नलिखित व्यवस्था में चार प्रतिरोधों को रखें:
इस सर्किट का अनुकरण करें - सर्किटलैब का उपयोग करके बनाई गई योजनाबद्ध
केसीएल लागू करें:
VR1+VR2+VR3+VR4V=V1R1+V2R2+V3R3+V4R4∴=(V1R1+V2R2+V3R3+V4R4)(R1∣∣R2∣∣R3∣∣R4)
बीजगणित के साथ खेलने वाले कुछ को कोड में उपयोग किए गए परिणाम मिलते हैं।