{"id":274591,"date":"2016-02-19T12:28:02","date_gmt":"2016-02-19T09:28:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=274591"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=274591","title":{"rendered":"\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445"},"content":{"rendered":"<p>       \u0412 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u043c, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ef5\/447\/6b6\/ef54476b68abd0f286427fdb4f60b487.jpg\" alt=\"image\"\/><br \/>  \u041e\u0431\u043e\u0431\u0449\u0438\u043c \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<br \/>  <a name=\"habracut\"><\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/30d\/a83\/252\/30da832522638aeb3be6d4e7ed7f590c.jpg\" alt=\"image\"\/>  <\/p>\n<h2>\u0421\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 Dx<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u0447\u0435\u0442\u0430 \u0440\u0430\u0432\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c Dx[k] =M2[k] \u2212 M1[k]\u2217M1[k]<\/li>\n<li>&lt; A; B &gt; = SUM A[k] * B[k] \/ Dx[k]<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/h2>\n<p>  1. \u0414\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 Xi \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 Dx \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<br \/>  2. \u0414\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 X \u043d\u0430\u0445\u043e\u0434\u0438\u043c p \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0442\u043e\u0447\u0435\u043a X1,&#8230;,Xp, \u0433\u0434\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<br \/>  3. \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 P(X) = SUM Yi*\u041f &lt; X-Xj, Xi-Xj &gt; \/ &lt; Xi-Xj, Xi-Xj &gt;, \u0433\u0434\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<h2>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<h3>history.txt <\/h3>\n<p>  <\/p>\n<ul>\n<li> -1 -1 -10<\/li>\n<li> 1 1 10<\/li>\n<li> 0 0 0<\/li>\n<li> -1 1 -8<\/li>\n<li> 1 -1 -20<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043d\u0430 \u0440\u0435\u0448\u0451\u0442\u043a\u0435 \u0441 \u0448\u0430\u0433\u043e\u043c 0.1 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 gnuplot<\/h3>\n<p>  <\/p>\n<ul>\n<li>predict.exe -history history.txt -input input.txt -output output.txt -p 5<\/li>\n<li>splot \u00aboutput.txt\u00bb<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3ab\/774\/7be\/3ab7747be4f27e5b1ec127144af33b0f.jpg\" alt=\"image\"\/><\/p>\n<pre><code class=\"cpp\">\/\/ predict.cpp: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \/\/  #include &quot;stdafx.h&quot;  struct t_previous_result { \tstd::vector&lt;double&gt; x; \tdouble y; };  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u0440\u0430\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 double delta(std::vector&lt;double&gt;& a, std::vector&lt;double&gt;& b, std::vector&lt;double&gt;& dx) { \tauto s = 0.0; \tauto i = 0; \tfor (; i &lt; a.size() && i &lt; b.size() && i &lt; dx.size(); i++) if (dx[i] &gt; 0.0) s += (a[i] - b[i]) * (a[i] - b[i]) \/ dx[i]; \tfor (; i &lt; a.size() && i &lt; dx.size(); i++) if (dx[i] &gt; 0.0) s += a[i] * a[i] \/ dx[i]; \tfor (; i &lt; b.size() && i &lt; dx.size(); i++) if (dx[i] &gt; 0.0) s += b[i] * b[i] \/ dx[i]; \treturn s; }  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0434\u0432\u0443\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 double scalar(std::vector&lt;double&gt;& a, std::vector&lt;double&gt;& b, std::vector&lt;double&gt;& dx) { \tauto s = 0.0; \tauto i = 0; \tfor (; i &lt; a.size() && i &lt; b.size() && i &lt; dx.size(); i++) if (dx[i] &gt; 0.0) s += (a[i] * b[i]) \/ dx[i]; \treturn s; }  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 double predict(std::vector&lt;double&gt;& x,                std::vector&lt;t_previous_result&gt;& previous_results,                std::vector&lt;double&gt;& dx,                int p) { \tstd::vector&lt;std::pair&lt;t_previous_result, double&gt;&gt; neighbors; \tfor (auto it = previous_results.begin(); it != previous_results.end(); ++it) \t{ \t\tstd::vector&lt;double&gt;& x2 = it-&gt;x; \t\tauto d = delta(x, x2, dx); \t\tstd::pair&lt;t_previous_result, double&gt; pair(*it, d); \t\tneighbors.push_back(pair); \t} \tstd::sort(neighbors.begin(), neighbors.end(), \t          [](std::pair&lt;t_previous_result, double&gt; const& a, std::pair&lt;t_previous_result, double&gt; const& b) \t          { \t\t          return (a.second &lt; b.second); \t          }); \tneighbors.resize(std::min(p, static_cast&lt;int&gt;(neighbors.size()))); \tauto y = 0.0; \tfor (auto iti = neighbors.begin(); iti != neighbors.end(); ++iti) \t{ \t\tauto s = iti-&gt;first.y; \t\tstd::vector&lt;double&gt;& xi = iti-&gt;first.x; \t\tfor (auto itj = neighbors.begin(); itj != neighbors.end(); ++itj) \t\t{ \t\t\tif (iti == itj) continue; \t\t\tstd::vector&lt;double&gt;& xj = itj-&gt;first.x; \t\t\tstd::vector&lt;double&gt; xxj; \t\t\tstd::vector&lt;double&gt; xixj; \t\t\tfor (auto i = 0; i &lt; x.size() && i &lt; xj.size(); i++) xxj.push_back(x[i] - xj[i]); \t\t\tfor (auto i = 0; i &lt; xi.size() && i &lt; xj.size(); i++) xixj.push_back(xi[i] - xj[i]); \t\t\ts *= scalar(xxj, xixj, dx) \/ scalar(xixj, xixj, dx); \t\t} \t\ty += s; \t} \treturn y; }  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/ \u0414\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f static const int _p = 3;  int main(int argc, char* argv[]) { \tstd::vector&lt;t_previous_result&gt; previous_results; \tstd::vector&lt;double&gt; dx; \tchar* input_file_name = nullptr; \tchar* output_file_name = nullptr; \tchar* previous_results_file_name = nullptr; \tauto p = _p; \tstd::string line;  \t\/\/ \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Windows \t\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f setlocale() \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 - \u0442\u0438\u043f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043b\u043e\u043a\u0430\u043b\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 LC_TYPE - \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u0438.  \t\/\/ \u0412\u043c\u0435\u0441\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c &quot;Russian&quot;, \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u041e\u0421. \tsetlocale(LC_ALL, &quot;&quot;);  \tfor (auto i = 1; i &lt; argc; i++) \t{ \t\tif (strcmp(argv[i], &quot;-help&quot;) == 0) \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Usage :\\t&quot; &lt;&lt; argv[0] &lt;&lt; &quot; [-input &lt;inputfile&gt;] [-output &lt;outputfile&gt;] [...]&quot; &lt;&lt; std::endl; \t\t} \t\telse if (strcmp(argv[i], &quot;-input&quot;) == 0) input_file_name = argv[++i]; \t\telse if (strcmp(argv[i], &quot;-output&quot;) == 0) output_file_name = argv[++i]; \t\telse if (strcmp(argv[i], &quot;-history&quot;) == 0) previous_results_file_name = argv[++i]; \t\telse if (strcmp(argv[i], &quot;-p&quot;) == 0) p = atoi(argv[++i]); \t}  \tif (input_file_name != nullptr) freopen(input_file_name, &quot;r&quot;, stdin); \tif (output_file_name != nullptr) freopen(output_file_name, &quot;w&quot;, stdout); \tif (previous_results_file_name != nullptr) \t{ \t\tstd::vector&lt;double&gt; m1; \t\tstd::vector&lt;double&gt; m2; \t\tstd::ifstream history(previous_results_file_name); \t\tif (!history.is_open()) throw &quot;Error opening file&quot;; \t\twhile (std::getline(history, line)) \t\t{ \t\t\tstd::stringstream ss(line); \t\t\tstd::vector&lt;double&gt; x; \t\t\tstd::copy(std::istream_iterator&lt;double&gt;(ss), std::istream_iterator&lt;double&gt;(), \t\t\t\tstd::back_inserter(x)); \t\t\tauto y = x.back(); \t\t\tx.pop_back(); \t\t\tt_previous_result previous_result; \t\t\tprevious_result.x = x; \t\t\tprevious_result.y = y; \t\t\tprevious_results.push_back(previous_result); \t\t\tfor (auto i = 0; i &lt; x.size(); i++) \t\t\t{ \t\t\t\tif (i &gt;= m1.size()) m1.push_back(0.0); \t\t\t\tif (i &gt;= m2.size()) m2.push_back(0.0); \t\t\t\tm1[i] += x[i]; \t\t\t\tm2[i] += x[i] * x[i]; \t\t\t} \t\t} \t\tfor (auto it = m1.begin(); it != m1.end(); ++it) *it \/= previous_results.size(); \t\tfor (auto it = m2.begin(); it != m2.end(); ++it) *it \/= previous_results.size(); \t\tfor (auto i = 0; i &lt; m1.size() && i &lt; m2.size(); i++) dx.push_back(m2[i] - m1[i] * m1[i]); \t} \twhile (std::getline(std::cin, line)) \t{ \t\tdouble y; \t\tstd::vector&lt;double&gt; x; \t\tstd::stringstream ss(line); \t\tstd::copy(std::istream_iterator&lt;double&gt;(ss), std::istream_iterator&lt;double&gt;(), \t\t\tstd::back_inserter(x)); \t\ty = predict(x, previous_results, dx, p); \t\tfor (auto it = x.begin(); it != x.end(); ++it) std::cout &lt;&lt; *it &lt;&lt; ' '; \t\tstd::cout &lt;&lt; y &lt;&lt; std::endl; \t} \treturn 0; } <\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"https:\/\/github.com\/dprotopopov\/polylib\">https:\/\/github.com\/dprotopopov\/polylib<\/a><\/p>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li>Microsoft Visual Studio 2013 \u2014 \u0441\u0440\u0435\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<li>gnuplot \u2014 \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 <a href=\"http:\/\/www.gnuplot.info\">www.gnuplot.info<\/a><\/li>\n<\/ul>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/277541\/\"> https:\/\/habrahabr.ru\/post\/277541\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0412 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u043c, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ef5\/447\/6b6\/ef54476b68abd0f286427fdb4f60b487.jpg\" alt=\"image\"\/><br \/>  \u041e\u0431\u043e\u0431\u0449\u0438\u043c \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-274591","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=274591"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274591\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=274591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=274591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=274591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}