source: git/Singular/svd/libs/ap.russian.html @ aad4ca4

spielwiese
Last change on this file since aad4ca4 was aad4ca4, checked in by Hans Schoenemann <hannes@…>, 6 years ago
format: Warn -> WarnS, trailing spaces
  • Property mode set to 100644
File size: 21.4 KB
Line 
1<html>
2<head>
3<title>Áèáëèîòåêà AP äëÿ C++</title>
4<style type="text/css">
5<!--
6h1 { font-family: Tahoma,sans-serif; font-size : larger; }
7h2 { font-family: Arial,sans-serif; font-size : 11pt; }
8h3 { font-family: Arial,sans-serif; font-size : 9pt; }
9.cond  { color:blue; }
10.const { color:#222222; }
11.func  { color:#111111; }
12-->
13</style>
14</head>
15<body>
16
17<h1>Áèáëèîòåêà AP äëÿ C++</h1>
18
19<p align=justify>
20Ýòîò äîêóìåíò îïèñûâàåò áèáëèîòåêó AP, àäàïòèðîâàííóþ äëÿ ÿçûêà C++. Áèáëèîòåêà AP äëÿ Ñ++ ñîäåðæèò áàçîâûé íàáîð ìàòåìàòè÷åñêèõ ôóíêöèé è êëàññû-êîëëåêöèè, êîòîðûå òðåáóþòñÿ äëÿ ðàáîòû ïðîãðàìì ñ ñàéòà <a href="http://alglib.manual.ru/">"Áèáëèîòåêà àëãîðèòìîâ"</a>.
21</p>
22
23<h1>Ñîâìåñòèìîñòü</h1>
24
25<p align=justify>
26Äàííàÿ áèáëèîòåêà äîëæíà áûòü ñîâìåñòèìà ñ ëþáûì êîìïèëÿòîðîì Ñ++.
27</p>
28
29<h1>Ñîñòàâ è èñïîëüçîâàíèå</h1>
30
31<p align=justify>
32 ñîñòàâ áèáëèîòåêè âõîäÿò ôàéëû <code>ap.h</code> è <code>ap.cpp</code>. Äëÿ íà÷àëà ðàáîòû äîñòàòî÷íî ïîäêëþ÷èòü ôàéë <code>ap.cpp</code> ê ïðîåêòó.
33</p>
34
35<!--<p align=justify>
36<b>ÂÀÆÍÎ:</b> ìîäóëü <code>ap.cpp</code> íå ñîäåðæèò äèðåêòèâ äëÿ óïðàâëåíèÿ ïðåäâàðèòåëüíî îòêîìïèëèðîâàííûìè çàãîëîâêàìè (precompiled headers).  íåêîòîðûõ ñëó÷àÿõ ýòî ïðèâîäèò ê îøèáêå ïðè êîìïèëÿöèè. Îòêëþ÷èòå èñïîëüçîâàíèå ïðåäâàðèòåëüíî îòêîìïèëèðîâàííûõ çàãîëîâêîâ äëÿ ýòîãî ìîäóëÿ â íàñòðîéêàõ âàøåãî ïðîåêòà èëè äîáàâüòå â íà÷àëî ìîäóëÿ ñîîòâåòñòâóþùóþ äèðåêòèâó êîìïèëÿòîðà. Ñïèñîê äèðåêòèâ äëÿ íàèáîëåå ïîïóëÿðíûõ êîìïèëÿòîðîâ ïðèâåäåí íèæå.
37</p>
38
39<ul>
40<li><b>MS Visual Studo:</b>&nbsp;<code>#include "stdafx.h"</code></li>
41<li><b>Borland C++ Builder:</b>&nbsp;<code>#pragma hdrstop</code></li>
42</ul>-->
43
44<h1>Îïèñàíèå áèáëèîòåêè AP</h1>
45
46<font size=-1>
47<a href="#intro">Ââåäåíèå</a><br>
48<a href="#conditionals">Íàñòðîéêè óñëîâíîé êîìïèëÿöèè</a><br>
49<a href="#constants">Êîíñòàíòû</a><br>
50<a href="#functions">Ôóíêöèè</a><br>
51<a href="#aperror">Êëàññ ap_error</a><br>
52<a href="#arrays">Êëàññû ìàññèâîâ</a><br>
53<a href="#blas">Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû</a><br>
54<a href="#complex">Êëàññ êîìïëåêñíûõ ÷èñåë</a><br>
55</font>
56
57<a name="intro"><h1>Ââåäåíèå</h1></a>
58
59<p align=justify>
60 çàãîëîâî÷íîì ôàéëå <code>ap.h</code> îïðåäåëÿåòñÿ ïðîñòðàíñòâî èìåí <code>ap</code>. Ñëåäóåò ó÷èòûâàòü, ÷òî èìåíà ôóíêöèé, êîíñòàíò è êëàññîâ, ïðèâåäåííûå äàëüøå, ñëåäóåò ïðåäâàðÿòü ïðåôèêñîì <i>ap::</i>
61</p>
62
63<a name="conditionals"><h1>Íàñòðîéêè óñëîâíîé êîìïèëÿöèè</h1></a>
64
65<p align=justify>
66<span class=cond>AP_ASSERT</span><br>
67Ýòîò ñèìâîë âêëþ÷àåò ïðîâåðêó ãðàíèö ìàññèâà. Åñëè îí îïðåäåëåí äèðåêòèâîé define, òî ïðè êàæäîì îáðàùåíèè ê ýëåìåíòàì äèíàìè÷åñêîãî ìàññèâà ïðîâåðÿåòñÿ ïðàâèëüíîñòü ïåðåäàííîãî èíäåêñà.  ñëó÷àå îøèáêè ãåíåðèðóåòñÿ èñêëþ÷åíèå <code>ap_error</code>. Ïðîâåðêà ãðàíèö ìàññèâà äåëàåò ïðîãðàììó áîëåå íàäåæíîé, íî çàìåäëÿåò ðàáîòó.
68</p>
69
70<p align=justify>
71<span class=cond>NO_AP_ASSERT</span><br>
72Ýòîò ñèìâîë îòêëþ÷àåò ïðîâåðêó ãðàíèö ìàññèâà. Åñëè îí îïðåäåëåí äèðåêòèâîé define, òî ïðè îáðàùåíèè ê ýëåìåíòó äèíàìè÷åñêîãî ìàññèâà âûõîä èíäåêñà çà ãðàíèöû ìàññèâà íå ïðîâåðÿåòñÿ.
73</p>
74
75<p align=justify>
76<span class=cond>UNSAFE_MEM_COPY</span><br>
77Äèðåêòèâà define, îïðåäåëÿþùàÿ ýòîò ñèìâîë, îòêëþ÷åíà. Íå âêëþ÷àéòå åž. Áèáëèîòåêà íå ñîäåðæèò íèêàêîé äîêóìåíòàöèè ïî ïîâîäó ýòîãî ñèìâîëà.
78</p>
79
80<a name="constants"><h1>Êîíñòàíòû</h1></a>
81
82<p align=justify>
83<span class=const>machineepsilon</span><br>
84Ýòà êîíñòàíòà îïðåäåëÿåò òî÷íîñòü ìàøèííûõ îïåðàöèé, ò.å. ìèíèìàëüíîå ÷èñëî, òàêîå, ÷òî <code>1+machineepsilon&ne;1</code> íà äàííîé ðàçðÿäíîé ñåòêå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ òî÷íîñòü ìîæåò áûòü åùž âûøå.
85</p>
86
87<p align=justify>
88<span class=const>maxrealnumber</span><br>
89Ýòà êîíñòàíòà îïðåäåëÿåò ìàêñèìàëüíîå ïîëîæèòåëüíîå âåùåñòâåííîå ÷èñëî, ïðåäñòàâèìîå íà äàííîé ìàøèíå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ ãðàíèöà ìîæåò áûòü åùž âûøå.
90</p>
91
92<p align=justify>
93<span class=const>minrealnumber</span><br>
94Ýòà êîíñòàíòà îïðåäåëÿåò ìèíèìàëüíîå ïîëîæèòåëüíîå âåùåñòâåííîå ÷èñëî, ïðåäñòàâèìîå íà äàííîé ìàøèíå. Êîíñòàíòà ìîæåò áûòü âçÿòà "ñ çàïàñîì", ò.å. ðåàëüíàÿ ãðàíèöà ìîæåò áûòü åùž íèæå.
95</p>
96
97<a name="functions"><h1>Ôóíêöèè</h1></a>
98
99<p align=justify>
100<span class=func><b>int</b> sign(<b>double</b> x)</span><br>
101Âîçâðàùàåò:<br>
102+1, åñëè X&gt;0<br>
103-1, åñëè X&lt;0<br>
104 0, åñëè X=0
105</p>
106
107<p align=justify>
108<span class=func><b>double</b> randomreal()</span><br>
109Âîçâðàùàåò ñëó÷àéíîå âåùåñòâåííîå ÷èñëî â ïîëóèíòåðâàëå [0,1).
110</p>
111
112<p align=justify>
113<span class=func><b>int</b> randominteger(<b>int</b> maxv) </span><br>
114Âîçâðàùàåò ñëó÷àéíîå öåëîå ÷èñëî â ïîëóèíòåðâàëå [0, maxv).
115</p>
116
117<p align=justify>
118<span class=func><b>double</b> round(<b>double</b> x)</span><br>
119Îêðóãëåíèå ê áëèæàéøåìó öåëîìó. Åñëè X íàõîäèòñÿ òî÷íî ïîñåðåäèíå ìåæäó äâóìÿ öåëûìè, òî ðåçóëüòàò ôóíêöèè çàâèñèò îò ðåàëèçàöèè.
120</p>
121
122<p align=justify>
123<span class=func><b>double</b> trunc(<b>double</b> x)</span><br>
124Îòáðàñûâàíèå äðîáíîé ÷àñòè X.<br>
125trunc(1.3) =  1<br>
126trunc(-1.3)= -1
127</p>
128
129<p align=justify>
130<span class=func><b>double</b> pi()</span><br>
131Âîçâðàùàåò êîíñòàíòó &pi;
132</p>
133
134<p align=justify>
135<span class=func><b>double</b> sqr(<b>double</b> x)</span><br>
136Âîçâðàùàåò x<sup>2</sup>
137</p>
138
139<p align=justify>
140<span class=func><b>double</b> maxreal(<b>double</b> m1, <b>double</b> m2)</span><br>
141Âîçâðàùàåò ìàêñèìóì èç äâóõ âåùåñòâåííûõ ÷èñåë.
142</p>
143
144<p align=justify>
145<span class=func><b>double</b> minreal(<b>double</b> m1, <b>double</b> m2)</span><br>
146Âîçâðàùàåò ìèíèìóì èç äâóõ âåùåñòâåííûõ ÷èñåë.
147</p>
148
149<p align=justify>
150<span class=func><b>int</b> maxint(<b>int</b> m1, <b>int</b> m2)</span><br>
151Âîçâðàùàåò ìàêñèìóì èç äâóõ öåëûõ ÷èñåë.
152</p>
153
154<p align=justify>
155<span class=func><b>int</b> minint(<b>int</b> m1, <b>int</b> m2)</span><br>
156Âîçâðàùàåò ìèíèìóì èç äâóõ öåëûõ ÷èñåë.
157</p>
158
159<a name="aperror"><h1>Êëàññ ap_error</h1></a>
160
161<p align=justify>
162Ýòî êëàññ èñêëþ÷åíèÿ, êîòîðîå âûáðàñûâàåòñÿ ïðè ðàçëè÷íûõ îøèáêàõ áèáëèîòåêè AP, â ÷àñòíîñòè - ïðè íåâåðíîì óêàçàíèè èíäåêñà ìàññèâà, åñëè âêëþ÷åíà ïðîâåðêà ãðàíèö ìàññèâà. Òåêóùàÿ âåðñèÿ êëàññà íå ñîäåðæèò íèêàêèõ ïîëåé è íå ïîçâîëÿåò îïðåäåëèòü ïðè÷èíó, ïî êîòîðîé èñêëþ÷åíèå áûëî ñãåíåðèðîâàíî.
163</p>
164
165<a name="arrays"><h1>Êëàññû ìàññèâîâ</h1></a>
166
167<h2>Ðàáîòà ñ ìàññèâàìè</h2>
168
169<p align=justify>
170Çäåñü ìû ðàññìîòðèì îáùèå ïðèíöèïû ðàáîòû ñ êëàññàìè-ìàññèâàìè, ïîñëå ÷åãî áóäóò ðàññìîòðåíû ñàìè êëàññû è èõ ìåòîäû.
171</p>
172
173<p align=justify>
174Êëàññû, âõîäÿùèå â ñîñòàâ ñòàíäàðòíîé áèáëèîòåêè, ïîçâîëÿþò îïåðèðîâàòü ñ ìàòðèöàìè è âåêòîðàìè (îäíîìåðíûìè è äâóõìåðíûìè ìàññèâàìè) ïåðåìåííîãî ðàçìåðà, ñ ïåðåìåííîé íóìåðàöèåé ýëåìåíòîâ, ò.å. íóìåðàöèÿ ìîæåò íà÷èíàòüñÿ ñ ëþáîãî ÷èñëà, çàêàí÷èâàòüñÿ ëþáûì ÷èñëîì è äèíàìè÷åñêè ìåíÿòüñÿ. Òàê êàê êëàññû ìàññèâîâ ÿâëÿþòñÿ øàáëîíàìè, òî ìàññèâû îäíîé ðàçìåðíîñòè îáëàäàþò îäèíàêîâûì íàáîðîì ôóíêöèé-÷ëåíîâ. À ïîñêîëüêó ôóíêöèè-÷ëåíû ìàññèâîâ ðàçíûõ ðàçìåðíîñòåé îòëè÷àþòñÿ òîëüêî êîëè÷åñòâîì àðãóìåíòîâ, òî äâóìåðíûå è îäíîìåðíûå ìàññèâû ìàëî ÷åì îòëè÷àþòñÿ äðóã îò äðóãà.
175</p>
176
177<p align=justify>
178Ðàáîòà ñ ìàññèâîì íà÷èíàåòñÿ ñ ñîçäàíèÿ ìàññèâà. Ñëåäóåò ðàçëè÷àòü ñîçäàíèå ýêçåìïëÿðà êëàññà-ìàññèâà è âûäåëåíèå ïàìÿòè ïîä ìàññèâ. Ïðè ñîçäàíèè ýêçåìïëÿðà êëàññà ìîæåò èñïîëüçîâàòüñÿ êîíñòðóêòîð áåç ïàðàìåòðîâ, ñîçäàþùèé ìàññèâ áåç ýëåìåíòîâ, à ìîãóò èñïîëüçîâàòüñÿ êîíñòðóêòîðû êîïèé è ïðèñâàèâàíèÿ, êîïèðóþùèå îäèí ìàññèâ â äðóãîé.  ñëó÷àå ñîçäàíèÿ ìàññèâà êîíñòðóêòîðîì ïî óìîë÷àíèþ îí íå ñîäåðæèò ýëåìåíòîâ è ïîïûòêà îáðàòèòüñÿ ê íèì ìîæåò ïðèâåñòè ê êðàõó ïðîãðàììû. Åñëè ïðè êîïèðîâàíèè ìàññèâ-èñòî÷íèê íå èìååò âûäåëåííîé ïàìÿòè ïîä ýëåìåíòû, òî ìàññèâ-êîïèÿ òîæå íå áóäåò ñîäåðæàòü ýëåìåíòîâ. Åñëè ìàññèâ-èñòî÷íèê èìååò âûäåëåííóþ ïîä ýëåìåíòû ïàìÿòü, òî ìàññèâ-êîïèÿ âûäåëÿåò òîò æå îáúåì ïàìÿòè è êîïèðóåò â íåž ýëåìåíòû. Ò.å. ïðè êîïèðîâàíèè ïîëó÷àþòñÿ äâà ïîëíîñòüþ íåçàâèñèìûõ ìàññèâà ñ îäèíàêîâûì ñîäåðæèìûì.
179</p>
180
181<p align=justify>
182Ïîñëå ñîçäàíèÿ ïóñòîãî ìàññèâà ñëåäóåò âûäåëèòü ïàìÿòü ïîä ýëåìåíòû ïðè ïîìîùè ìåòîäà <code:>setbounds</code:>. Ïàðàìåòðû ìåòîäà çàäàþò âåðõíèå è íèæíèå ãðàíèöû èíäåêñîâ ìàññèâà. Âåðõíÿÿ ãðàíèöà äîëæíà áûòü íå ìåíüøå íèæíåé.  ðåçóëüòàòå âûçîâà â ïàìÿòè âûäåëÿåòñÿ ìåñòî äëÿ ýëåìåíòîâ. Ñîäåðæèìîå ñîçäàííûõ ýëåìåíòîâ ìàññèâà íå îïðåäåëåíî è íå ñòîèò äåëàòü êàêèå ëèáî ïðåäïîëîæåíèÿ ïî ýòîìó ïîâîäó. Åñëè ìåòîä <code:>setbounds</code:> âûçûâàåòñÿ äëÿ ìàññèâà ñ óæå âûäåëåííîé ïàìÿòüþ, òî ïîñëå èçìåíåíèÿ åãî ðàçìåðîâ âíîâü âûäåëåííûå ýëåìåíòû òàêæå ñòàíîâèòñÿ íåîïðåäåëåííûìè, à ñòàðîå ñîäåðæèìîå èñ÷åçàåò.
183</p>
184
185<p align=justify>
186Äëÿ îáðàùåíèÿ ê ýëåìåíòàì ìàññèâà èñïîëüçóåòñÿ ïåðåãðóæåííûé <code:>operator()</code:>. Ò.å. êîä, îáðàùàþùèéñÿ ê ýëåìåíòó ìàññèâà <code:>a</code:> ñ èíäåêñàìè <code:>i, j, k</code:> áóäåò âûãëÿäåòü êàê <code:>a(i,j,k)</code:>. Íèæå ïðèâåäåí ïðèìåð âû÷èñëåíèÿ ìàññèâà ôàêòîðèàëîâ, èëëþñòðèðóþùèé ðàáîòó ñ ìàññèâàìè.
187</p>
188
189<pre>
190integer_1d_array factarr(<b>int</b> n)
191{
192    integer_1d_array result;
193    result.setbounds(1,n);
194    result(1) = 1;
195    <b>for</b>(<b>int</b> i=2; i&lt;=n; i++)
196        result(i) = result(i-1)*i;
197    <b>return</b> result;
198}
199</pre>
200
201<h2>Êëàññ template_1d_array</h2>
202
203<p align=justify>
204Ýòî êëàññ-øàáëîí äèíàìè÷åñêîãî îäíîìåðíîãî ìàññèâà ñ ïåðåìåííûìè âåðõíåé è íèæíåé ãðàíèöàìè. Íà îñíîâå ýòîãî êëàññà ïîëó÷åíû ñëåäóþùèå êëàññû:
205</p>
206
207<pre>
208<b>typedef</b> template_1d_array&lt;<b>int</b>&gt;     integer_1d_array;
209<b>typedef</b> template_1d_array&lt;<b>double</b>&gt;  real_1d_array;
210<b>typedef</b> template_1d_array&lt;<b>bool</b>&gt;    boolean_1d_array;
211<b>typedef</b> template_1d_array&lt;complex&gt; complex_1d_array;
212</pre>
213
214<h2>Ôóíêöèè-÷ëåíû êëàññà</h2>
215
216<p align=justify>
217<span class=func>template_1d_array()</span><br>
218Êîíñòðóêòîð. Ñîçäàíèå ïóñòîãî ìàññèâà.
219</p>
220
221<p align=justify>
222<span class=func>~template_1d_array()</span><br>
223Äåñòðóêòîð. Ïðè âûçîâå îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä ìàññèâ ïàìÿòü
224</p>
225
226<p align=justify>
227<span class=func>template_1d_array(<b>const</b> template_1d_array &amp;rhs)</span><br>
228Êîíñòðóêòîð êîïèé ìàññèâà. Ïðè ýòîì âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà.
229</p>
230
231<p align=justify>
232<span class=func><b>const</b> template_1d_array&amp; <b>operator=</b>(<b>const</b> template_1d_array &amp;rhs)</span><br>
233Ïðèñâàèâàíèå ìàññèâà. Ïðè ýòîì ñîäåðæèìîå ìàññèâà-ïðèåìíèêà óäàëÿåòñÿ è îñâîáîæäàåòñÿ  âûäåëåííàÿ ïîä íåãî ïàìÿòü,  çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà.
234</p>
235
236<p align=justify>
237<span class=func>T&amp; operator()(<b>int</b> i)</span><br>
238Îáðàùåíèå ê ýëåìåíòó ìàññèâà ñ íîìåðîì i
239</p>
240
241<p align=justify>
242<span class=func><b>void</b> setbounds(<b>int</b> iLow, <b>int</b> iHigh)</span><br>
243Âûäåëåíèå ïàìÿòè  ïîä  ìàññèâ.  Ïðè  ýòîì  ñòàðîå  ñîäåðæèìîå ìàññèâà óäàëÿåòñÿ  è îñâîáîæäàåòñÿ  âûäåëåííàÿ ïîä íåãî ïàìÿòü,  çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè ðàçìåðà iHigh-iLow+1 ýëåìåíòîâ.<br>
244Íóìåðàöèÿ ýëåìåíòîâ â íîâîì ìàññèâà íà÷èíàåòñÿ ñ iLow è çàêàí÷èâàåòñÿ iHigh. Ñîäåðæèìîå íîâîãî ìàññèâà íå îïðåäåëåíî.
245</p>
246
247<p align=justify>
248<span class=func><b>void</b> setcontent(<b>int</b> iLow, <b>int</b> iHigh, <b>const</b> T *pContent)</span><br>
249Ìåòîä  àíàëîãè÷åí  ìåòîäó  setbounds()  çà òåì èñêëþ÷åíèåì, ÷òî ïîñëå âûäåëåíèÿ ïàìÿòè â íåž êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà pContent[].
250</p>
251
252<p align=justify>
253<span class=func>T* getcontent()</span><br>
254Ìåòîä ïîçâîëÿåò ïîëó÷èòü óêàçàòåëü íà ñîäåðæèìîå ìàññèâà. Äàííûå,  íà êîòîðûå óêàçûâàåò âîçâðàùåííûé óêàçàòåëü, ìîæíî èçìåíÿòü, è ïðè  ýòîì èçìåíèòñÿ ñîäåðæèìîå ìàññèâà.
255</p>
256
257<p align=justify>
258<span class=func><b>int</b> getlowbound()<br><b>int</b> gethighbound()</span><br>
259Ìåòîäû èñïîëüçóþòñÿ äëÿ  ïîëó÷åíèÿ  èíôîðìàöèè  î  íèæíåé  è  âåðõíåé ãðàíèöàõ ìàññèâà.
260</p>
261
262<p align=justify>
263<span class=func>raw_vector&lt;T&gt; getvector(<b>int</b> iStart, <b>int</b> iEnd)</span><br>
264Ìåòîä èñïîëüçóåòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîä âîçâðàùàåò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü âåêòîðà (íà÷èíàÿ ñ ýëåìåíòà ñ èíäåêñîì iStart è çàêàí÷èâàÿ èíäåêñîì iEnd). Åñëè iEnd&lt;iStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé âåêòîð.
265</p>
266
267<p align=justify>
268<span class=func>const_raw_vector&lt;T&gt; getvector(<b>int</b> iStart, <b>int</b> iEnd) <b>const</b></span><br>
269Ìåòîä èñïîëüçóåòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîä âîçâðàùàåò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü âåêòîðà (íà÷èíàÿ ñ ýëåìåíòà ñ èíäåêñîì iStart è çàêàí÷èâàÿ èíäåêñîì iEnd). Åñëè iEnd&lt;iStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé âåêòîð. Âîçâðàùåííûé îáúåêò ïîçâîëÿåò ïîëó÷àòü äîñòóï òîëüêî äëÿ ÷òåíèÿ.
270</p>
271
272
273<h2>Êëàññ template_2d_array</h2>
274
275<p align=justify>
276Ýòî êëàññ-øàáëîí äèíàìè÷åñêîãî äâóõìåðíîãî ìàññèâà ñ ïåðåìåííûìè âåðõíåé è íèæíåé ãðàíèöàìè. Íà îñíîâå ýòîãî êëàññà ïîëó÷åíû ñëåäóþùèå êëàññû:
277</p>
278
279<pre>
280<b>typedef</b> template_2d_array&lt;<b>int</b>&gt;     integer_2d_array;
281<b>typedef</b> template_2d_array&lt;<b>double</b>&gt;  real_2d_array;
282<b>typedef</b> template_2d_array&lt;<b>bool</b>&gt;    boolean_2d_array;
283<b>typedef</b> template_2d_array&lt;complex&gt; complex_2d_array;
284</pre>
285
286<h2>Ôóíêöèè-÷ëåíû êëàññà</h2>
287
288<p align=justify>
289<span class=func>template_2d_array()</span><br>
290Êîíñòðóêòîð. Ñîçäàíèå ïóñòîãî ìàññèâà.
291</p>
292
293<p align=justify>
294<span class=func>~template_2d_array()</span><br>
295Äåñòðóêòîð. Ïðè âûçîâå îñâîáîæäàåòñÿ âûäåëåííàÿ ïîä ìàññèâ ïàìÿòü
296</p>
297
298<p align=justify>
299<span class=func>template_2d_array(<b>const</b> template_2d_array &amp;rhs)</span><br>
300Êîíñòðóêòîð êîïèé ìàññèâà. Ïðè ýòîì âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà-èñòî÷íèêà
301</p>
302
303<p align=justify>
304<span class=func><b>const</b> template_2d_array&amp; <b>operator=</b>(<b>const</b> template_2d_array &amp;rhs)</span><br>
305Ïðèñâàèâàíèå ìàññèâà. Ïðè ýòîì ñîäåðæèìîå ìàññèâà-ïðèåìíèêà óäàëÿåòñÿ è îñâîáîæäàåòñÿ  âûäåëåííàÿ ïîä íåãî ïàìÿòü, çàòåì çàíîâî âûäåëÿåòñÿ îòäåëüíàÿ îáëàñòü ïàìÿòè, â êîòîðóþ êîïèðóåòñÿ ñîäåðæèìîå èñòî÷íèêà.
306</p>
307
308<p align=justify>
309<span class=func>T&amp; operator()(<b>int</b> i1, <b>int</b> i2)</span><br>
310Îáðàùåíèå ê ýëåìåíòó ìàññèâà ñ èíäåêñîì [i1,i2]
311</p>
312
313<p align=justify>
314<span class=func><b>void</b> setbounds(<b>int</b> iLow1, <b>int</b> iHigh1, <b>int</b> iLow2, <b>int</b> iHigh2)</span><br>
315Âûäåëåíèå  ïàìÿòè   ïîä   ìàññèâ.    Ïðè   ýòîì   ñòàðîå   ñîäåðæèìîå ìàññèâà   óäàëÿåòñÿ   è  îñâîáîæäàåòñÿ  âûäåëåííàÿ  ïîä  íåãî  ïàìÿòü, çàòåì   çàíîâî   âûäåëÿåòñÿ   îòäåëüíàÿ îáëàñòü   ïàìÿòè   ðàçìåðîì (iHigh1-iLow1+1)*(iHigh2-iLow2+1) ýëåìåíòîâ.<br>
316Íóìåðàöèÿ  ýëåìåíòîâ â íîâîì ìàññèâà ïî ïåðâîé ðàçìåðíîñòè íà÷èíàåòñÿ ñ iLow1 è çàêàí÷èâàåòñÿ iHigh1, àíàëîãè÷íî äëÿ âòîðîé ðàçìåðíîñòè.<br>
317Ñîäåðæèìîå íîâîãî ìàññèâà íå îïðåäåëåíî.
318</p>
319
320<p align=justify>
321<span class=func><b>void</b> setcontent(<b>int</b> iLow1, <b>int</b> iHigh1, <b>int</b> iLow2, <b>int</b> iHigh2, <b>const</b> T *pContent)</span><br>
322Ìåòîä  àíàëîãè÷åí  ìåòîäó  setbounds()  çà òåì èñêëþ÷åíèåì, ÷òî ïîñëå âûäåëåíèÿ ïàìÿòè â íåž êîïèðóåòñÿ ñîäåðæèìîå ìàññèâà pContent[].<br>
323Ìàññèâ pContent ñîäåðæèò äâóõìåðíûé ìàññèâ, çàïèñàííûé ïîñòðî÷íî, ò.å. ïåðâûì èäåò ýëåìåíò [iLow1, iLow2], çàòåì [iLow1, iLow2+1] è ò.ä.<br>
324</p>
325
326<p align=justify>
327<span class=func>T* getcontent()</span><br>
328Ìåòîä ïîçâîëÿåò ïîëó÷èòü óêàçàòåëü íà ñîäåðæèìîå ìàññèâà. Äàííûå,  íà êîòîðûå óêàçûâàåò âîçâðàùåííûé óêàçàòåëü, ìîæíî èçìåíÿòü, è ïðè  ýòîì èçìåíèòñÿ ñîäåðæèìîå ìàññèâà.
329</p>
330
331<p align=justify>
332<span class=func><b>int</b> getlowbound(<b>int</b> iBoundNum)<br><b>int</b> gethighbound(<b>int</b> iBoundNum)</span><br>
333Ìåòîäû èñïîëüçóþòñÿ äëÿ  ïîëó÷åíèÿ  èíôîðìàöèè  î  íèæíåé  è  âåðõíåé ãðàíèöàõ ìàññèâà ïî ðàçìåðíîñòè ñ ïåðåäàííûì íîìåðîì.
334</p>
335
336<p align=justify>
337<span class=func>
338raw_vector<T> getcolumn(<b>int</b> iColumn, <b>int</b> iRowStart, <b>int</b> iRowEnd)<br>
339const_raw_vector<T> getcolumn(<b>int</b> iColumn, <b>int</b> iRowStart, <b>int</b> iRowEnd) <b>const</b><br>
340</span>
341Ìåòîäû èñïîëüçóþòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîäû âîçâðàùàþò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü ñòîëáöà iColumn (íà÷èíàÿ ñî ñòðîêè iRowStart è çàêàí÷èâàÿ ñòðîêîé iRowEnd).
342<br>
343Ïàðàìåòð iColumn äîëæåí áûòü äîïóñòèìûì íîìåðîì ñòîëáöà (ò.å. íàõîäèòüñÿ â ïðåäåëàõ âûäåëåííîé ïîä ìàññèâ ïàìÿòè). Åñëè iRowEnd&lt;iRowStart, òî ñ÷èòàåòñÿ, ÷òî çàäàí ïóñòîé ñòîëáåö.
344</p>
345
346<p align=justify>
347<span class=func>
348raw_vector<T> getrow(<b>int</b> iRow, <b>int</b> iColumnStart, <b>int</b> iColumnEnd)<br>
349const_raw_vector<T> getrow(<b>int</b> iRow, <b>int</b> iColumnStart, <b>int</b> iColumnEnd) <b>const</b><br>
350</span>
351Ìåòîäû èñïîëüçóþòñÿ áàçîâûìè ïîäïðîãðàììàìè ëèíåéíîé àëãåáðû äëÿ ïîëó÷åíèÿ äîñòóïà ê âíóòðåííåé ïàìÿòè ìàññèâà. Ìåòîäû âîçâðàùàþò îáúåêò, ñîäåðæàùèé â ñåáå óêàçàòåëü íà ÷àñòü ñòðîêè iRow (íà÷èíàÿ ñî ñòîëáöà iColumnStart è çàêàí÷èâàÿ ñòîëáöîì iColumnEnd).
352<br>
353Ïàðàìåòð iRow äîëæåí áûòü äîïóñòèìûì íîìåðîì ñòðîêè (ò.å. íàõîäèòüñÿ â ïðåäåëàõ âûäåëåííîé ïîä ìàññèâ ïàìÿòè). Åñëè iColumnEnd&lt;iColumnStart, òî ñ÷èòàåòñÿ, ÷òî çàäàíà ïóñòàÿ ñòðîêà.
354</p>
355
356<a name="blas"><h1>Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû</h1></a>
357
358<p align=justify>
359Áàçîâûå ïîäïðîãðàììû ëèíåéíîé àëãåáðû áèáëèîòåêè AP ïî ñâîåé ôóíêöèîíàëüíîñòè áëèçêè ê Level 1 BLAS, ïîçâîëÿÿ îñóùåñòâëÿòü ïðîñòåéøèå îïåðàöèè ñ âåêòîðàìè, à òàêæå ñî ñòðîêàìè è ñòîëáöàìè ìàòðèö.
360</p>
361
362<p align=justify>
363Ðàáîòà ñ ïîäïðîãðàììàìè îñóùåñòâëÿåòñÿ ñëåäóþùèì îáðàçîì. Ñíà÷àëà íåîáõîäèìî ïîëó÷èòü îáúåêò òèïà <code>raw_vector</code> èëè <code>const_raw_vector</code>, óêàçûâàþùèé íà îáðàáàòûâàåìóþ ÷àñòü ìàòðèöû èëè ìàññèâà ïðè ïîìîùè ìåòîäîâ <code>getcolumn</code>/<code>getrow</code> (äëÿ ìàòðèöû) èëè <code>getvector</code> (äëÿ ìàññèâà). Îáúåêò ñîäåðæèò â ñåáå óêàçàòåëü íà íà÷àëî ñòðîêè (èëè ñòîëáöà), ÷èñëî ýëåìåíòîâ â îáðàáàòûâàåìîé ñòðîêå è èíòåðâàë ìåæäó äâóìÿ ñîñåäíèìè ýëåìåíòàìè. Ïðè èñïîëüçîâàíèè ñòàíäàðòíîé ñõåìû õðàíåíèÿ ìàòðèö â ïàìÿòè (ò.å. ïðè õðàíåíèè ïî ñòðîêàì) èíòåðâàë ìåæäó ýëåìåíòàìè îäíîé ñòðîêè ðàâåí 1, à èíòåðâàë ìåæäó ýëåìåíòàìè îäíîãî ñòîëáöà ðàâåí ÷èñëó ñòîëáöîâ.
364</p>
365
366<p align=justify>
367Ïîëó÷åííûé îáúåêò ïåðåäàåòñÿ â êà÷åñòâå àðãóìåíòà â ñîîòâåòñâóþùóþ ïîäïðîãðàììó, êîòîðàÿ îñóùåñòâëÿåò îïåðàöèè íàä ÷àñòüþ ìàòðèöû, íà êîòîðóþ óêàçûâàåò âíóòðåííèé óêàçàòåëü îáúåêòà. Íèæå ïðèâåäåí ñïèñîê áàçîâûõ ïîäïðîãðàìì ëèíåéíîé àëãåáðû, äîñòóïíûõ â ñîñòàâå áèáëèîòåêè AP.
368</p>
369
370<p align=justify>
371<span class=func>
372template&lt;<b>class</b> T&gt; T vdotproduct(const_raw_vector&lt;T&gt; v1, const_raw_vector&lt;T&gt; v2)
373</span><br>
374Ïîäïðîãðàììà âû÷èñëÿåò ñêàëÿðíîå ïðîèçâåäåíèå ïåðåäàííûõ âåêòîðîâ.
375</p>
376
377<p align=justify>
378<span class=func>
379template&lt;<b>class</b> T&gt; <b>void</b> vmove(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
380template&lt;<b>class</b> T&gt; <b>void</b> vmoveneg(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
381template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vmove(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc, T2 alpha)<br>
382</span>
383Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ êîïèðîâàíèÿ ñîäåðæèìîãî îäíîãî âåêòîðà íà ìåñòî äðóãîãî âåêòîðà: ïðîñòîãî êîïèðîâàíèÿ, êîïèðîâàíèÿ ñ óìíîæåíèåì íà -1, êîïèðîâàíèÿ ñ óìíîæåíèåì íà ÷èñëî.
384</p>
385
386<p align=justify>
387<span class=func>
388template&lt;<b>class</b> T&gt; <b>void</b> vadd(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
389template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vadd(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc, T2 alpha)<br>
390</span>
391Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ äîáàâëåíèÿ îäíîãî âåêòîðà ê äðóãîìó: ïðîñòîãî äîáàâëåíèÿ èëè äîáàâëåíèÿ ñ óìíîæåíèåì íà ÷èñëî.
392</p>
393
394<p align=justify>
395<span class=func>
396template&lt;<b>class</b> T&gt; <b>void</b> vsub(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
397template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vsub(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc, T2 alpha)<br>
398</span>
399Ýòî ñåìåéñòâî ïîäïðîãðàìì ñëóæèò äëÿ ðàçëè÷íûõ âèäîâ âû÷èòàíèÿ îäíîãî âåêòîðà èç äðóãîãî: ïðîñòîãî âû÷èòàíèÿ èëè âû÷èòàíèÿ ñ óìíîæåíèåì íà ÷èñëî.
400</p>
401
402<p align=justify>
403<span class=func>
404template&lt;<b>class</b> T, <b>class</b> T2> <b>void</b> vmul(raw_vector&lt;T&gt; vdst, T2 alpha)
405</span><br>
406Ýòà ïîäïðîãðàììà ñëóæèò äëÿ óìíîæåíèÿ âåêòîðà íà ÷èñëî ñ ñîõðàíåíèåì ðåçóëüòàòà â òîì æå ìåñòå.
407</p>
408
409
410<a name="complex"><h1>Êëàññ êîìïëåêñíûõ ÷èñåë</h1></a>
411
412<p align=justify>
413Áèáëèîòåêà AP ñîäåðæèò êëàññ <code>ap::complex</code>, êîòîðûé ïîçâîëÿåò îñóùåñòâëÿòü îïåðàöèè ñ êîìïëåêñíûìè ÷èñëàìè. Äîñòóï ê äåéñòâèòåëüíîé è ìíèìîé ÷àñòÿì êîìïëåêñíîãî ÷èñëà îñóùåñòâëÿåòñÿ ÷åðåç îòêðûòûå (public) ïîëÿ <code>x</code> è <code>y</code>. Ïîääåðæèâàþòñÿ àðèôìåòè÷åñêèå îïåðàöèè, êàê ñî âñòðîåííûìè òèïàìè äàííûõ, ïóòåì ïåðåãðóçêè îïåðàöèé ñëîæåíèÿ, âû÷èòàíèÿ, óìíîæåíèÿ è äåëåíèÿ. Ñëîæåíèå, âû÷èòàíèå è óìíîæåíèå îñóùåñòâëÿþòñÿ îáû÷íûì ñïîñîáîì (ò.å. ïî îïðåäåëåíèþ, êîòîðîå ìîæíî íàéòè â ëþáîì ó÷åáíèêå àëãåáðû), îïåðàöèÿ äåëåíèÿ îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì ò.í. "áåçîïàñíîãî" àëãîðèòìà, êîòîðûé íèêîãäà íå ïðèâîäèò ê ïåðåïîëíåíèþ ïðè âû÷èñëåíèè ïðîìåæóòî÷íûõ ðåçóëüòàòîâ. Òàêæå áèáëèîòåêà âêëþ÷àåò â ñåáÿ íåñêîëüêî ôóíêöèé, îñóùåñòâëÿþùèõ ýëåìåíòàðíûå îïåðàöèè ñ êîìïëåêñíûìè ÷èñëàìè.
414</p>
415
416<p align=justify>
417<span class=func><b>const</b> double abscomplex(<b>const</b> complex &amp;z)</span><br>
418Ôóíêöèÿ âîçâðàùàåò ìîäóëü êîìïëåêñíîãî ÷èñëà. Ñëåäóåò îòìåòèòü, ÷òî âû÷èñëåíèå ìîäóëÿ îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì ò.í. "áåçîïàñíîãî" àëãîðèòìà, êîòîðûé íèêîãäà íå ïðèâîäèò ê ïåðåïîëíåíèþ ïðè âû÷èñëåíèè ïðîìåæóòî÷íûõ ðåçóëüòàòîâ.
419</p>
420
421<p align=justify>
422<span class=func><b>const</b> complex conj(<b>const</b> complex &amp;z)</span><br>
423Ôóíêöèÿ âîçâðàùàåò êîìïëåêñíîå ÷èñëî, ñîïðÿæåííîå ñâîåìó àðãóìåíòó.
424</p>
425
426<p align=justify>
427<span class=func><b>const</b> complex csqr(<b>const</b> complex &amp;z)</span><br>
428Ôóíêöèÿ âîçâðàùàåò êâàäðàò àðãóìåíòà.
429</p>
430
431</body>
432</html>
Note: See TracBrowser for help on using the repository browser.