linmeric 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +51 -0
  5. data/Rakefile +10 -0
  6. data/bin/help/Help.rb +184 -0
  7. data/bin/help/Help_inst.rb +244 -0
  8. data/bin/linguide +23 -0
  9. data/bin/linmeric +36 -70
  10. data/doc/Archive.html +352 -0
  11. data/doc/Calculator/Evaluator.html +477 -0
  12. data/doc/Calculator/Lexer.html +186 -0
  13. data/doc/Calculator/Token.html +257 -0
  14. data/doc/Calculator.html +181 -0
  15. data/doc/Dim.html +257 -0
  16. data/doc/Filename.html +246 -0
  17. data/doc/Fixnum.html +253 -0
  18. data/doc/Float.html +253 -0
  19. data/doc/Function.html +784 -0
  20. data/doc/InputError.html +102 -0
  21. data/doc/Instructions_en.txt +6 -7
  22. data/doc/Instructions_it.txt +6 -9
  23. data/doc/Integrators.html +436 -0
  24. data/doc/LU.html +435 -0
  25. data/doc/Lexer.html +261 -0
  26. data/doc/Linmeric.html +109 -0
  27. data/doc/Listener.html +605 -0
  28. data/doc/Matrix.html +1719 -0
  29. data/doc/MyArgError.html +102 -0
  30. data/doc/NilClass.html +202 -0
  31. data/doc/Numeric.html +251 -0
  32. data/doc/Parser.html +389 -0
  33. data/doc/PrintError.html +622 -0
  34. data/doc/README_md.html +142 -0
  35. data/doc/Scp.html +530 -0
  36. data/doc/Sizer.html +652 -0
  37. data/doc/String.html +540 -0
  38. data/doc/Token.html +341 -0
  39. data/doc/Tool.html +394 -0
  40. data/doc/created.rid +18 -0
  41. data/doc/css/fonts.css +167 -0
  42. data/doc/css/rdoc.css +590 -0
  43. data/doc/fonts/Lato-Light.ttf +0 -0
  44. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  45. data/doc/fonts/Lato-Regular.ttf +0 -0
  46. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  47. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  48. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  49. data/doc/images/add.png +0 -0
  50. data/doc/images/arrow_up.png +0 -0
  51. data/doc/images/brick.png +0 -0
  52. data/doc/images/brick_link.png +0 -0
  53. data/doc/images/bug.png +0 -0
  54. data/doc/images/bullet_black.png +0 -0
  55. data/doc/images/bullet_toggle_minus.png +0 -0
  56. data/doc/images/bullet_toggle_plus.png +0 -0
  57. data/doc/images/date.png +0 -0
  58. data/doc/images/delete.png +0 -0
  59. data/doc/images/find.png +0 -0
  60. data/doc/images/loadingAnimation.gif +0 -0
  61. data/doc/images/macFFBgHack.png +0 -0
  62. data/doc/images/package.png +0 -0
  63. data/doc/images/page_green.png +0 -0
  64. data/doc/images/page_white_text.png +0 -0
  65. data/doc/images/page_white_width.png +0 -0
  66. data/doc/images/plugin.png +0 -0
  67. data/doc/images/ruby.png +0 -0
  68. data/doc/images/tag_blue.png +0 -0
  69. data/doc/images/tag_green.png +0 -0
  70. data/doc/images/transparent.png +0 -0
  71. data/doc/images/wrench.png +0 -0
  72. data/doc/images/wrench_orange.png +0 -0
  73. data/doc/images/zoom.png +0 -0
  74. data/doc/index.html +190 -0
  75. data/doc/js/darkfish.js +161 -0
  76. data/doc/js/jquery.js +9404 -0
  77. data/doc/js/navigation.js +142 -0
  78. data/doc/js/navigation.js.gz +0 -0
  79. data/doc/js/search.js +109 -0
  80. data/doc/js/search_index.js +1 -0
  81. data/doc/js/search_index.js.gz +0 -0
  82. data/doc/js/searcher.js +228 -0
  83. data/doc/js/searcher.js.gz +0 -0
  84. data/doc/table_of_contents.html +834 -0
  85. data/lib/linmeric/Archive.rb +22 -1
  86. data/lib/linmeric/Calculator.rb +252 -0
  87. data/lib/linmeric/CnGal_Matrix_class.rb +130 -49
  88. data/lib/linmeric/CnGal_new_classes.rb +139 -37
  89. data/lib/linmeric/CnGal_tools.rb +23 -40
  90. data/lib/linmeric/Error_print.rb +35 -1
  91. data/lib/linmeric/Function_class.rb +70 -11
  92. data/lib/linmeric/Integrators.rb +81 -35
  93. data/lib/linmeric/LU.rb +26 -5
  94. data/lib/linmeric/Lexer.rb +19 -1
  95. data/lib/linmeric/Listener.rb +25 -5
  96. data/lib/linmeric/Parser.rb +23 -1
  97. data/lib/linmeric/Scopify.rb +52 -31
  98. data/lib/linmeric/Sizer.rb +43 -10
  99. data/lib/linmeric/Token.rb +23 -4
  100. data/lib/linmeric/version.rb +3 -0
  101. data/lib/linmeric.rb +10 -8
  102. data/lib/linmeric_bin.rb +12 -0
  103. metadata +126 -22
  104. data/doc/Instructions_en.html +0 -231
  105. data/doc/Instructions_it.html +0 -231
  106. data/doc/README_en.html +0 -177
  107. data/doc/README_en.txt +0 -30
  108. data/doc/README_it.html +0 -187
  109. data/doc/README_it.txt +0 -32
data/doc/Matrix.html ADDED
@@ -0,0 +1,1719 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class Matrix - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ </script>
12
+
13
+ <script src="./js/jquery.js"></script>
14
+ <script src="./js/darkfish.js"></script>
15
+
16
+ <link href="./css/fonts.css" rel="stylesheet">
17
+ <link href="./css/rdoc.css" rel="stylesheet">
18
+
19
+
20
+
21
+ <body id="top" role="document" class="class">
22
+ <nav role="navigation">
23
+ <div id="project-navigation">
24
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
25
+ <h2>
26
+ <a href="./index.html" rel="home">Home</a>
27
+ </h2>
28
+
29
+ <div id="table-of-contents-navigation">
30
+ <a href="./table_of_contents.html#pages">Pages</a>
31
+ <a href="./table_of_contents.html#classes">Classes</a>
32
+ <a href="./table_of_contents.html#methods">Methods</a>
33
+ </div>
34
+ </div>
35
+
36
+ <div id="search-section" role="search" class="project-section initially-hidden">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <div id="search-field-wrapper">
39
+ <input id="search-field" role="combobox" aria-label="Search"
40
+ aria-autocomplete="list" aria-controls="search-results"
41
+ type="text" name="search" placeholder="Search" spellcheck="false"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ </div>
44
+
45
+ <ul id="search-results" aria-label="Search Results"
46
+ aria-busy="false" aria-expanded="false"
47
+ aria-atomic="false" class="initially-hidden"></ul>
48
+ </form>
49
+ </div>
50
+
51
+ </div>
52
+
53
+
54
+
55
+ <div id="class-metadata">
56
+
57
+ <div id="parent-class-section" class="nav-section">
58
+ <h3>Parent</h3>
59
+
60
+
61
+ <p class="link">Object
62
+
63
+ </div>
64
+
65
+
66
+
67
+ <!-- Method Quickref -->
68
+ <div id="method-list-section" class="nav-section">
69
+ <h3>Methods</h3>
70
+
71
+ <ul class="link-list" role="directory">
72
+
73
+ <li ><a href="#method-c-from_file">::from_file</a>
74
+
75
+ <li ><a href="#method-c-identity">::identity</a>
76
+
77
+ <li ><a href="#method-c-new">::new</a>
78
+
79
+ <li ><a href="#method-i-21-3D">#!=</a>
80
+
81
+ <li ><a href="#method-i-2A">#*</a>
82
+
83
+ <li ><a href="#method-i-2A-2A">#**</a>
84
+
85
+ <li ><a href="#method-i-2B">#+</a>
86
+
87
+ <li ><a href="#method-i-2D">#-</a>
88
+
89
+ <li ><a href="#method-i-2F">#/</a>
90
+
91
+ <li ><a href="#method-i-3D-3D">#==</a>
92
+
93
+ <li ><a href="#method-i-5B-5D">#[]</a>
94
+
95
+ <li ><a href="#method-i-5B-5D-3D">#[]=</a>
96
+
97
+ <li ><a href="#method-i-can_divide-3F">#can_divide?</a>
98
+
99
+ <li ><a href="#method-i-can_multiply-3F">#can_multiply?</a>
100
+
101
+ <li ><a href="#method-i-coerce">#coerce</a>
102
+
103
+ <li ><a href="#method-i-del_rwcl">#del_rwcl</a>
104
+
105
+ <li ><a href="#method-i-export">#export</a>
106
+
107
+ <li ><a href="#method-i-getCls">#getCls</a>
108
+
109
+ <li ><a href="#method-i-getRws">#getRws</a>
110
+
111
+ <li ><a href="#method-i-is_squared-3F">#is_squared?</a>
112
+
113
+ <li ><a href="#method-i-laplace">#laplace</a>
114
+
115
+ <li ><a href="#method-i-norm">#norm</a>
116
+
117
+ <li ><a href="#method-i-similar_to-3F">#similar_to?</a>
118
+
119
+ <li ><a href="#method-i-to_file">#to_file</a>
120
+
121
+ <li ><a href="#method-i-to_s">#to_s</a>
122
+
123
+ <li ><a href="#method-i-tr">#tr</a>
124
+
125
+ <li ><a href="#method-i-update">#update</a>
126
+
127
+ </ul>
128
+ </div>
129
+
130
+ </div>
131
+ </nav>
132
+
133
+ <main role="main" aria-labelledby="class-Matrix">
134
+ <h1 id="class-Matrix" class="class">
135
+ class Matrix
136
+ </h1>
137
+
138
+ <section class="description">
139
+
140
+ <p>This class provides a simple representation of a matrix with the main
141
+ features, operations and some useful method to manipulate it or to make
142
+ its creation easier.</p>
143
+ <dl class="rdoc-list note-list"><dt>Author
144
+ <dd>
145
+ <p>Massimiliano Dal Mas (<a
146
+ href="mailto:max.codeware@gmail.com">max.codeware@gmail.com</a>)</p>
147
+ </dd><dt>License
148
+ <dd>
149
+ <p>Distributed under MIT license</p>
150
+ </dd></dl>
151
+
152
+ </section>
153
+
154
+
155
+
156
+
157
+ <section id="5Buntitled-5D" class="documentation-section">
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
168
+ <header>
169
+ <h3>Public Class Methods</h3>
170
+ </header>
171
+
172
+
173
+ <div id="method-c-from_file" class="method-detail ">
174
+
175
+ <div class="method-heading">
176
+ <span class="method-name">from_file</span><span
177
+ class="method-args">(filename = "")</span>
178
+
179
+ <span class="method-click-advice">click to toggle source</span>
180
+
181
+ </div>
182
+
183
+
184
+ <div class="method-description">
185
+
186
+ <p>Creates a new matrix loading it from a .csv file</p>
187
+ <ul><li>
188
+ <p>*<strong>argument</strong>*: `String` of the file path</p>
189
+ </li><li>
190
+ <p>*<strong>returns</strong>*: new matrix object</p>
191
+ </li></ul>
192
+
193
+
194
+
195
+
196
+ <div class="method-source-code" id="from_file-source">
197
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 76</span>
198
+ <span class="ruby-keyword">def</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">from_file</span>(<span class="ruby-identifier">filename</span> = <span class="ruby-string">&quot;&quot;</span>)
199
+ <span class="ruby-ivar">@mx</span> = []
200
+ <span class="ruby-ivar">@MyCls</span> = <span class="ruby-value">0</span>
201
+ <span class="ruby-ivar">@MyRws</span> = <span class="ruby-value">0</span>
202
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">filename</span>) <span class="ruby-keyword">or</span> <span class="ruby-identifier">filename</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">then</span>
203
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: Invalid directory or filename&quot;</span>
204
+ <span class="ruby-keyword">else</span>
205
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>, <span class="ruby-string">&quot;r&quot;</span>).<span class="ruby-identifier">each_line</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ln</span><span class="ruby-operator">|</span>
206
+ <span class="ruby-ivar">@MyRws</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
207
+ <span class="ruby-identifier">ln</span> = <span class="ruby-identifier">ln</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&#39;,&#39;</span>)
208
+ <span class="ruby-identifier">ln</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">el</span><span class="ruby-operator">|</span>
209
+ <span class="ruby-identifier">cv</span> = <span class="ruby-constant">Calculator</span>.<span class="ruby-identifier">solve</span>(<span class="ruby-identifier">el</span>)
210
+ <span class="ruby-identifier">err</span> = <span class="ruby-identifier">el</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">cv</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
211
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InputError</span>, <span class="ruby-node">&quot; Argument Error: Invalid operation &#39;#{err}&#39; found in matrix rows&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">cv</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span>
212
+ <span class="ruby-identifier">el</span> = <span class="ruby-identifier">cv</span>
213
+ <span class="ruby-keyword">end</span>
214
+ <span class="ruby-ivar">@mx</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">ln</span>
215
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@mx</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">ln</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-keyword">then</span>
216
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: Irregular matrix rows&quot;</span>
217
+ <span class="ruby-keyword">end</span>
218
+ <span class="ruby-ivar">@MyCls</span> = <span class="ruby-identifier">ln</span>.<span class="ruby-identifier">length</span>
219
+ <span class="ruby-keyword">end</span>
220
+ <span class="ruby-keyword">end</span>
221
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">mat</span> = <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span><span class="ruby-operator">+</span><span class="ruby-identifier">j</span>]}
222
+ <span class="ruby-keyword">end</span></pre>
223
+ </div>
224
+
225
+ </div>
226
+
227
+
228
+
229
+
230
+ </div>
231
+
232
+
233
+ <div id="method-c-identity" class="method-detail ">
234
+
235
+ <div class="method-heading">
236
+ <span class="method-name">identity</span><span
237
+ class="method-args">(n)</span>
238
+
239
+ <span class="method-click-advice">click to toggle source</span>
240
+
241
+ </div>
242
+
243
+
244
+ <div class="method-description">
245
+
246
+ <p>Builds an identity matrix</p>
247
+ <ul><li>
248
+ <p>*<strong>argument</strong>*: `Fixnum` of the matrix dimension</p>
249
+ </li><li>
250
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
251
+ </li></ul>
252
+
253
+
254
+
255
+
256
+ <div class="method-source-code" id="identity-source">
257
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 398</span>
258
+ <span class="ruby-keyword">def</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">identity</span>(<span class="ruby-identifier">n</span>)
259
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot;Argument Error: expecting Fixnum value, but #{n.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>
260
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">n</span>,<span class="ruby-identifier">n</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">j</span>) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> }
261
+ <span class="ruby-keyword">end</span></pre>
262
+ </div>
263
+
264
+ </div>
265
+
266
+
267
+
268
+
269
+ </div>
270
+
271
+
272
+ <div id="method-c-new" class="method-detail ">
273
+
274
+ <div class="method-heading">
275
+ <span class="method-name">new</span><span
276
+ class="method-args">(rws = 0,cls = 0) { |i,j| ... }</span>
277
+
278
+ <span class="method-click-advice">click to toggle source</span>
279
+
280
+ </div>
281
+
282
+
283
+ <div class="method-description">
284
+
285
+ <p>Initialization of new matrix in two different ways (chosen by the user):</p>
286
+ <ul><li>
287
+ <p>a block can be given to create a matrix according to a function</p>
288
+ </li><li>
289
+ <p>the user must insert each value by hand (if block is not given)</p>
290
+ </li><li>
291
+ <p>*<strong>requires</strong>*: `#solve` of <a
292
+ href="Calculator.html">Calculator</a></p>
293
+ </li><li>
294
+ <p>*<strong>argument</strong>*: number of rows (Fixnum)</p>
295
+ </li><li>
296
+ <p>*<strong>argument</strong>*: number of columns (Fixnum)</p>
297
+ </li><li>
298
+ <p>*<strong>block</strong>*: yields a function with two arguments (optional)</p>
299
+ </li></ul>
300
+
301
+
302
+
303
+
304
+ <div class="method-source-code" id="new-source">
305
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 29</span>
306
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">rws</span> = <span class="ruby-value">0</span>,<span class="ruby-identifier">cls</span> = <span class="ruby-value">0</span>)
307
+ <span class="ruby-identifier">listener</span> = <span class="ruby-constant">Listener</span>.<span class="ruby-identifier">new</span>
308
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">rws</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">cls</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">rws</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Float</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">cls</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Float</span> <span class="ruby-keyword">then</span>
309
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>,<span class="ruby-node">&quot; Argument Error: invalid dimension #{rws}x#{cls} for Matrix object&quot;</span>
310
+ <span class="ruby-keyword">elsif</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">rws</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>) <span class="ruby-keyword">or</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">cls</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>) <span class="ruby-keyword">then</span>
311
+ <span class="ruby-identifier">e</span> = <span class="ruby-identifier">rws</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>
312
+ <span class="ruby-identifier">e</span> = <span class="ruby-identifier">cls</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">cls</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>
313
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>,<span class="ruby-node">&quot; Argument Error: colums and rows in Integer format expected but #{e.class} found&quot;</span>
314
+ <span class="ruby-keyword">else</span>
315
+ <span class="ruby-ivar">@MyRws</span> = <span class="ruby-identifier">rws</span>; <span class="ruby-ivar">@MyCls</span> = <span class="ruby-identifier">cls</span>
316
+ <span class="ruby-ivar">@mx</span>=[]
317
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span> <span class="ruby-keyword">then</span>
318
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span>
319
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">j</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyCls</span>
320
+ <span class="ruby-identifier">value</span> = <span class="ruby-keyword">yield</span>(<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
321
+ <span class="ruby-ivar">@mx</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">value</span>
322
+ <span class="ruby-keyword">end</span>
323
+ <span class="ruby-keyword">end</span>
324
+ <span class="ruby-keyword">else</span>
325
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Insert the line values (separated by space) and press return to go on&quot;</span>
326
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">rws</span>
327
+ <span class="ruby-identifier">listener</span>.<span class="ruby-identifier">reset</span>
328
+ <span class="ruby-identifier">cl</span> = <span class="ruby-identifier">listener</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">split</span>
329
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot; #{cls} element(s) expected but #{cl.size} found. Retry&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">cl</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">==</span><span class="ruby-identifier">cls</span>
330
+ <span class="ruby-identifier">cl</span>.<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
331
+ <span class="ruby-identifier">cv</span> = <span class="ruby-constant">Calculator</span>.<span class="ruby-identifier">solve</span>(<span class="ruby-identifier">e</span>)
332
+ <span class="ruby-identifier">err</span> = <span class="ruby-identifier">e</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">cv</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
333
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Invalid operation &#39;#{err}&#39; found in matrix rows&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">cv</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span>
334
+ <span class="ruby-identifier">e</span> = <span class="ruby-identifier">cv</span>
335
+ }
336
+ <span class="ruby-ivar">@mx</span> <span class="ruby-operator">+=</span><span class="ruby-identifier">cl</span>
337
+ <span class="ruby-keyword">end</span>
338
+ <span class="ruby-keyword">end</span>
339
+ <span class="ruby-keyword">end</span>
340
+
341
+
342
+ <span class="ruby-keyword">rescue</span> <span class="ruby-constant">ArgumentError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">message</span>
343
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">message</span>
344
+ <span class="ruby-ivar">@mx</span>=[]
345
+ <span class="ruby-keyword">retry</span>
346
+
347
+ <span class="ruby-keyword">end</span></pre>
348
+ </div>
349
+
350
+ </div>
351
+
352
+
353
+
354
+
355
+ </div>
356
+
357
+
358
+ </section>
359
+
360
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
361
+ <header>
362
+ <h3>Public Instance Methods</h3>
363
+ </header>
364
+
365
+
366
+ <div id="method-i-21-3D" class="method-detail ">
367
+
368
+ <div class="method-heading">
369
+ <span class="method-name">!=</span><span
370
+ class="method-args">(obj)</span>
371
+
372
+ <span class="method-click-advice">click to toggle source</span>
373
+
374
+ </div>
375
+
376
+
377
+ <div class="method-description">
378
+
379
+ <p>Checks if this matrix is different from another object</p>
380
+ <ul><li>
381
+ <p>*<strong>argument</strong>*: `Object` to be compared with</p>
382
+ </li><li>
383
+ <p>*<strong>returns</strong>*: <code>true</code> if the matrix and the object
384
+ are different; <code>false</code> else</p>
385
+ </li></ul>
386
+
387
+
388
+
389
+
390
+ <div class="method-source-code" id="21-3D-source">
391
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 230</span>
392
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">!=</span>(<span class="ruby-identifier">obj</span>)
393
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
394
+ <span class="ruby-keyword">self</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span> <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>)
395
+ <span class="ruby-keyword">else</span>
396
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>
397
+ <span class="ruby-keyword">end</span>
398
+ <span class="ruby-keyword">end</span></pre>
399
+ </div>
400
+
401
+ </div>
402
+
403
+
404
+
405
+
406
+ </div>
407
+
408
+
409
+ <div id="method-i-2A" class="method-detail ">
410
+
411
+ <div class="method-heading">
412
+ <span class="method-name">*</span><span
413
+ class="method-args">(ob)</span>
414
+
415
+ <span class="method-click-advice">click to toggle source</span>
416
+
417
+ </div>
418
+
419
+
420
+ <div class="method-description">
421
+
422
+ <p>Multiplies the current matrix to another</p>
423
+ <ul><li>
424
+ <p>*<strong>argument</strong>*: `Matrix` to be multiplied to</p>
425
+ </li><li>
426
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
427
+ </li></ul>
428
+
429
+
430
+
431
+
432
+ <div class="method-source-code" id="2A-source">
433
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 301</span>
434
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">*</span>(<span class="ruby-identifier">ob</span>)
435
+ <span class="ruby-keyword">case</span>
436
+ <span class="ruby-keyword">when</span> (<span class="ruby-identifier">ob</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>)
437
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">ob</span>}
438
+ <span class="ruby-keyword">when</span> (<span class="ruby-identifier">ob</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span>)
439
+ <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">can_multiply?</span> <span class="ruby-identifier">ob</span> <span class="ruby-keyword">then</span>
440
+ <span class="ruby-identifier">temp</span> = []
441
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span>
442
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">j</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">ob</span>.<span class="ruby-identifier">getCls</span>()
443
+ <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>] = <span class="ruby-value">0</span>
444
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">k</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyCls</span>
445
+ <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">k</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">ob</span>[<span class="ruby-identifier">k</span>,<span class="ruby-identifier">j</span>]
446
+ <span class="ruby-keyword">end</span>
447
+ <span class="ruby-keyword">end</span>
448
+ <span class="ruby-keyword">end</span>
449
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-identifier">ob</span>.<span class="ruby-identifier">getCls</span>()){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
450
+ <span class="ruby-keyword">else</span>
451
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Cannot multiply #{@MyRws}x#{@MyCls} Matrix with #{ob.getRws}x#{ob.getCls}&quot;</span>
452
+ <span class="ruby-keyword">end</span>
453
+ <span class="ruby-keyword">else</span>
454
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Cannot multiply Matrix with #{ob.class}&quot;</span>
455
+ <span class="ruby-keyword">end</span>
456
+ <span class="ruby-keyword">end</span></pre>
457
+ </div>
458
+
459
+ </div>
460
+
461
+
462
+
463
+
464
+ </div>
465
+
466
+
467
+ <div id="method-i-2A-2A" class="method-detail ">
468
+
469
+ <div class="method-heading">
470
+ <span class="method-name">**</span><span
471
+ class="method-args">(obj)</span>
472
+
473
+ <span class="method-click-advice">click to toggle source</span>
474
+
475
+ </div>
476
+
477
+
478
+ <div class="method-description">
479
+
480
+ <p>Elevates each element of the current matrix to a `Numeric` exponent</p>
481
+ <ul><li>
482
+ <p>*<strong>argument</strong>*: `Numeric`</p>
483
+ </li><li>
484
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
485
+ </li></ul>
486
+
487
+
488
+
489
+
490
+ <div class="method-source-code" id="2A-2A-source">
491
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 346</span>
492
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">**</span>(<span class="ruby-identifier">obj</span>)
493
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">**</span> <span class="ruby-identifier">obj</span>} <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
494
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Invalid power Matrix-#{obj.class} &quot;</span>
495
+ <span class="ruby-keyword">end</span></pre>
496
+ </div>
497
+
498
+ </div>
499
+
500
+
501
+
502
+
503
+ </div>
504
+
505
+
506
+ <div id="method-i-2B" class="method-detail ">
507
+
508
+ <div class="method-heading">
509
+ <span class="method-name">+</span><span
510
+ class="method-args">(m)</span>
511
+
512
+ <span class="method-click-advice">click to toggle source</span>
513
+
514
+ </div>
515
+
516
+
517
+ <div class="method-description">
518
+
519
+ <p>Sums the current matrix to another</p>
520
+ <ul><li>
521
+ <p>*<strong>argument</strong>*: `Matrix` to be summed to</p>
522
+ </li><li>
523
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
524
+ </li></ul>
525
+
526
+
527
+
528
+
529
+ <div class="method-source-code" id="2B-source">
530
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 255</span>
531
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">+</span>(<span class="ruby-identifier">m</span>)
532
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
533
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">similar_to?</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">then</span>
534
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>, <span class="ruby-ivar">@MyCls</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">m</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>]}
535
+ <span class="ruby-keyword">else</span>
536
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: invalid matrix for + operation&quot;</span>
537
+ <span class="ruby-keyword">end</span>
538
+ <span class="ruby-keyword">else</span>
539
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: can&#39;t sum #{m.class} to Matrix&quot;</span>
540
+ <span class="ruby-keyword">end</span>
541
+ <span class="ruby-keyword">end</span></pre>
542
+ </div>
543
+
544
+ </div>
545
+
546
+
547
+
548
+
549
+ </div>
550
+
551
+
552
+ <div id="method-i-2D" class="method-detail ">
553
+
554
+ <div class="method-heading">
555
+ <span class="method-name">-</span><span
556
+ class="method-args">(m)</span>
557
+
558
+ <span class="method-click-advice">click to toggle source</span>
559
+
560
+ </div>
561
+
562
+
563
+ <div class="method-description">
564
+
565
+ <p>Subtracts the current matrix to another</p>
566
+ <ul><li>
567
+ <p>*<strong>argument</strong>*: `Matrix` to be subtracted to</p>
568
+ </li><li>
569
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
570
+ </li></ul>
571
+
572
+
573
+
574
+
575
+ <div class="method-source-code" id="2D-source">
576
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 271</span>
577
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">-</span>(<span class="ruby-identifier">m</span>)
578
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
579
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">similar_to?</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">then</span>
580
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>, <span class="ruby-ivar">@MyCls</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">m</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>]}
581
+ <span class="ruby-keyword">else</span>
582
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: invalid matrix for - operation&quot;</span>
583
+ <span class="ruby-keyword">end</span>
584
+ <span class="ruby-keyword">else</span>
585
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: can&#39;t subtact #{m.class} to Matrix&quot;</span>
586
+ <span class="ruby-keyword">end</span>
587
+ <span class="ruby-keyword">end</span></pre>
588
+ </div>
589
+
590
+ </div>
591
+
592
+
593
+
594
+
595
+ </div>
596
+
597
+
598
+ <div id="method-i-2F" class="method-detail ">
599
+
600
+ <div class="method-heading">
601
+ <span class="method-name">/</span><span
602
+ class="method-args">(obj)</span>
603
+
604
+ <span class="method-click-advice">click to toggle source</span>
605
+
606
+ </div>
607
+
608
+
609
+ <div class="method-description">
610
+
611
+ <p>Divides each element of the current matrix to a `Numeric` value</p>
612
+ <ul><li>
613
+ <p>*<strong>argument</strong>*: `Numeric`</p>
614
+ </li><li>
615
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
616
+ </li></ul>
617
+
618
+
619
+
620
+
621
+ <div class="method-source-code" id="2F-source">
622
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 337</span>
623
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">/</span>(<span class="ruby-identifier">obj</span>)
624
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">/</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">to_f</span>} <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
625
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Invalid division between Matrix and #{obj.class} &quot;</span>
626
+ <span class="ruby-keyword">end</span></pre>
627
+ </div>
628
+
629
+ </div>
630
+
631
+
632
+
633
+
634
+ </div>
635
+
636
+
637
+ <div id="method-i-3D-3D" class="method-detail ">
638
+
639
+ <div class="method-heading">
640
+ <span class="method-name">==</span><span
641
+ class="method-args">(obj)</span>
642
+
643
+ <span class="method-click-advice">click to toggle source</span>
644
+
645
+ </div>
646
+
647
+
648
+ <div class="method-description">
649
+
650
+ <p>Compares the current matrix with another object</p>
651
+ <ul><li>
652
+ <p>*<strong>argument</strong>*: `Object` to be compared with</p>
653
+ </li><li>
654
+ <p>*<strong>returns</strong>*: <code>true</code> if two equal matrix are
655
+ compered; <code>false</code> else</p>
656
+ </li></ul>
657
+
658
+
659
+
660
+
661
+ <div class="method-source-code" id="3D-3D-source">
662
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 217</span>
663
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">==</span>(<span class="ruby-identifier">obj</span>)
664
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
665
+ <span class="ruby-keyword">if</span> (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getRws</span> ) <span class="ruby-keyword">then</span>
666
+ (<span class="ruby-ivar">@mx</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">export</span>) <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
667
+ <span class="ruby-keyword">end</span>
668
+ <span class="ruby-keyword">end</span>
669
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
670
+ <span class="ruby-keyword">end</span></pre>
671
+ </div>
672
+
673
+ </div>
674
+
675
+
676
+
677
+
678
+ </div>
679
+
680
+
681
+ <div id="method-i-5B-5D" class="method-detail ">
682
+
683
+ <div class="method-heading">
684
+ <span class="method-name">[]</span><span
685
+ class="method-args">(x,y)</span>
686
+
687
+ <span class="method-click-advice">click to toggle source</span>
688
+
689
+ </div>
690
+
691
+
692
+ <div class="method-description">
693
+
694
+ <p>Gives access to each component of a matrix. It accepts two kinds of
695
+ arguments: `Fixnum` or `Range` to get a specific component or a collection
696
+ of components (eg. a whole row)</p>
697
+ <ul><li>
698
+ <p>*<strong>argument</strong>*: `Fixnum` or `Range` of row</p>
699
+ </li><li>
700
+ <p>*<strong>argument</strong>*: `Fixnum` or `Range` of column</p>
701
+ </li><li>
702
+ <p>*<strong>returns</strong>*: `Numeric` if an only component has been
703
+ required; `Matrix` else</p>
704
+ </li></ul>
705
+
706
+
707
+
708
+
709
+ <div class="method-source-code" id="5B-5D-source">
710
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 176</span>
711
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">x</span>,<span class="ruby-identifier">y</span>)
712
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span> <span class="ruby-keyword">then</span>
713
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">x</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">y</span>]
714
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
715
+ <span class="ruby-identifier">nm</span> = []
716
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
717
+ <span class="ruby-identifier">nm</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">y</span>]
718
+ <span class="ruby-keyword">end</span>
719
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">count</span>,<span class="ruby-value">1</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">nm</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
720
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span>
721
+ <span class="ruby-identifier">nm</span> = []
722
+ <span class="ruby-identifier">y</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
723
+ <span class="ruby-identifier">nm</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">x</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]
724
+ <span class="ruby-keyword">end</span>
725
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">1</span>,<span class="ruby-identifier">y</span>.<span class="ruby-identifier">count</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">nm</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
726
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span>
727
+ <span class="ruby-identifier">nm</span> = []
728
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
729
+ <span class="ruby-identifier">y</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
730
+ <span class="ruby-identifier">nm</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]
731
+ <span class="ruby-keyword">end</span>
732
+ <span class="ruby-keyword">end</span>
733
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">count</span>,<span class="ruby-identifier">y</span>.<span class="ruby-identifier">count</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">nm</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-identifier">y</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
734
+ <span class="ruby-keyword">end</span>
735
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
736
+ <span class="ruby-keyword">end</span></pre>
737
+ </div>
738
+
739
+ </div>
740
+
741
+
742
+
743
+
744
+ </div>
745
+
746
+
747
+ <div id="method-i-5B-5D-3D" class="method-detail ">
748
+
749
+ <div class="method-heading">
750
+ <span class="method-name">[]=</span><span
751
+ class="method-args">(i,j,val)</span>
752
+
753
+ <span class="method-click-advice">click to toggle source</span>
754
+
755
+ </div>
756
+
757
+
758
+ <div class="method-description">
759
+
760
+ <p>Allows direct overwriting of a component</p>
761
+ <ul><li>
762
+ <p>*<strong>argument</strong>*: `Fixnum` of row number</p>
763
+ </li><li>
764
+ <p>*<strong>argument</strong>*: `Fixnum` of column number</p>
765
+ </li><li>
766
+ <p>*<strong>argument</strong>*: `Numeric` to overwrite the component value</p>
767
+ </li></ul>
768
+
769
+
770
+
771
+
772
+ <div class="method-source-code" id="5B-5D-3D-source">
773
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 208</span>
774
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>,<span class="ruby-identifier">val</span>)
775
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot; Argument Error: Numeric value expected but #{val.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
776
+ <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>] = <span class="ruby-identifier">val</span>
777
+ <span class="ruby-keyword">end</span></pre>
778
+ </div>
779
+
780
+ </div>
781
+
782
+
783
+
784
+
785
+ </div>
786
+
787
+
788
+ <div id="method-i-can_divide-3F" class="method-detail ">
789
+
790
+ <div class="method-heading">
791
+ <span class="method-name">can_divide?</span><span
792
+ class="method-args">(obj)</span>
793
+
794
+ <span class="method-click-advice">click to toggle source</span>
795
+
796
+ </div>
797
+
798
+
799
+ <div class="method-description">
800
+
801
+ <p>Checks if the given object can divide the current matrix</p>
802
+ <ul><li>
803
+ <p>*<strong>argument</strong>*: `Object`</p>
804
+ </li><li>
805
+ <p>*<strong>returns</strong>*: <code>true</code> if `obj` is a <a
806
+ href="Numeric.html">Numeric</a>; <code>false</code> else</p>
807
+ </li></ul>
808
+
809
+
810
+
811
+
812
+ <div class="method-source-code" id="can_divide-3F-source">
813
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 329</span>
814
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">can_divide?</span>(<span class="ruby-identifier">obj</span>)
815
+ <span class="ruby-keyword">return</span> (<span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>)
816
+ <span class="ruby-keyword">end</span></pre>
817
+ </div>
818
+
819
+ </div>
820
+
821
+
822
+
823
+
824
+ </div>
825
+
826
+
827
+ <div id="method-i-can_multiply-3F" class="method-detail ">
828
+
829
+ <div class="method-heading">
830
+ <span class="method-name">can_multiply?</span><span
831
+ class="method-args">(obj)</span>
832
+
833
+ <span class="method-click-advice">click to toggle source</span>
834
+
835
+ </div>
836
+
837
+
838
+ <div class="method-description">
839
+
840
+ <p>Checks if the given object can be multiplied to the matrix</p>
841
+ <ul><li>
842
+ <p>*<strong>argument</strong>*: `Object`</p>
843
+ </li><li>
844
+ <p>*<strong>returns</strong>*: <code>true</code>+ if `obj` is a `Numeric` or a
845
+ good `Matrix` for &#39;*&#39; operation;</p>
846
+ </li></ul>
847
+
848
+ <p><code>false</code> else</p>
849
+
850
+
851
+
852
+
853
+ <div class="method-source-code" id="can_multiply-3F-source">
854
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 288</span>
855
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">can_multiply?</span>(<span class="ruby-identifier">obj</span>)
856
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
857
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getRws</span>) <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
858
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
859
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>
860
+ <span class="ruby-keyword">end</span>
861
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
862
+ <span class="ruby-keyword">end</span></pre>
863
+ </div>
864
+
865
+ </div>
866
+
867
+
868
+
869
+
870
+ </div>
871
+
872
+
873
+ <div id="method-i-coerce" class="method-detail ">
874
+
875
+ <div class="method-heading">
876
+ <span class="method-name">coerce</span><span
877
+ class="method-args">(val)</span>
878
+
879
+ <span class="method-click-advice">click to toggle source</span>
880
+
881
+ </div>
882
+
883
+
884
+ <div class="method-description">
885
+
886
+
887
+
888
+
889
+
890
+
891
+ <div class="method-source-code" id="coerce-source">
892
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 403</span>
893
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">coerce</span>(<span class="ruby-identifier">val</span>)
894
+ <span class="ruby-keyword">return</span> [<span class="ruby-keyword">self</span>, <span class="ruby-identifier">val</span>]
895
+ <span class="ruby-keyword">end</span></pre>
896
+ </div>
897
+
898
+ </div>
899
+
900
+
901
+
902
+
903
+ </div>
904
+
905
+
906
+ <div id="method-i-del_rwcl" class="method-detail ">
907
+
908
+ <div class="method-heading">
909
+ <span class="method-name">del_rwcl</span><span
910
+ class="method-args">(mx,rw,cl)</span>
911
+
912
+ <span class="method-click-advice">click to toggle source</span>
913
+
914
+ </div>
915
+
916
+
917
+ <div class="method-description">
918
+
919
+ <p>Private method to delete rows and columns from a matrix</p>
920
+ <ul><li>
921
+ <p>*<strong>argument</strong>*: `Matrix`</p>
922
+ </li><li>
923
+ <p>*<strong>argument</strong>*: row number (`Fixnum`)</p>
924
+ </li><li>
925
+ <p>*<strong>argument</strong>*: column number (`Fixnum`)</p>
926
+ </li><li>
927
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
928
+ </li></ul>
929
+
930
+
931
+
932
+
933
+ <div class="method-source-code" id="del_rwcl-source">
934
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 415</span>
935
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">del_rwcl</span>(<span class="ruby-identifier">mx</span>,<span class="ruby-identifier">rw</span>,<span class="ruby-identifier">cl</span>)
936
+ [<span class="ruby-identifier">rw</span>,<span class="ruby-identifier">cl</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
937
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>,<span class="ruby-node">&quot;Argument Error: row and column in Fixnum format expected, but #{arg.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>
938
+ <span class="ruby-keyword">end</span>
939
+ <span class="ruby-identifier">rd</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">export</span>.<span class="ruby-identifier">clone</span>
940
+ <span class="ruby-identifier">cols</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">getCls</span>
941
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">cols</span>
942
+ <span class="ruby-identifier">rd</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-identifier">cols</span><span class="ruby-operator">+</span><span class="ruby-identifier">rw</span>] = <span class="ruby-keyword">nil</span>
943
+ <span class="ruby-identifier">rd</span>[<span class="ruby-identifier">cl</span><span class="ruby-operator">*</span>(<span class="ruby-identifier">cols</span>)<span class="ruby-operator">+</span><span class="ruby-identifier">i</span>] = <span class="ruby-keyword">nil</span>
944
+ <span class="ruby-keyword">end</span>
945
+ <span class="ruby-identifier">rd</span> = <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">compact</span>
946
+ <span class="ruby-identifier">rw</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
947
+ <span class="ruby-identifier">cl</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
948
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rw</span>,<span class="ruby-identifier">cl</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">rd</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-identifier">cl</span><span class="ruby-operator">+</span><span class="ruby-identifier">j</span>]}
949
+ <span class="ruby-keyword">end</span></pre>
950
+ </div>
951
+
952
+ </div>
953
+
954
+
955
+
956
+
957
+ </div>
958
+
959
+
960
+ <div id="method-i-export" class="method-detail ">
961
+
962
+ <div class="method-heading">
963
+ <span class="method-name">export</span><span
964
+ class="method-args">()</span>
965
+
966
+ <span class="method-click-advice">click to toggle source</span>
967
+
968
+ </div>
969
+
970
+
971
+ <div class="method-description">
972
+
973
+ <ul><li>
974
+ <p>*<strong>returns</strong>*: `Array` on which the matrix is saved</p>
975
+ </li></ul>
976
+
977
+
978
+
979
+
980
+ <div class="method-source-code" id="export-source">
981
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 146</span>
982
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">export</span>()
983
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@mx</span>
984
+ <span class="ruby-keyword">end</span></pre>
985
+ </div>
986
+
987
+ </div>
988
+
989
+
990
+
991
+
992
+ </div>
993
+
994
+
995
+ <div id="method-i-getCls" class="method-detail ">
996
+
997
+ <div class="method-heading">
998
+ <span class="method-name">getCls</span><span
999
+ class="method-args">()</span>
1000
+
1001
+ <span class="method-click-advice">click to toggle source</span>
1002
+
1003
+ </div>
1004
+
1005
+
1006
+ <div class="method-description">
1007
+
1008
+ <ul><li>
1009
+ <p>*<strong>returns</strong>*: `Fixnum` of number of columns</p>
1010
+ </li></ul>
1011
+
1012
+
1013
+
1014
+
1015
+ <div class="method-source-code" id="getCls-source">
1016
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 136</span>
1017
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">getCls</span>()
1018
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@MyCls</span>
1019
+ <span class="ruby-keyword">end</span></pre>
1020
+ </div>
1021
+
1022
+ </div>
1023
+
1024
+
1025
+
1026
+
1027
+ </div>
1028
+
1029
+
1030
+ <div id="method-i-getRws" class="method-detail ">
1031
+
1032
+ <div class="method-heading">
1033
+ <span class="method-name">getRws</span><span
1034
+ class="method-args">()</span>
1035
+
1036
+ <span class="method-click-advice">click to toggle source</span>
1037
+
1038
+ </div>
1039
+
1040
+
1041
+ <div class="method-description">
1042
+
1043
+ <ul><li>
1044
+ <p>*<strong>returns</strong>*: `Fixnum` of number of rows</p>
1045
+ </li></ul>
1046
+
1047
+
1048
+
1049
+
1050
+ <div class="method-source-code" id="getRws-source">
1051
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 141</span>
1052
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">getRws</span>()
1053
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@MyRws</span>
1054
+ <span class="ruby-keyword">end</span></pre>
1055
+ </div>
1056
+
1057
+ </div>
1058
+
1059
+
1060
+
1061
+
1062
+ </div>
1063
+
1064
+
1065
+ <div id="method-i-is_squared-3F" class="method-detail ">
1066
+
1067
+ <div class="method-heading">
1068
+ <span class="method-name">is_squared?</span><span
1069
+ class="method-args">()</span>
1070
+
1071
+ <span class="method-click-advice">click to toggle source</span>
1072
+
1073
+ </div>
1074
+
1075
+
1076
+ <div class="method-description">
1077
+
1078
+ <p>Checks if the matrix is squared</p>
1079
+ <ul><li>
1080
+ <p>*<strong>returns</strong>*: <code>true</code> if the matrix is squared;
1081
+ <code>false</code> else</p>
1082
+ </li></ul>
1083
+
1084
+
1085
+
1086
+
1087
+ <div class="method-source-code" id="is_squared-3F-source">
1088
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 373</span>
1089
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">is_squared?</span>()
1090
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
1091
+ <span class="ruby-keyword">end</span></pre>
1092
+ </div>
1093
+
1094
+ </div>
1095
+
1096
+
1097
+
1098
+
1099
+ </div>
1100
+
1101
+
1102
+ <div id="method-i-laplace" class="method-detail ">
1103
+
1104
+ <div class="method-heading">
1105
+ <span class="method-name">laplace</span><span
1106
+ class="method-args">()</span>
1107
+
1108
+ <span class="method-click-advice">click to toggle source</span>
1109
+
1110
+ </div>
1111
+
1112
+
1113
+ <div class="method-description">
1114
+
1115
+ <p>Calulates the determinant of the matrix using the Laplace&#39;s algorithm</p>
1116
+ <ul><li>
1117
+ <p>*<strong>returns</strong>*: `Numeric` value</p>
1118
+ </li></ul>
1119
+
1120
+
1121
+
1122
+
1123
+ <div class="method-source-code" id="laplace-source">
1124
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 380</span>
1125
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">laplace</span>
1126
+ <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">is_squared?</span> <span class="ruby-keyword">then</span>
1127
+ <span class="ruby-keyword">return</span> (<span class="ruby-keyword">self</span>[<span class="ruby-value">0</span>,<span class="ruby-value">0</span>] <span class="ruby-operator">*</span> <span class="ruby-keyword">self</span>[<span class="ruby-value">1</span>,<span class="ruby-value">1</span>]) <span class="ruby-operator">-</span> (<span class="ruby-keyword">self</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>] <span class="ruby-operator">*</span> <span class="ruby-keyword">self</span>[<span class="ruby-value">1</span>,<span class="ruby-value">0</span>]) <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
1128
+ <span class="ruby-identifier">res</span> = <span class="ruby-value">0</span>
1129
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span>
1130
+ <span class="ruby-identifier">res</span> <span class="ruby-operator">+=</span> (((<span class="ruby-value">-1</span>) <span class="ruby-operator">**</span> <span class="ruby-identifier">i</span>) <span class="ruby-operator">*</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-value">0</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">del_rwcl</span>(<span class="ruby-keyword">self</span>,<span class="ruby-identifier">i</span>,<span class="ruby-value">0</span>).<span class="ruby-identifier">laplace</span>) <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1131
+ <span class="ruby-keyword">end</span>
1132
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">res</span>
1133
+ <span class="ruby-keyword">else</span>
1134
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&#39; Argument Error: Cannot calculate determinat on a non-squared matrix&#39;</span>
1135
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
1136
+ <span class="ruby-keyword">end</span>
1137
+ <span class="ruby-keyword">end</span></pre>
1138
+ </div>
1139
+
1140
+ </div>
1141
+
1142
+
1143
+
1144
+
1145
+ </div>
1146
+
1147
+
1148
+ <div id="method-i-norm" class="method-detail ">
1149
+
1150
+ <div class="method-heading">
1151
+ <span class="method-name">norm</span><span
1152
+ class="method-args">()</span>
1153
+
1154
+ <span class="method-click-advice">click to toggle source</span>
1155
+
1156
+ </div>
1157
+
1158
+
1159
+ <div class="method-description">
1160
+
1161
+ <p>Calculates the norm of a matrix, defined as <a
1162
+ href="i,j">sqrt(sum(m</a>**2))</p>
1163
+ <ul><li>
1164
+ <p>*<strong>returns</strong>*: `Float` value</p>
1165
+ </li></ul>
1166
+
1167
+
1168
+
1169
+
1170
+ <div class="method-source-code" id="norm-source">
1171
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 362</span>
1172
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">norm</span>()
1173
+ <span class="ruby-identifier">sum</span>=<span class="ruby-value">0</span>
1174
+ <span class="ruby-ivar">@mx</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
1175
+ <span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span><span class="ruby-identifier">e</span><span class="ruby-operator">**</span><span class="ruby-value">2</span>
1176
+ <span class="ruby-keyword">end</span>
1177
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">sum</span>)
1178
+ <span class="ruby-keyword">end</span></pre>
1179
+ </div>
1180
+
1181
+ </div>
1182
+
1183
+
1184
+
1185
+
1186
+ </div>
1187
+
1188
+
1189
+ <div id="method-i-similar_to-3F" class="method-detail ">
1190
+
1191
+ <div class="method-heading">
1192
+ <span class="method-name">similar_to?</span><span
1193
+ class="method-args">(obj)</span>
1194
+
1195
+ <span class="method-click-advice">click to toggle source</span>
1196
+
1197
+ </div>
1198
+
1199
+
1200
+ <div class="method-description">
1201
+
1202
+ <p>Checks if this matrix and the given object have the same features</p>
1203
+ <ul><li>
1204
+ <p>*<strong>argument</strong>*: `Object`</p>
1205
+ </li><li>
1206
+ <p>*<strong>returns</strong>*: <code>true</code> if `obj` is a `Matrix` and
1207
+ has the same rows and colum number;</p>
1208
+ </li></ul>
1209
+
1210
+ <p><code>false</code> else</p>
1211
+
1212
+
1213
+
1214
+
1215
+ <div class="method-source-code" id="similar_to-3F-source">
1216
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 243</span>
1217
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">similar_to?</span>(<span class="ruby-identifier">obj</span>)
1218
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1219
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">&amp;&amp;</span>
1220
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getRws</span> ) <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
1221
+ <span class="ruby-keyword">end</span>
1222
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
1223
+ <span class="ruby-keyword">end</span></pre>
1224
+ </div>
1225
+
1226
+ </div>
1227
+
1228
+
1229
+
1230
+
1231
+ </div>
1232
+
1233
+
1234
+ <div id="method-i-to_file" class="method-detail ">
1235
+
1236
+ <div class="method-heading">
1237
+ <span class="method-name">to_file</span><span
1238
+ class="method-args">(filename = "")</span>
1239
+
1240
+ <span class="method-click-advice">click to toggle source</span>
1241
+
1242
+ </div>
1243
+
1244
+
1245
+ <div class="method-description">
1246
+
1247
+ <p>Writes the matrix on a file</p>
1248
+ <ul><li>
1249
+ <p>*<strong>argument</strong>*: `String` of the file path</p>
1250
+ </li></ul>
1251
+
1252
+
1253
+
1254
+
1255
+ <div class="method-source-code" id="to_file-source">
1256
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 105</span>
1257
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_file</span>(<span class="ruby-identifier">filename</span> = <span class="ruby-string">&quot;&quot;</span>)
1258
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-constant">Dir</span>.<span class="ruby-identifier">exist?</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">filename</span>)) <span class="ruby-keyword">or</span> <span class="ruby-identifier">filename</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">then</span>
1259
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: Invalid directory; Directory not found&quot;</span>
1260
+ <span class="ruby-keyword">else</span>
1261
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>,<span class="ruby-string">&quot;w&quot;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rw</span><span class="ruby-operator">|</span>
1262
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span> <span class="ruby-keyword">do</span>
1263
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">j</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span>(<span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword">do</span>
1264
+ <span class="ruby-identifier">rw</span>.<span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{self[i,j]},&quot;</span>
1265
+ <span class="ruby-keyword">end</span>
1266
+ <span class="ruby-identifier">rw</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{self[i,j+1]}&quot;</span>
1267
+ <span class="ruby-keyword">end</span>
1268
+ <span class="ruby-keyword">end</span>
1269
+ <span class="ruby-keyword">end</span>
1270
+ <span class="ruby-keyword">end</span></pre>
1271
+ </div>
1272
+
1273
+ </div>
1274
+
1275
+
1276
+
1277
+
1278
+ </div>
1279
+
1280
+
1281
+ <div id="method-i-to_s" class="method-detail ">
1282
+
1283
+ <div class="method-heading">
1284
+ <span class="method-name">to_s</span><span
1285
+ class="method-args">()</span>
1286
+
1287
+ <span class="method-click-advice">click to toggle source</span>
1288
+
1289
+ </div>
1290
+
1291
+
1292
+ <div class="method-description">
1293
+
1294
+ <p>converts this matrix object to a string</p>
1295
+
1296
+
1297
+
1298
+
1299
+ <div class="method-source-code" id="to_s-source">
1300
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 121</span>
1301
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>()
1302
+ <span class="ruby-identifier">max</span> = <span class="ruby-value">0</span>
1303
+ <span class="ruby-identifier">str</span> = <span class="ruby-string">&quot;&quot;</span>
1304
+ <span class="ruby-ivar">@mx</span>.<span class="ruby-identifier">each</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-identifier">max</span> = <span class="ruby-node">&quot;#{n.round(3)}&quot;</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">if</span> <span class="ruby-node">&quot;#{n.round(3)}&quot;</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>}
1305
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span> <span class="ruby-keyword">do</span>
1306
+ <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;|&#39;</span>
1307
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">j</span> <span class="ruby-keyword">in</span> (<span class="ruby-identifier">i</span><span class="ruby-operator">*</span>(<span class="ruby-ivar">@MyCls</span>))<span class="ruby-operator">...</span>(<span class="ruby-identifier">i</span><span class="ruby-operator">*</span>(<span class="ruby-ivar">@MyCls</span>)<span class="ruby-operator">+</span><span class="ruby-ivar">@MyCls</span>) <span class="ruby-keyword">do</span>
1308
+ <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; #{&quot; &quot;*(max-@mx[j].round(3).to_s.size).abs}#{@mx[j].round(3) }&quot;</span>
1309
+ <span class="ruby-keyword">end</span>
1310
+ <span class="ruby-identifier">str</span><span class="ruby-operator">+=</span> <span class="ruby-string">&quot; |\n&quot;</span>
1311
+ <span class="ruby-keyword">end</span>
1312
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">str</span>
1313
+ <span class="ruby-keyword">end</span>
1314
+
1315
+ <span class="ruby-comment"># * **returns**: `Fixnum` of number of columns</span>
1316
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">getCls</span>()
1317
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@MyCls</span>
1318
+ <span class="ruby-keyword">end</span>
1319
+
1320
+ <span class="ruby-comment"># * **returns**: `Fixnum` of number of rows</span>
1321
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">getRws</span>()
1322
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@MyRws</span>
1323
+ <span class="ruby-keyword">end</span>
1324
+
1325
+ <span class="ruby-comment"># * **returns**: `Array` on which the matrix is saved</span>
1326
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">export</span>()
1327
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@mx</span>
1328
+ <span class="ruby-keyword">end</span>
1329
+
1330
+ <span class="ruby-comment"># Updates this matrix after the array in which it was saved has been</span>
1331
+ <span class="ruby-comment"># manually modified</span>
1332
+ <span class="ruby-comment">#</span>
1333
+ <span class="ruby-comment"># * **argument**: `Array` on which the new matrix is saved</span>
1334
+ <span class="ruby-comment"># * **argument**: `Fixnum` of number of rows</span>
1335
+ <span class="ruby-comment"># * **argument**: `Fixnum` of number of columns</span>
1336
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>(<span class="ruby-identifier">mat</span>,<span class="ruby-identifier">rws</span>,<span class="ruby-identifier">cls</span>)
1337
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">mat</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>) <span class="ruby-keyword">then</span>
1338
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: invalid matrix array found&quot;</span>
1339
+ <span class="ruby-keyword">else</span>
1340
+ [<span class="ruby-identifier">cls</span>,<span class="ruby-identifier">rws</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
1341
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: colums and rows in Integer format expected but #{e.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1342
+ <span class="ruby-keyword">end</span>
1343
+ <span class="ruby-keyword">end</span>
1344
+ <span class="ruby-ivar">@mx</span> = <span class="ruby-identifier">mat</span>
1345
+ <span class="ruby-ivar">@MyRws</span> = <span class="ruby-identifier">rws</span>
1346
+ <span class="ruby-ivar">@MyCls</span> = <span class="ruby-identifier">cls</span>
1347
+ <span class="ruby-keyword">end</span>
1348
+
1349
+ <span class="ruby-comment"># Gives access to each component of a matrix.</span>
1350
+ <span class="ruby-comment"># It accepts two kinds of arguments: `Fixnum` or `Range`</span>
1351
+ <span class="ruby-comment"># to get a specific component or a collection of components (eg. a whole row)</span>
1352
+ <span class="ruby-comment">#</span>
1353
+ <span class="ruby-comment"># * **argument**: `Fixnum` or `Range` of row</span>
1354
+ <span class="ruby-comment"># * **argument**: `Fixnum` or `Range` of column </span>
1355
+ <span class="ruby-comment"># * **returns**: `Numeric` if an only component has been required; `Matrix` else</span>
1356
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">x</span>,<span class="ruby-identifier">y</span>)
1357
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span> <span class="ruby-keyword">then</span>
1358
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">x</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">y</span>]
1359
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1360
+ <span class="ruby-identifier">nm</span> = []
1361
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1362
+ <span class="ruby-identifier">nm</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">y</span>]
1363
+ <span class="ruby-keyword">end</span>
1364
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">count</span>,<span class="ruby-value">1</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">nm</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
1365
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span>
1366
+ <span class="ruby-identifier">nm</span> = []
1367
+ <span class="ruby-identifier">y</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1368
+ <span class="ruby-identifier">nm</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">x</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]
1369
+ <span class="ruby-keyword">end</span>
1370
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">1</span>,<span class="ruby-identifier">y</span>.<span class="ruby-identifier">count</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">nm</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
1371
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Range</span>
1372
+ <span class="ruby-identifier">nm</span> = []
1373
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1374
+ <span class="ruby-identifier">y</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1375
+ <span class="ruby-identifier">nm</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]
1376
+ <span class="ruby-keyword">end</span>
1377
+ <span class="ruby-keyword">end</span>
1378
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">count</span>,<span class="ruby-identifier">y</span>.<span class="ruby-identifier">count</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">nm</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-identifier">y</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
1379
+ <span class="ruby-keyword">end</span>
1380
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
1381
+ <span class="ruby-keyword">end</span>
1382
+
1383
+ <span class="ruby-comment"># Allows direct overwriting of a component</span>
1384
+ <span class="ruby-comment">#</span>
1385
+ <span class="ruby-comment"># * **argument**: `Fixnum` of row number</span>
1386
+ <span class="ruby-comment"># * **argument**: `Fixnum` of column number</span>
1387
+ <span class="ruby-comment"># * **argument**: `Numeric` to overwrite the component value</span>
1388
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>,<span class="ruby-identifier">val</span>)
1389
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot; Argument Error: Numeric value expected but #{val.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1390
+ <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>] = <span class="ruby-identifier">val</span>
1391
+ <span class="ruby-keyword">end</span>
1392
+
1393
+ <span class="ruby-comment"># Compares the current matrix with another object</span>
1394
+ <span class="ruby-comment">#</span>
1395
+ <span class="ruby-comment"># * **argument**: `Object` to be compared with</span>
1396
+ <span class="ruby-comment"># * **returns**: +true+ if two equal matrix are compered; +false+ else </span>
1397
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">==</span>(<span class="ruby-identifier">obj</span>)
1398
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1399
+ <span class="ruby-keyword">if</span> (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getRws</span> ) <span class="ruby-keyword">then</span>
1400
+ (<span class="ruby-ivar">@mx</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">export</span>) <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
1401
+ <span class="ruby-keyword">end</span>
1402
+ <span class="ruby-keyword">end</span>
1403
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
1404
+ <span class="ruby-keyword">end</span>
1405
+
1406
+ <span class="ruby-comment"># Checks if this matrix is different from another object</span>
1407
+ <span class="ruby-comment">#</span>
1408
+ <span class="ruby-comment"># * **argument**: `Object` to be compared with</span>
1409
+ <span class="ruby-comment"># * **returns**: +true+ if the matrix and the object are different; +false+ else</span>
1410
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">!=</span>(<span class="ruby-identifier">obj</span>)
1411
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1412
+ <span class="ruby-keyword">self</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span> <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>)
1413
+ <span class="ruby-keyword">else</span>
1414
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>
1415
+ <span class="ruby-keyword">end</span>
1416
+ <span class="ruby-keyword">end</span>
1417
+
1418
+ <span class="ruby-comment"># Checks if this matrix and the given object have the same features</span>
1419
+ <span class="ruby-comment">#</span>
1420
+ <span class="ruby-comment"># * **argument**: `Object`</span>
1421
+ <span class="ruby-comment"># * **returns**: +true+ if `obj` is a `Matrix` and has the same rows and colum number;</span>
1422
+ <span class="ruby-comment"># +false+ else</span>
1423
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">similar_to?</span>(<span class="ruby-identifier">obj</span>)
1424
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1425
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">&amp;&amp;</span>
1426
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getRws</span> ) <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
1427
+ <span class="ruby-keyword">end</span>
1428
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
1429
+ <span class="ruby-keyword">end</span>
1430
+
1431
+ <span class="ruby-comment"># Sums the current matrix to another</span>
1432
+ <span class="ruby-comment">#</span>
1433
+ <span class="ruby-comment"># * **argument**: `Matrix` to be summed to</span>
1434
+ <span class="ruby-comment"># * **returns**: `Matrix` object</span>
1435
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">+</span>(<span class="ruby-identifier">m</span>)
1436
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1437
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">similar_to?</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">then</span>
1438
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>, <span class="ruby-ivar">@MyCls</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">m</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>]}
1439
+ <span class="ruby-keyword">else</span>
1440
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: invalid matrix for + operation&quot;</span>
1441
+ <span class="ruby-keyword">end</span>
1442
+ <span class="ruby-keyword">else</span>
1443
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: can&#39;t sum #{m.class} to Matrix&quot;</span>
1444
+ <span class="ruby-keyword">end</span>
1445
+ <span class="ruby-keyword">end</span>
1446
+
1447
+ <span class="ruby-comment"># Subtracts the current matrix to another</span>
1448
+ <span class="ruby-comment">#</span>
1449
+ <span class="ruby-comment"># * **argument**: `Matrix` to be subtracted to</span>
1450
+ <span class="ruby-comment"># * **returns**: `Matrix` object</span>
1451
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">-</span>(<span class="ruby-identifier">m</span>)
1452
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1453
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">similar_to?</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">then</span>
1454
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>, <span class="ruby-ivar">@MyCls</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">m</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>]}
1455
+ <span class="ruby-keyword">else</span>
1456
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: invalid matrix for - operation&quot;</span>
1457
+ <span class="ruby-keyword">end</span>
1458
+ <span class="ruby-keyword">else</span>
1459
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: can&#39;t subtact #{m.class} to Matrix&quot;</span>
1460
+ <span class="ruby-keyword">end</span>
1461
+ <span class="ruby-keyword">end</span>
1462
+
1463
+ <span class="ruby-comment"># Checks if the given object can be multiplied to the matrix</span>
1464
+ <span class="ruby-comment">#</span>
1465
+ <span class="ruby-comment"># * **argument**: `Object`</span>
1466
+ <span class="ruby-comment"># * **returns**: +true++ if `obj` is a `Numeric` or a good `Matrix` for &#39;*&#39; operation;</span>
1467
+ <span class="ruby-comment"># +false+ else</span>
1468
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">can_multiply?</span>(<span class="ruby-identifier">obj</span>)
1469
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span> <span class="ruby-keyword">then</span>
1470
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">getRws</span>) <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
1471
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1472
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>
1473
+ <span class="ruby-keyword">end</span>
1474
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
1475
+ <span class="ruby-keyword">end</span>
1476
+
1477
+ <span class="ruby-comment"># Multiplies the current matrix to another</span>
1478
+ <span class="ruby-comment">#</span>
1479
+ <span class="ruby-comment"># * **argument**: `Matrix` to be multiplied to</span>
1480
+ <span class="ruby-comment"># * **returns**: `Matrix` object</span>
1481
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">*</span>(<span class="ruby-identifier">ob</span>)
1482
+ <span class="ruby-keyword">case</span>
1483
+ <span class="ruby-keyword">when</span> (<span class="ruby-identifier">ob</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>)
1484
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">ob</span>}
1485
+ <span class="ruby-keyword">when</span> (<span class="ruby-identifier">ob</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Matrix</span>)
1486
+ <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">can_multiply?</span> <span class="ruby-identifier">ob</span> <span class="ruby-keyword">then</span>
1487
+ <span class="ruby-identifier">temp</span> = []
1488
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span>
1489
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">j</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">ob</span>.<span class="ruby-identifier">getCls</span>()
1490
+ <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>] = <span class="ruby-value">0</span>
1491
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">k</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyCls</span>
1492
+ <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">k</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">ob</span>[<span class="ruby-identifier">k</span>,<span class="ruby-identifier">j</span>]
1493
+ <span class="ruby-keyword">end</span>
1494
+ <span class="ruby-keyword">end</span>
1495
+ <span class="ruby-keyword">end</span>
1496
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-identifier">ob</span>.<span class="ruby-identifier">getCls</span>()){ <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">temp</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">j</span>]}
1497
+ <span class="ruby-keyword">else</span>
1498
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Cannot multiply #{@MyRws}x#{@MyCls} Matrix with #{ob.getRws}x#{ob.getCls}&quot;</span>
1499
+ <span class="ruby-keyword">end</span>
1500
+ <span class="ruby-keyword">else</span>
1501
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Cannot multiply Matrix with #{ob.class}&quot;</span>
1502
+ <span class="ruby-keyword">end</span>
1503
+ <span class="ruby-keyword">end</span>
1504
+
1505
+ <span class="ruby-comment"># Checks if the given object can divide the current matrix</span>
1506
+ <span class="ruby-comment">#</span>
1507
+ <span class="ruby-comment"># * **argument**: `Object`</span>
1508
+ <span class="ruby-comment"># * **returns**: +true+ if `obj` is a Numeric; +false+ else</span>
1509
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">can_divide?</span>(<span class="ruby-identifier">obj</span>)
1510
+ <span class="ruby-keyword">return</span> (<span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>)
1511
+ <span class="ruby-keyword">end</span>
1512
+
1513
+ <span class="ruby-comment"># Divides each element of the current matrix to a `Numeric` value</span>
1514
+ <span class="ruby-comment">#</span>
1515
+ <span class="ruby-comment"># * **argument**: `Numeric`</span>
1516
+ <span class="ruby-comment"># * **returns**: `Matrix` object</span>
1517
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">/</span>(<span class="ruby-identifier">obj</span>)
1518
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">/</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">to_f</span>} <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1519
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Invalid division between Matrix and #{obj.class} &quot;</span>
1520
+ <span class="ruby-keyword">end</span>
1521
+
1522
+ <span class="ruby-comment"># Elevates each element of the current matrix to a `Numeric` exponent</span>
1523
+ <span class="ruby-comment">#</span>
1524
+ <span class="ruby-comment"># * **argument**: `Numeric`</span>
1525
+ <span class="ruby-comment"># * **returns**: `Matrix` object</span>
1526
+ <span class="ruby-keyword">def</span> <span class="ruby-operator">**</span>(<span class="ruby-identifier">obj</span>)
1527
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyRws</span>,<span class="ruby-ivar">@MyCls</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>] <span class="ruby-operator">**</span> <span class="ruby-identifier">obj</span>} <span class="ruby-keyword">if</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1528
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: Invalid power Matrix-#{obj.class} &quot;</span>
1529
+ <span class="ruby-keyword">end</span>
1530
+
1531
+ <span class="ruby-comment"># Trasposes a matrix</span>
1532
+ <span class="ruby-comment">#</span>
1533
+ <span class="ruby-comment"># **returns**: `Matrix` object</span>
1534
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">tr</span>()
1535
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyCls</span>,<span class="ruby-ivar">@MyRws</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">j</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">i</span>]}
1536
+ <span class="ruby-keyword">end</span>
1537
+
1538
+ <span class="ruby-comment"># Calculates the norm of a matrix, defined as</span>
1539
+ <span class="ruby-comment"># sqrt(sum(m[i,j]**2))</span>
1540
+ <span class="ruby-comment">#</span>
1541
+ <span class="ruby-comment"># * **returns**: `Float` value</span>
1542
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">norm</span>()
1543
+ <span class="ruby-identifier">sum</span>=<span class="ruby-value">0</span>
1544
+ <span class="ruby-ivar">@mx</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
1545
+ <span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span><span class="ruby-identifier">e</span><span class="ruby-operator">**</span><span class="ruby-value">2</span>
1546
+ <span class="ruby-keyword">end</span>
1547
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">sum</span>)
1548
+ <span class="ruby-keyword">end</span>
1549
+
1550
+ <span class="ruby-comment"># Checks if the matrix is squared</span>
1551
+ <span class="ruby-comment">#</span>
1552
+ <span class="ruby-comment"># * **returns**: +true+ if the matrix is squared; +false+ else</span>
1553
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">is_squared?</span>()
1554
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
1555
+ <span class="ruby-keyword">end</span>
1556
+
1557
+ <span class="ruby-comment"># Calulates the determinant of the matrix using the Laplace&#39;s algorithm</span>
1558
+ <span class="ruby-comment">#</span>
1559
+ <span class="ruby-comment"># * **returns**: `Numeric` value</span>
1560
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">laplace</span>
1561
+ <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">is_squared?</span> <span class="ruby-keyword">then</span>
1562
+ <span class="ruby-keyword">return</span> (<span class="ruby-keyword">self</span>[<span class="ruby-value">0</span>,<span class="ruby-value">0</span>] <span class="ruby-operator">*</span> <span class="ruby-keyword">self</span>[<span class="ruby-value">1</span>,<span class="ruby-value">1</span>]) <span class="ruby-operator">-</span> (<span class="ruby-keyword">self</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>] <span class="ruby-operator">*</span> <span class="ruby-keyword">self</span>[<span class="ruby-value">1</span>,<span class="ruby-value">0</span>]) <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
1563
+ <span class="ruby-identifier">res</span> = <span class="ruby-value">0</span>
1564
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@MyRws</span>
1565
+ <span class="ruby-identifier">res</span> <span class="ruby-operator">+=</span> (((<span class="ruby-value">-1</span>) <span class="ruby-operator">**</span> <span class="ruby-identifier">i</span>) <span class="ruby-operator">*</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-value">0</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">del_rwcl</span>(<span class="ruby-keyword">self</span>,<span class="ruby-identifier">i</span>,<span class="ruby-value">0</span>).<span class="ruby-identifier">laplace</span>) <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>[<span class="ruby-identifier">i</span>,<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1566
+ <span class="ruby-keyword">end</span>
1567
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">res</span>
1568
+ <span class="ruby-keyword">else</span>
1569
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&#39; Argument Error: Cannot calculate determinat on a non-squared matrix&#39;</span>
1570
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
1571
+ <span class="ruby-keyword">end</span>
1572
+ <span class="ruby-keyword">end</span>
1573
+
1574
+ <span class="ruby-comment"># Builds an identity matrix</span>
1575
+ <span class="ruby-comment">#</span>
1576
+ <span class="ruby-comment"># * **argument**: `Fixnum` of the matrix dimension</span>
1577
+ <span class="ruby-comment"># * **returns**: `Matrix` object</span>
1578
+ <span class="ruby-keyword">def</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">identity</span>(<span class="ruby-identifier">n</span>)
1579
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot;Argument Error: expecting Fixnum value, but #{n.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>
1580
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">n</span>,<span class="ruby-identifier">n</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">j</span>) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> }
1581
+ <span class="ruby-keyword">end</span>
1582
+
1583
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">coerce</span>(<span class="ruby-identifier">val</span>)
1584
+ <span class="ruby-keyword">return</span> [<span class="ruby-keyword">self</span>, <span class="ruby-identifier">val</span>]
1585
+ <span class="ruby-keyword">end</span>
1586
+
1587
+ <span class="ruby-identifier">private</span>
1588
+
1589
+ <span class="ruby-comment"># Private method to delete rows and columns from a matrix</span>
1590
+ <span class="ruby-comment">#</span>
1591
+ <span class="ruby-comment"># * **argument**: `Matrix`</span>
1592
+ <span class="ruby-comment"># * **argument**: row number (`Fixnum`)</span>
1593
+ <span class="ruby-comment"># * **argument**: column number (`Fixnum`)</span>
1594
+ <span class="ruby-comment"># * **returns**: `Matrix` object </span>
1595
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">del_rwcl</span>(<span class="ruby-identifier">mx</span>,<span class="ruby-identifier">rw</span>,<span class="ruby-identifier">cl</span>)
1596
+ [<span class="ruby-identifier">rw</span>,<span class="ruby-identifier">cl</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
1597
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>,<span class="ruby-node">&quot;Argument Error: row and column in Fixnum format expected, but #{arg.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Fixnum</span>
1598
+ <span class="ruby-keyword">end</span>
1599
+ <span class="ruby-identifier">rd</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">export</span>.<span class="ruby-identifier">clone</span>
1600
+ <span class="ruby-identifier">cols</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">getCls</span>
1601
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">cols</span>
1602
+ <span class="ruby-identifier">rd</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-identifier">cols</span><span class="ruby-operator">+</span><span class="ruby-identifier">rw</span>] = <span class="ruby-keyword">nil</span>
1603
+ <span class="ruby-identifier">rd</span>[<span class="ruby-identifier">cl</span><span class="ruby-operator">*</span>(<span class="ruby-identifier">cols</span>)<span class="ruby-operator">+</span><span class="ruby-identifier">i</span>] = <span class="ruby-keyword">nil</span>
1604
+ <span class="ruby-keyword">end</span>
1605
+ <span class="ruby-identifier">rd</span> = <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">compact</span>
1606
+ <span class="ruby-identifier">rw</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">getRws</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1607
+ <span class="ruby-identifier">cl</span> = <span class="ruby-identifier">mx</span>.<span class="ruby-identifier">getCls</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1608
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rw</span>,<span class="ruby-identifier">cl</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-identifier">rd</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">*</span><span class="ruby-identifier">cl</span><span class="ruby-operator">+</span><span class="ruby-identifier">j</span>]}
1609
+ <span class="ruby-keyword">end</span>
1610
+
1611
+
1612
+ <span class="ruby-keyword">end</span></pre>
1613
+ </div>
1614
+
1615
+ </div>
1616
+
1617
+
1618
+
1619
+
1620
+ </div>
1621
+
1622
+
1623
+ <div id="method-i-tr" class="method-detail ">
1624
+
1625
+ <div class="method-heading">
1626
+ <span class="method-name">tr</span><span
1627
+ class="method-args">()</span>
1628
+
1629
+ <span class="method-click-advice">click to toggle source</span>
1630
+
1631
+ </div>
1632
+
1633
+
1634
+ <div class="method-description">
1635
+
1636
+ <p>Trasposes a matrix</p>
1637
+
1638
+ <p>*<strong>returns</strong>*: `Matrix` object</p>
1639
+
1640
+
1641
+
1642
+
1643
+ <div class="method-source-code" id="tr-source">
1644
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 354</span>
1645
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">tr</span>()
1646
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">Matrix</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@MyCls</span>,<span class="ruby-ivar">@MyRws</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@mx</span>[<span class="ruby-identifier">j</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@MyCls</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">i</span>]}
1647
+ <span class="ruby-keyword">end</span></pre>
1648
+ </div>
1649
+
1650
+ </div>
1651
+
1652
+
1653
+
1654
+
1655
+ </div>
1656
+
1657
+
1658
+ <div id="method-i-update" class="method-detail ">
1659
+
1660
+ <div class="method-heading">
1661
+ <span class="method-name">update</span><span
1662
+ class="method-args">(mat,rws,cls)</span>
1663
+
1664
+ <span class="method-click-advice">click to toggle source</span>
1665
+
1666
+ </div>
1667
+
1668
+
1669
+ <div class="method-description">
1670
+
1671
+ <p>Updates this matrix after the array in which it was saved has been manually
1672
+ modified</p>
1673
+ <ul><li>
1674
+ <p>*<strong>argument</strong>*: `Array` on which the new matrix is saved</p>
1675
+ </li><li>
1676
+ <p>*<strong>argument</strong>*: `Fixnum` of number of rows</p>
1677
+ </li><li>
1678
+ <p>*<strong>argument</strong>*: `Fixnum` of number of columns</p>
1679
+ </li></ul>
1680
+
1681
+
1682
+
1683
+
1684
+ <div class="method-source-code" id="update-source">
1685
+ <pre><span class="ruby-comment"># File lib/linmeric/CnGal_Matrix_class.rb, line 156</span>
1686
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>(<span class="ruby-identifier">mat</span>,<span class="ruby-identifier">rws</span>,<span class="ruby-identifier">cls</span>)
1687
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">mat</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>) <span class="ruby-keyword">then</span>
1688
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-string">&quot; Argument Error: invalid matrix array found&quot;</span>
1689
+ <span class="ruby-keyword">else</span>
1690
+ [<span class="ruby-identifier">cls</span>,<span class="ruby-identifier">rws</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
1691
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">MyArgError</span>, <span class="ruby-node">&quot; Argument Error: colums and rows in Integer format expected but #{e.class} found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Numeric</span>
1692
+ <span class="ruby-keyword">end</span>
1693
+ <span class="ruby-keyword">end</span>
1694
+ <span class="ruby-ivar">@mx</span> = <span class="ruby-identifier">mat</span>
1695
+ <span class="ruby-ivar">@MyRws</span> = <span class="ruby-identifier">rws</span>
1696
+ <span class="ruby-ivar">@MyCls</span> = <span class="ruby-identifier">cls</span>
1697
+ <span class="ruby-keyword">end</span></pre>
1698
+ </div>
1699
+
1700
+ </div>
1701
+
1702
+
1703
+
1704
+
1705
+ </div>
1706
+
1707
+
1708
+ </section>
1709
+
1710
+ </section>
1711
+ </main>
1712
+
1713
+
1714
+ <footer id="validator-badges" role="contentinfo">
1715
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
1716
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
1717
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
1718
+ </footer>
1719
+