<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1869128</guid>
        <pubDate>Fri, 15 Feb 2008 04:52:44 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1869128</link>
        <description><![CDATA[MBo: &gt;да это понятно, но вот всё таки не пойму, нужно использовать функцию, которая ищет именно минимум числа ? Всё таки не понятно<br>Задача оптимизации - найти минимум заданнной функции на определенном отрезке.<br>Вот исследуемую функцию и надо использовать]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1868724</guid>
        <pubDate>Thu, 14 Feb 2008 15:53:29 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1868724</link>
        <description><![CDATA[Катенька: &#092;&#092; нужно использовать свою функцию<br>
<br>
аа понятно, спасибо . <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2008-02-14T16:35:15+00:00">14.02.08, 16:35</time></span></span><br>
&#092;&#092; нужно использовать свою функцию<br>
<br>
да это понятно, но вот всё таки не пойму, нужно использовать функцию, которая ищет именно минимум числа ? Всё таки не понятно . :(]]></description>
        <author>Катенька</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1868703</guid>
        <pubDate>Thu, 14 Feb 2008 15:40:31 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1868703</link>
        <description><![CDATA[MBo: FU1 := F(U1); &lt;--- как это понимать ?  :unsure: <br><br>Это значит, что нужно использовать свою функцию, минимум которой ищется<br>например<br><br>function F(x: Double): Double;<br>begin<br>  Result := Sin(x);<br>end;<br><br>A := Pi;<br>B := 2 * Pi;<br>GoldenSectionOptimize(A, B, 100);]]></description>
        <author>MBo</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1868634</guid>
        <pubDate>Thu, 14 Feb 2008 14:53:58 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=1868634</link>
        <description><![CDATA[Катенька: <strong class='tag-b'>shadeofgray</strong>, скажите, пожалуйста, что за код такой ? Вот отсюда http://alglib.sources.ru/optimization/goldensection.php <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(*************************************************************************</div><div class="code_line">Процедура минимизации значения функции методом золотого сечения.</div><div class="code_line">&nbsp;</div><div class="code_line">Оптимизирует функцию одного &nbsp;переменного F.</div><div class="code_line">&nbsp;</div><div class="code_line">Параметры:</div><div class="code_line">&nbsp;&nbsp; &nbsp;A,B &nbsp; &nbsp; &nbsp;- отрезок [A,B], на котором ищется минимум функции F.</div><div class="code_line">&nbsp;&nbsp; &nbsp;N &nbsp; &nbsp; &nbsp; &nbsp;- число шагов метода</div><div class="code_line">&nbsp;</div><div class="code_line">После выхода переменные A и B содержат границы &nbsp; отрезка, &nbsp;на &nbsp;котором</div><div class="code_line">находится решение задачи.</div><div class="code_line">&nbsp;</div><div class="code_line">Алгоритм проводит 2+N вычислений функции F.</div><div class="code_line">*************************************************************************)</div><div class="code_line">procedure GoldenSectionOptimize(var A : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp; var B : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp; const N : Integer);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp;i : Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;S1 : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;S2 : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;U1 : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;U2 : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FU1 : Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FU2 : Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;S1 := (3-Sqrt(5))/2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;S2 := (Sqrt(5)-1)/2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;U1 := A+S1*(B-A);</div><div class="code_line">&nbsp;&nbsp; &nbsp;U2 := A+S2*(B-A);</div><div class="code_line">&nbsp;&nbsp; &nbsp;FU1 := F(U1); &#60;--- как это понимать ? &nbsp;:unsure: </div><div class="code_line">&nbsp;&nbsp; &nbsp;FU2 := F(U2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;i:=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while i&#60;=N do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if FU1&#60;=FU2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B := U2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;U2 := U1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FU2 := FU1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;U1 := A+S1*(B-A);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FU1 := F(U1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;A := U1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;U1 := U2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FU1 := FU2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;U2 := A+S2*(B-A);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FU2 := F(U2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Inc(i);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Катенька</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92035</guid>
        <pubDate>Mon, 31 Mar 2003 14:56:25 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92035</link>
        <description><![CDATA[experimenter: ага, спасибо. ;D]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92034</guid>
        <pubDate>Mon, 31 Mar 2003 14:38:17 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92034</link>
        <description><![CDATA[shadeofgray: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>EXPERIMENTER, 31.03.03, 17:46:02</span><div class='quote '><br>пояснить еще как использовать значения ф-ии на предыдущем шаге. все пучком, когда выбираем интервал<br>[a,U2]  - там, как я понимаю U1 используется, а когда [U1,b] чего делать с U2?</div></div><br>использовать U2 в качестве левой точки, а правой брать симметричную ей. Вообще, если интересна реализация, посмотри http://shadeofgray.narod.ru/, там в нижней части страницы, в разделе &quot;Примеры программ&quot;\&quot;Золотое сечение&quot; в html формате приведён алгоритм золотого сечения. Детали реализации можно будет выяснить именно там.<br><br><br><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>EXPERIMENTER, 31.03.03, 17:46:02</span><div class='quote '><br>и почему именно используется <br>(sqrt(5) - 1) /2 а не чего-нибудь близкое, но рациональное?</div></div><br>Сначала рассмотрим метод с точки зрения чистой математики, а потом применим его к компам. Золотое сечение - симметричный метод, т.е. на каждом шаге новая точка выбирается симметрично к одной из ранее построенных (симм. к U1, если на интервале [a,U2] и симм. к U2, если на интервале [U1,b]). Проблема в том, что если в начале делить отрезок точками почти пополам (т.е. отступая от середины на epsilon в обе стороны), то на первом шаге отрезок почти уполовинивается. Но на втором шаге от отрезка будет откушен лишь маленький кусочек в 2*epsilon длиной. А на следующем - опять в 2*epsilon, и опять и опять... Если же точки выбирать по указанной формуле, то на каждом шаге они будут делить отрезок в одних и тех же пропорциях.<br><br>Теперь о рациональных числах: хотя в курсе методов оптимизации точки выбираются из соображений симметрии, но на компе золотое сечение в принципе нельзя провести точно, и если выбирать новую точку действительно, как симметричную, т.е. U3 = U1 + (b-U2), то на первых шагах всё будет ОК, но через некоторое время из-за погрешностей в расчётах точки станут разъезжаться к краям отрезка и скорость сходимости упадёт. Поэтому при реализации на компе на каждом шаге явно проводится золотое сечение отрезка, т.е. U3 = U1 + (b-U1)*(sqrt(5)-1)/2,<br>что позволяет удерживать точки близкими к идеальному золотому сечению.<br>Т.е. можно было бы выбрать и что-то более рациональное, чем всякие корни, но<br>а)математически более удобно исследовать сходимость симметричного метода<br>б)нутром чую, что чем ближе к золотому сечению, тем лучше сходится - а доказывать лень.]]></description>
        <author>shadeofgray</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92032</guid>
        <pubDate>Mon, 31 Mar 2003 13:46:02 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92032</link>
        <description><![CDATA[experimenter: спасибо, мужики, обоим. не могли бы вы пояснить еще как использовать значения<br>ф-ии на предыдущем шаге. все пучком, когда выбираем интервал<br>[a,U2] &nbsp;- там, как я понимаю U1 используется, а когда [U1,b] чего делать с U2?<br>и почему именно используется <br>(sqrt(5) - 1) /2 а не чего-нибудь близкое, но рациональное?]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92031</guid>
        <pubDate>Mon, 31 Mar 2003 06:24:11 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92031</link>
        <description><![CDATA[shadeofgray: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>tserega, 31.03.03, 09:32:46</span><div class='quote '></div></div><br>Идея вот в чём - если функция F унимодальна, т.е. на отрезке [a,b] существует такое X, что на [a,X] F строго убывает, а на [X,b] строго возврастает, и есть значения функции в двух внутренних точках a&lt;U1&lt;U2&lt;b, то можно сказать, на каком из отрезков [a,U2] или [U1,b] находится точка X.<br>Если F(U1)&lt;F(U2), то X на [a,U2], иначе X на [U1,b].<br>Так вот, уменьшив размер зоны поиска, можно провести процедуру ещё раз. Остается вопрос выбора точек - можно выбирать точки U1=(a+b)/2-epsilon, U2=(a+b)/2+epsilon и уполовинивать область поиска, но на каждом шагу придётся расчитывать значение функции два раза. А можно делить отрезок на части золотым сечением и на каждом шаге использовать значения функции, вычисленные на предвдущем шагу.<br><br>Скажем, выбрали отрезок [a,U2], тогда за вторую точку берём U1, а за первую - симметричную U1 относительно центра нового отрезка. И на каждом шаге вычисляем значение функции только один раз.<br><br><br><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>tserega, 31.03.03, 09:32:46</span><div class='quote '><br>PPS: Глучно может быть, если на интервале от &quot;a&quot; до &quot;b&quot; несколько минимумов (максимумов)!</div></div><br>Верно. Но метод разработан как раз для функций определённого типа, хотя и применяется на практике в более общем случае, скажем когда надо просто уменьшить значение функции.]]></description>
        <author>shadeofgray</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92030</guid>
        <pubDate>Mon, 31 Mar 2003 05:32:46 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92030</link>
        <description><![CDATA[tserega: Если это про поиск минимума (если -f(x), то макчимума) функции, то пожалуйста:<br><br>Метод золотого сечения (оптимизация) облегчает поиск минимума (максимума) функции на данном интервале (в том смысле, что сокращает число вычислений функции).<br><br>Пусть fi = (sqrt(5) - 1) / 2<br><br>Есть у нас функция и числовая ось:<br> &nbsp; &nbsp; &nbsp; \ &nbsp; &nbsp; &nbsp; /<br> &nbsp; &nbsp; &nbsp; &nbsp;\ &nbsp; &nbsp;/<br> &nbsp; &nbsp; &nbsp; &nbsp; +-+<br> &nbsp; &nbsp; &nbsp;a &nbsp;b c &nbsp;d<br>Минимум лежит между &quot;a&quot; и &quot;d&quot; - это очевидно. Для проверки нам нужна третья и четвертая точки. Координата точки b = a + (d - a)*fi, а точки c = a + (d - a)*(1 - fi).<br>Короче, так мы сужаем интервал (как в методе деления отрезка пополам), но одну из крайних точек интервала берем уже вычисленную (к примеру, &quot;b&quot;). Тогда уже одна внутренняя точка (в данном случае &quot;c&quot;) уже посчитана на предыдущем шаге!!!<br>То есть производится меньше вычислений функции (для сложных функций это существенный выйгрыш в скорости)<br><br>PS: пишу по памяти, как когда-то сам программил. Возможны мелкие недочеты, но идея такая &nbsp;;)<br>PPS: Глучно может быть, если на интервале от &quot;a&quot; до &quot;b&quot; несколько минимумов (максимумов)!]]></description>
        <author>tserega</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92029</guid>
        <pubDate>Mon, 31 Mar 2003 03:50:27 +0000</pubDate>
        <title>Метод золотого сечения</title>
        <link>https://forum.sources.ru/index.php?showtopic=9476&amp;view=findpost&amp;p=92029</link>
        <description><![CDATA[experimenter: кто-нибудь может на пальцах рассказать метод золотого сечения на пальцах, плиз?<br>благодарен заранее.]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	