सूचकांक संकेतन: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 11: Line 11:
निम्नलिखित केवल अवधारणा का  परिचय है: सूचकांक संकेतन का उपयोग गणित में अधिक विस्तार से किया जाता है (विशेषकर टेंसर#ऑपरेशंस के प्रतिनिधित्व और हेरफेर में)। अधिक जानकारी के लिए मुख्य लेख देखें.
निम्नलिखित केवल अवधारणा का  परिचय है: सूचकांक संकेतन का उपयोग गणित में अधिक विस्तार से किया जाता है (विशेषकर टेंसर#ऑपरेशंस के प्रतिनिधित्व और हेरफेर में)। अधिक जानकारी के लिए मुख्य लेख देखें.


===-आयामी सरणियाँ (वेक्टर)===
===-आयामी सरणियाँ (सदिश)===


{{main|सदिश (गणित और भौतिकी)}}
{{main|सदिश (गणित और भौतिकी)}}
Line 54: Line 54:


===द्वि-आयामी सरणियाँ===
===द्वि-आयामी सरणियाँ===
[[File:Matrix.svg|thumb|247px|right|आव्यूह के तत्वों को दो सबस्क्रिप्ट या सूचकांक के साथ वर्णित किया गया है।]]
[[File:Matrix.svg|thumb|247px|right|आव्यूह '''A''' के तत्वों को दो सबस्क्रिप्ट या सूचकांक के साथ वर्णित किया गया है।]]
{{main|आव्यूह (गणित)}}
{{main|आव्यूह (गणित)}}
{{see also|डायडिक्स}}
{{see also|डायडिक्स}}
Line 93: Line 93:
{{see also|टेंसर की शास्त्रीय प्रक्रिया }}
{{see also|टेंसर की शास्त्रीय प्रक्रिया }}


नोटेशन तत्वों के बहु-आयामी सरणियों के स्पष्ट सामान्यीकरण की अनुमति देता है: टेंसर। उदाहरण के लिए,
संकेतन तत्वों के बहु-आयामी सरणियों के स्पष्ट सामान्यीकरण की अनुमति देता है: टेंसर। उदाहरण के लिए,


:<math> A_{i_1 i_2 \cdots } + B_{i_1 i_2 \cdots} = C_{i_1 i_2 \cdots} </math>
:<math> A_{i_1 i_2 \cdots } + B_{i_1 i_2 \cdots} = C_{i_1 i_2 \cdots} </math>
कई समीकरणों के सेट का प्रतिनिधित्व करना।
कई समीकरणों के समुच्चय का प्रतिनिधित्व करना।


टेंसर विश्लेषण में, सहसंयोजक को विपरीत इकाइयों से अलग करने, वैक्टरों के सहप्रसरण और प्रतिप्रसरण को देखने और सूचकांकों को बढ़ाने और घटाने के लिए सबस्क्रिप्ट के अतिरिक्त सुपरस्क्रिप्ट का उपयोग किया जाता है।
टेंसर विश्लेषण में, सहसंयोजक को विपरीत इकाइयों से भिन्न करने, सदिशों के सहप्रसरण और प्रतिप्रसरण को देखने और सूचकांकों को बढ़ाने और घटाने के लिए सबस्क्रिप्ट के अतिरिक्त सुपरस्क्रिप्ट का उपयोग किया जाता है।


==कंप्यूटिंग में==
==कंप्यूटिंग में==
कई प्रोग्रामिंग भाषाओं में, सूचकांक संकेतन किसी सरणी के तत्वों को संबोधित करने का तरीका है। इस पद्धति का उपयोग इसलिए किया जाता है क्योंकि यह असेंबली भाषा में इसे लागू करने के तरीके के सबसे करीब है, जिसमें पहले तत्व का पता आधार के रूप में उपयोग किया जाता है, और तत्व आकार के गुणक (सूचकांक) का उपयोग सरणी के अंदर पता करने के लिए किया जाता है।
कई प्रोग्रामिंग लैंग्वेजेज में, सूचकांक संकेतन किसी सरणी के तत्वों को संबोधित करने का प्रकार है। इस पद्धति का उपयोग इसलिए किया जाता है क्योंकि यह असेंबली लैंग्वेज में इसे प्रारम्भ करने की विधि के सबसे निकट है, जिसमें प्रथम तत्व का एड्रेस आधार के रूप में उपयोग किया जाता है, और तत्व आकार के गुणक (सूचकांक) का उपयोग सरणी के अंदर एड्रेस करने के लिए किया जाता है।


उदाहरण के लिए, यदि पूर्णांकों की सरणी को कंप्यूटर की मेमोरी के क्षेत्र में संग्रहीत किया जाता है, जो पते 3000 ([[आधार पता]]) के साथ मेमोरी सेल से शुरू होती है, और प्रत्येक पूर्णांक चार कोशिकाओं (बाइट्स) पर कब्जा कर लेता है, तो इस सरणी के तत्व मेमोरी में हैं स्थान 0x3000, 0x3004, 0x3008,…, 0x3000 + 4(n − 1) ([[शून्य-आधारित क्रमांकन]] पर ध्यान दें)। सामान्य तौर पर, आधार पता b और तत्व आकार s के साथ किसी सरणी के ith तत्व का पता होता है {{nowrap|''b'' + ''is''}}.
उदाहरण के लिए, यदि पूर्णांकों की सरणी को कंप्यूटर की मेमोरी के क्षेत्र में मेमोरी सेल से प्रारंभ होती है जिसका एड्रेस 3000 ([[आधार पता|आधार एड्रेस]]) है, और प्रत्येक पूर्णांक चार कोशिकाओं (बाइट्स) पर अधिकार कर लेता है, तो इस सरणी के तत्व मेमोरी समिष्ट 0x3000, 0x3004, 0x3008,…, 0x3000 + 4(n − 1) पर हैं ([[शून्य-आधारित क्रमांकन]] पर ध्यान दें)। सामान्यतः, आधार एड्रेस b और तत्व आकार s के साथ किसी सरणी के ith तत्व का एड्रेस {{nowrap|''b'' + ''is''}} होता है। 


==कार्यान्वयन विवरण==
==कार्यान्वयन विवरण==
C (प्रोग्रामिंग भाषा) में हम उपरोक्त को इस प्रकार लिख सकते हैं {{code|*(base + i)}} (सूचक प्रपत्र) या {{code|base[i]}} (सरणी अनुक्रमण प्रपत्र), जो बिल्कुल समतुल्य है क्योंकि सी मानक सरणी अनुक्रमण प्रपत्र को सूचक प्रपत्र में परिवर्तन के रूप में परिभाषित करता है। संयोगवश, चूंकि सूचक जोड़ क्रमविनिमेय है, यह अस्पष्ट अभिव्यक्तियों जैसे कि अनुमति देता है {{code|3[base]}} जो के बराबर है {{code|base[3]}}.<ref>Programming with C++, J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, {{ISBN|0-07-114328-9}}</ref>
सी प्रोग्रामिंग लैंग्वेज में हम उपरोक्त को {{code|*(base + i)}} (पॉइंटर फॉर्म) या {{code|base[i]}} (एरे इंडेक्सिंग फॉर्म) के रूप में लिख सकते हैं, जो बिल्कुल समतुल्य है क्योंकि सी मानक एरे इंडेक्सिंग फॉर्म को पॉइंटर फॉर्म में परिवर्तन के रूप में परिभाषित करता है। संयोगवश, चूंकि सूचक जोड़ क्रमविनिमेय है, यह {{code|3[base]}} जैसे अस्पष्ट अभिव्यक्तियों की अनुमति देता है जो {{code|base[3]}} के समान है।<ref>Programming with C++, J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, {{ISBN|0-07-114328-9}}</ref>
===बहुआयामी सरणियाँ===
===बहुआयामी सरणियाँ===
चीजें तब और अधिक दिलचस्प हो जाती हैं जब हम से अधिक सूचकांक वाले सरणियों पर विचार करते हैं, उदाहरण के लिए,  द्वि-आयामी तालिका। हमारे पास तीन संभावनाएँ हैं:
चीजें तब और अधिक रोचक हो जाती हैं जब हम एक से अधिक सूचकांक वाले सरणियों पर विचार करते हैं, उदाहरण के लिए,  द्वि-आयामी तालिका। हमारे पास तीन संभावनाएँ हैं:
* दोनों में से  सूचकांक की गणना करके द्वि-आयामी सरणी को -आयामी बनाएं
* दोनों में से  सूचकांक की गणना करके द्वि-आयामी सरणी को एक-आयामी बनाएं।
* -आयामी सरणी पर विचार करें जहां प्रत्येक तत्व और -आयामी सरणी है, अर्थात सरणियों की सरणी
* एक-आयामी सरणी पर विचार करें जहां प्रत्येक तत्व एक-आयामी सरणी है, अर्थात सरणियों की सरणी है।
* मूल सरणी की प्रत्येक पंक्ति के पते की सरणी को पकड़ने के लिए अतिरिक्त भंडारण का उपयोग करें, और मूल सरणी की पंक्तियों को अलग-अलग -आयामी सरणी के रूप में संग्रहीत करें
* मूल सरणी की प्रत्येक पंक्ति के एड्रेस की सरणी को रखने के लिए अतिरिक्त स्टोरेज का उपयोग करें, और मूल सरणी की पंक्तियों को भिन्न-भिन्न एक-आयामी सरणी के रूप में संग्रहीत करें।
C में, सभी तीन विधियों का उपयोग किया जा सकता है। जब पहली विधि का उपयोग किया जाता है, तो प्रोग्रामर यह तय करता है कि सरणी के तत्वों को कंप्यूटर की मेमोरी में कैसे रखा जाता है, और प्रत्येक तत्व के स्थान की गणना करने के लिए सूत्र प्रदान करता है। दूसरी विधि का उपयोग तब किया जाता है जब प्रत्येक पंक्ति में तत्वों की संख्या समान होती है और प्रोग्राम लिखे जाने के समय ज्ञात होती है। प्रोग्रामर, उदाहरण के लिए, लिखकर तीन कॉलम वाले ऐरे की घोषणा करता है। {{code|elementtype tablename[][3];}}. फिर कोई सरणी के किसी विशेष तत्व को लिखकर संदर्भित करता है {{code|tablename[first index][second index]}}. कंपाइलर प्रत्येक पंक्ति में व्याप्त मेमोरी सेल्स की कुल संख्या की गणना करता है, वांछित पंक्ति का पता खोजने के लिए पहले इंडेक्स का उपयोग करता है, और फिर पंक्ति में वांछित तत्व का पता खोजने के लिए दूसरे इंडेक्स का उपयोग करता है। जब तीसरी विधि का उपयोग किया जाता है, तो प्रोग्रामर तालिका को पॉइंटर्स की सरणी घोषित करता है, जैसे कि {{code|elementtype *tablename[];}}. जब प्रोग्रामर बाद में किसी विशेष तत्व को निर्दिष्ट करता है {{code|tablename[first index][second index]}}, कंपाइलर पहले इंडेक्स द्वारा निर्दिष्ट पंक्ति के पते को देखने के लिए निर्देश उत्पन्न करता है, और दूसरे इंडेक्स द्वारा निर्दिष्ट तत्व के पते की गणना करते समय इस पते को आधार के रूप में उपयोग करता है।
सी में, सभी तीन विधियों का उपयोग किया जा सकता है। जब प्रथम विधि का उपयोग किया जाता है, तो प्रोग्रामर यह निश्चित करता है कि सरणी के तत्वों को कंप्यूटर की मेमोरी में कैसे रखा जाता है, और प्रत्येक तत्व के स्थान की गणना करने के लिए सूत्र प्रदान करता है। दूसरी विधि का उपयोग तब किया जाता है जब प्रत्येक पंक्ति में तत्वों की संख्या समान होती है और प्रोग्राम लिखे जाने के समय ज्ञात होती है। प्रोग्रामर, उदाहरण के लिए, {{code|elementtype tablename[][3];}} लिखकर तीन कॉलम वाले ऐरे की घोषणा करता है।  इसके पश्चात {{code|tablename[first index][second index]}} लिखकर सरणी के विशेष तत्व को संदर्भित करता है। कंपाइलर प्रत्येक पंक्ति में व्याप्त मेमोरी सेल्स की कुल संख्या की गणना करता है, वांछित पंक्ति के एड्रेस शोध के लिए प्रथम सूचकांक का उपयोग करता है, और फिर पंक्ति में वांछित तत्व के एड्रेस शोध के लिए दूसरे सूचकांक का उपयोग करता है। जब तीसरी विधि का उपयोग किया जाता है, तो प्रोग्रामर तालिका को पॉइंटर्स की सरणी घोषित करता है, जैसे कि {{code|elementtype *tablename[];}} है। जब प्रोग्रामर पश्चात में किसी विशेष तत्व {{code|tablename[first index][second index]}} निर्दिष्ट करता है, कंपाइलर प्रथम सूचकांक द्वारा निर्दिष्ट पंक्ति के एड्रेस को देखने के लिए निर्देश उत्पन्न करता है, और दूसरे सूचकांक द्वारा निर्दिष्ट तत्व के एड्रेस की गणना करते समय इस एड्रेस को आधार के रूप में उपयोग करता है।
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
void mult3x3f(float result[][3], const float A[][3], const float B[][3])
void mult3x3f(float result[][3], const float A[][3], const float B[][3])

Revision as of 16:04, 23 July 2023

गणित और कंप्यूटर प्रोग्रामिंग में, सूचकांक संकेतन का उपयोग संख्याओं की सरणी के तत्वों को निर्दिष्ट करने के लिए किया जाता है। सूचकांकों का उपयोग कैसे किया जाता है इसकी औपचारिकता विषय के अनुसार भिन्न होती है। विशेष रूप से, किसी सूची, सदिश या आव्यूह के तत्वों को संदर्भित करने के लिए भिन्न-भिन्न विधि हैं, यह इस पर निर्भर करता है कि कोई प्रकाशन के लिए औपचारिक गणितीय पेपर लिख रहा है या जब कोई कंप्यूटर प्रोग्राम लिख रहा है।

गणित में

सबस्क्रिप्ट का उपयोग करके किसी सरणी के तत्वों को संदर्भित करना गणित में अधिकांशतः सहायक होता है। सबस्क्रिप्ट पूर्णांक या चर (गणित) हो सकते हैं। सारणी सामान्यतः टेंसर का रूप लेती है, क्योंकि इन्हें बहु-आयामी सारणी के रूप में माना जा सकता है। विशेष (और अधिक परिचित) मामले सदिश (ज्यामिति) (1डी सरणी) और आव्यूह (गणित) (2डी सरणी) हैं।

निम्नलिखित केवल अवधारणा का परिचय है: सूचकांक संकेतन का उपयोग गणित में अधिक विस्तार से किया जाता है (विशेषकर टेंसर#ऑपरेशंस के प्रतिनिधित्व और हेरफेर में)। अधिक जानकारी के लिए मुख्य लेख देखें.

-आयामी सरणियाँ (सदिश)

सदिश को पंक्ति सदिश या स्तंभ सदिश के रूप में लिखकर संख्याओं की सरणी के रूप में माना जाता है (जो भी उपयोग किया जाता है वह सुविधा या संदर्भ पर निर्भर करता है):

सूचकांक संकेतन केवल ए लिखकर सरणी के तत्वों को इंगित करने की अनुमति देता हैi, जहां n-आयामों के कारण सूचकांक i को 1 से n तक चलने के लिए जाना जाता है।[1] उदाहरण के लिए, सदिश दिया गया:

फिर कुछ प्रविष्टियाँ हैं

.

अंकन को गणित और भौतिकी में वैक्टर पर लागू किया जा सकता है। निम्नलिखित सदिश समीकरण

सदिश के तत्वों (उर्फ घटकों) के संदर्भ में भी लिखा जा सकता है, अर्थात

जहां सूचकांक मूल्यों की निश्चित श्रृंखला लेते हैं। यह अभिव्यक्ति समीकरणों के सेट का प्रतिनिधित्व करती है, प्रत्येक सूचकांक के लिए । यदि प्रत्येक सदिश में n तत्व हैं, जिसका अर्थ है i = 1,2,…n, तो समीकरण स्पष्ट रूप से हैं

इसलिए, सूचकांक अंकन कुशल आशुलिपि के रूप में कार्य करता है

  1. समीकरण की सामान्य संरचना का प्रतिनिधित्व करना,
  2. जबकि व्यक्तिगत घटकों पर लागू होता है।

द्वि-आयामी सरणियाँ

आव्यूह A के तत्वों को दो सबस्क्रिप्ट या सूचकांक के साथ वर्णित किया गया है।

दो या दो से अधिक आयामों में संख्याओं के सरणियों का वर्णन करने के लिए से अधिक सूचकांक का उपयोग किया जाता है, जैसे कि आव्यूह के तत्व, (दाईं ओर की छवि भी देखें);

आव्यूह A की प्रविष्टि दो सूचकांकों, मान लीजिए i और j का उपयोग करके लिखी जाती है, सूचकांकों को अलग करने के लिए अल्पविराम के साथ या उसके बिना: aijया एi,j, जहां पहली सबस्क्रिप्ट पंक्ति संख्या है और दूसरी कॉलम संख्या है। गुणन का उपयोग गुणन के लिए संकेतन के रूप में भी किया जाता है; यह भ्रम का स्रोत हो सकता है. उदाहरण के लिए, यदि

फिर कुछ प्रविष्टियाँ हैं

.

9 से बड़े सूचकांकों के लिए, अल्पविराम-आधारित अंकन बेहतर हो सकता है (उदाहरण के लिए, a3,12 के अतिरिक्त 312).

आव्यूह समीकरण सदिश समीकरणों के समान ही लिखे जाते हैं, जैसे

आव्यूह के तत्वों (उर्फ घटकों) के संदर्भ में

i और j के सभी मानों के लिए। पुनः यह अभिव्यक्ति समीकरणों के सेट का प्रतिनिधित्व करती है, प्रत्येक सूचकांक के लिए । यदि आव्यूह में प्रत्येक में m पंक्तियाँ और n कॉलम हैं, तो इसका अर्थ है i = 1, 2, …, m और j = 1, 2, …, n, तो mn समीकरण हैं।

बहुआयामी सरणियाँ

संकेतन तत्वों के बहु-आयामी सरणियों के स्पष्ट सामान्यीकरण की अनुमति देता है: टेंसर। उदाहरण के लिए,

कई समीकरणों के समुच्चय का प्रतिनिधित्व करना।

टेंसर विश्लेषण में, सहसंयोजक को विपरीत इकाइयों से भिन्न करने, सदिशों के सहप्रसरण और प्रतिप्रसरण को देखने और सूचकांकों को बढ़ाने और घटाने के लिए सबस्क्रिप्ट के अतिरिक्त सुपरस्क्रिप्ट का उपयोग किया जाता है।

कंप्यूटिंग में

कई प्रोग्रामिंग लैंग्वेजेज में, सूचकांक संकेतन किसी सरणी के तत्वों को संबोधित करने का प्रकार है। इस पद्धति का उपयोग इसलिए किया जाता है क्योंकि यह असेंबली लैंग्वेज में इसे प्रारम्भ करने की विधि के सबसे निकट है, जिसमें प्रथम तत्व का एड्रेस आधार के रूप में उपयोग किया जाता है, और तत्व आकार के गुणक (सूचकांक) का उपयोग सरणी के अंदर एड्रेस करने के लिए किया जाता है।

उदाहरण के लिए, यदि पूर्णांकों की सरणी को कंप्यूटर की मेमोरी के क्षेत्र में मेमोरी सेल से प्रारंभ होती है जिसका एड्रेस 3000 (आधार एड्रेस) है, और प्रत्येक पूर्णांक चार कोशिकाओं (बाइट्स) पर अधिकार कर लेता है, तो इस सरणी के तत्व मेमोरी समिष्ट 0x3000, 0x3004, 0x3008,…, 0x3000 + 4(n − 1) पर हैं (शून्य-आधारित क्रमांकन पर ध्यान दें)। सामान्यतः, आधार एड्रेस b और तत्व आकार s के साथ किसी सरणी के ith तत्व का एड्रेस b + is होता है।

कार्यान्वयन विवरण

सी प्रोग्रामिंग लैंग्वेज में हम उपरोक्त को *(base + i) (पॉइंटर फॉर्म) या base[i] (एरे इंडेक्सिंग फॉर्म) के रूप में लिख सकते हैं, जो बिल्कुल समतुल्य है क्योंकि सी मानक एरे इंडेक्सिंग फॉर्म को पॉइंटर फॉर्म में परिवर्तन के रूप में परिभाषित करता है। संयोगवश, चूंकि सूचक जोड़ क्रमविनिमेय है, यह 3[base] जैसे अस्पष्ट अभिव्यक्तियों की अनुमति देता है जो base[3] के समान है।[2]

बहुआयामी सरणियाँ

चीजें तब और अधिक रोचक हो जाती हैं जब हम एक से अधिक सूचकांक वाले सरणियों पर विचार करते हैं, उदाहरण के लिए, द्वि-आयामी तालिका। हमारे पास तीन संभावनाएँ हैं:

  • दोनों में से सूचकांक की गणना करके द्वि-आयामी सरणी को एक-आयामी बनाएं।
  • एक-आयामी सरणी पर विचार करें जहां प्रत्येक तत्व एक-आयामी सरणी है, अर्थात सरणियों की सरणी है।
  • मूल सरणी की प्रत्येक पंक्ति के एड्रेस की सरणी को रखने के लिए अतिरिक्त स्टोरेज का उपयोग करें, और मूल सरणी की पंक्तियों को भिन्न-भिन्न एक-आयामी सरणी के रूप में संग्रहीत करें।

सी में, सभी तीन विधियों का उपयोग किया जा सकता है। जब प्रथम विधि का उपयोग किया जाता है, तो प्रोग्रामर यह निश्चित करता है कि सरणी के तत्वों को कंप्यूटर की मेमोरी में कैसे रखा जाता है, और प्रत्येक तत्व के स्थान की गणना करने के लिए सूत्र प्रदान करता है। दूसरी विधि का उपयोग तब किया जाता है जब प्रत्येक पंक्ति में तत्वों की संख्या समान होती है और प्रोग्राम लिखे जाने के समय ज्ञात होती है। प्रोग्रामर, उदाहरण के लिए, elementtype tablename[][3]; लिखकर तीन कॉलम वाले ऐरे की घोषणा करता है। इसके पश्चात tablename[first index][second index] लिखकर सरणी के विशेष तत्व को संदर्भित करता है। कंपाइलर प्रत्येक पंक्ति में व्याप्त मेमोरी सेल्स की कुल संख्या की गणना करता है, वांछित पंक्ति के एड्रेस शोध के लिए प्रथम सूचकांक का उपयोग करता है, और फिर पंक्ति में वांछित तत्व के एड्रेस शोध के लिए दूसरे सूचकांक का उपयोग करता है। जब तीसरी विधि का उपयोग किया जाता है, तो प्रोग्रामर तालिका को पॉइंटर्स की सरणी घोषित करता है, जैसे कि elementtype *tablename[]; है। जब प्रोग्रामर पश्चात में किसी विशेष तत्व tablename[first index][second index] निर्दिष्ट करता है, कंपाइलर प्रथम सूचकांक द्वारा निर्दिष्ट पंक्ति के एड्रेस को देखने के लिए निर्देश उत्पन्न करता है, और दूसरे सूचकांक द्वारा निर्दिष्ट तत्व के एड्रेस की गणना करते समय इस एड्रेस को आधार के रूप में उपयोग करता है।

void mult3x3f(float result[][3], const float A[][3], const float B[][3])
{
  int i, j, k;
  for (i = 0; i < 3; ++i) {
    for (j = 0; j < 3; ++j) {
      result[i][j] = 0;
      for (k = 0; k < 3; ++k)
        result[i][j] += A[i][k] * B[k][j];
    }
  }
}

अन्य लैंग्वेजेज में

पास्कल जैसी अन्य प्रोग्रामिंग लैंग्वेजेज में, सूचकांक 1 से प्रारंभ हो सकते हैं, इसलिए मेमोरी के ब्लॉक में अनुक्रमण को सरल रैखिक परिवर्तन द्वारा स्टार्ट-एट-1 एड्रेसिंग योजना में फिट करने के लिए परिवर्तित किया जा सकता है - इस योजना में, आधार एड्रेस b और तत्व आकार s के साथ ith तत्व का मेमोरी समिष्ट b + (i − 1)s है।

संदर्भ

  1. An introduction to Tensor Analysis: For Engineers and Applied Scientists, J.R. Tyldesley, Longman, 1975, ISBN 0-582-44355-5
  2. Programming with C++, J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, ISBN 0-07-114328-9
  • Programming with C++, J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, ISBN 0-07-114328-9
  • Tensor Calculus, D.C. Kay, Schaum's Outlines, McGraw Hill (USA), 1988, ISBN 0-07-033484-6
  • Mathematical methods for physics and engineering, K.F. Riley, M.P. Hobson, S.J. Bence, Cambridge University Press, 2010, ISBN 978-0-521-86153-3