Метод наилучшей пробы
Рисунок 1.2 — Гиперсфера полученная в результате применения данного метода Если значение функции в полученной точке не меньше, чем в центре, шаг считается неудачным, происходит возврат в текущий центр и поиск продолжается. Если число неудачных шагов из текущей точки достигает некоторого числа М, дальнейший поиск продолжается из той же точки, но с меньшим шагом до тех пор, пока он не станет меньше… Читать ещё >
Метод наилучшей пробы (реферат, курсовая, диплом, контрольная)
Приднестровский государственный университет им. Т. Г. Шевченко Инженерно-технический институт Кафедра информационных технологий и автоматизированного управления производственными процессами КУРСОВАЯ РАБОТА по дисциплине «Математическое программирование»
тема: «МЕТОД НАИЛУЧШЕЙ ПРОБЫ»
Работу выполнил:
студент группы ИТ09Др62ИВ1
А.Е. Гусев Руководитель:
Доцент, к.т.н.
Т.Д. Бордя Тирасполь, 2012
СОДЕРЖАНИЕ ВВЕДЕНИЕ
1. МЕТОДЫ СЛУЧАЙНОГО ПОИСКА
1.1 Методы наилучшей пробы
1.2 Адаптивный метод случайного поиска
2. ОПИСАНИЕ АЛГОРИТМА
2.1 Входные данные
2.2 Блок-схема алгоритма метода Наилучшей пробы
3. ОПИСАНИЕ ПРОГРАММНОЙ ЧАСТИ
3.1 Выбор среды программирования
3.2 Входные и выходные данные
3.3 Описание программы
4. КОНТРОЛЬНЫЙ ПРИМЕР
4.1 Результаты работы программы ЗАКЛЮЧЕНИЕ СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ ПРИЛОЖЕНИЕ, А — Руководство пользователя ПРИЛОЖЕНИЕ Б — Листинг программы ВВЕДЕНИЕ Оптимизация как раздел математики существует достаточно давно. Оптимизация — это выбор, т. е. то, чем постоянно приходиться заниматься в повседневной жизни. Термином «оптимизация» в литературе обозначает процесс или последовательность операций, позволяющих получить уточненное решение. Хотя конечной целью оптимизации является отыскание наилучшего или «оптимального» решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. Поэтому под оптимизацией понимают скорее стремление к совершенству, которое, возможно, и не будет достигнуто.
Необходимость принятия наилучших решений так же стара, как само человечество. Испокон веку люди, приступая к осуществлению своих мероприятий, раздумывали над их возможными последствиями и принимали решения, выбирая тем или другим образом зависящие от них параметры — способы организации мероприятий. Но до поры, до времени решения могли приниматься без специального математического анализа, просто на основе опыта и здравого смысла.
Цель данной курсовой работы:
— проанализировать и обработать теоретические и экспериментальные данные по теме «Метод наилучшей пробы»;
— анализ собранной информации;
— сравнительный анализ с другими методами;
— разработка программы, реализующая данный метод.
1. МЕТОДЫ СЛУЧАЙНОГО ПОИСКА Метод случайного поиска является прямым развитием метода проб и ошибок, когда решение ищется случайно, и при удаче принимается, а при неудаче отвергается с тем, чтобы немедленно снова обратиться к случайности как к источнику возможностей. Такое случайное поведение разумно поведение разумно опирается на уверенность, что случайность содержит в себе все возможности, в том числе и искомое решение во всех его вариантах.
Метод случайного поиска, называемый так же методом Монте-Карло, основан на том, что при одном и том же числе испытаний вероятность получения решения, близкого к оптимальному, при случайном поиске больше, чем при последовательном переборе через равные интервалы изменения отдельных параметров.
Идея метода случайного поиска состоит в следующем. Пусть задача минимизации решается для некоторой ограниченной области параметров. Если это возможно, то эта область соответствующим преобразованием координат переводится в единичный гиперкуб. Если такое преобразование неосуществимо, то производится замена координат таким образом, чтобы область поиска лежала внутри единичного гиперкуба. В этом случае эффективность поиска будет сильно зависеть от соотношения объемов единичного гиперкуба и области поиска в нем.
Существуют несколько методов случайного поиска, отличия друг от друга заключаются несколькими шагами или условиями.
1.1 Метод наилучшей пробы Задается начальная точка х°. Каждая последующая точка находится по формуле:
xk+l = хк + tk о к (1.1)
где tk > 0 — величина шага; ок — случайный вектор единичной длины, определяющий направление поиска; k — номер итерации. На текущей итерации при помощи генерирования случайных векторов о* получается M точек ух,…, ум, лежащих на гиперсфере радиуса tk с центром в точке хк в соответствии с рисунком 1.1 Среди полученных точек выбирается точка ут, в которой значение функции наименьшее. Если в выбранной точке значение функции меньше, чем в центре, то дальнейший поиск продолжается из этой точки. Иначе поиск продолжается из старого центра, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины R.
Рисунок 1.1 — Гиперсфера полученная в результате применения данного метода
1.2 Адаптивный метод случайного поиска Вначале задается начальная точка х°. Каждая последующая точка находится по формуле:
xk+l = хк + tk о к (1.2)
где tk > 0 — величина шага; ок — случайный вектор единичной длины, определяющий направление поиска; k — номер итерации. На текущей итерации при помощи генерирования случайных векторов ок получаются точки, лежащие на гиперсфере радиуса tk с центром в точке хк в соответствии с рисунком 1.2.
Рисунок 1.2 — Гиперсфера полученная в результате применения данного метода Если значение функции в полученной точке не меньше, чем в центре, шаг считается неудачным, происходит возврат в текущий центр и поиск продолжается. Если число неудачных шагов из текущей точки достигает некоторого числа М, дальнейший поиск продолжается из той же точки, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины R. Если при этом значение функции снова меньше, чем в центре, направление считается удачным и дальнейший поиск продолжается из этой. Если же значение функции стало не меньше, чем в центре, направление считается неудачным и поиск продолжается из старого центра.
2. ОПИСАНИЕ АЛГОРИТМА Шаг 1. Задать начальную точку, коэффициент сжатия, M — число испытаний на текущей итерации, =1 — начальную величину шага, R — минимальную величину шага, N — максимальное число итерации. Положить k = 0, j = 1.
Шаг 2. Получить М реализаций случайного вектора, j =1,…, M, где — случайная величина, равномерно распределенная на интервале [-1,1].
Шаг 3. Вычислить, j = 1,…, M.
Шаг 4. Найти из условия
Проверить выполнение условий:
а) если, шаг удачный. Положить и проверить условие окончания. Если, положить и перейти к шагу 2. Если, поиск завершить
б) если, шаг неудачный и перейти к шагу 5.
Шаг 5. Проверить условие окончания:
— если, процесс закончить:
— если, положить и перейти к шагу 2.
2.1 Входные данные Задать начальную точку, коэффициент сжатия, M = 3 — число испытаний на текущей итерации, =1 — начальную величину шага, R = 0.8 — минимальную величину шага, N = 10 — максимальное число итерации. Положить k = 0, j = 1.
2.2 Блок схема алгоритма метода «Наилучшей пробы»
нет
Да Рисунок 2.1 — Блок схема алгоритма метода «Наилучшей пробы»
3. ОПИСАНИЕ ПРОГРАММНОЙ ЧАСТИ
3.1 Выбор среды программирования поиск проба программирование C#
Для разработки приложения используется интегрированная среда разработки Visual Studio 2005, язык C#.
Создателем языка является сотрудник Microsoft Андреас Хейлсберг. Он стал известным в мире программистов задолго до того, как пришел в Microsoft.
С# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами.
C# является мощным объектным языком с возможностями наследования и универсализации.
C# является наследником языков С/С++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от C++ к С#.
Одна из причин разработки нового языка — это создание компонентно-ориентированного языка для новой платформы .NET. Другие языки были созданы до появления платформы .NET, а язык C# создавался специально под эту платформу.
3.2 Входные и выходные данные При загрузки программы пользователю необходимо ввести данные в объекты textbox:
— коэффициент сжатия в записывается в переменную B. Данное значение не должно выходить за пределы [0,1]. В случаи неправильности ввода значения, будет показано сообщение об ошибке;
— начальная величина шага записывается в переменную t;
— минимальная величина шага R записывается в переменную R;
— максимальное число итераций N записывается в переменную N.
double B = Convert. ToDouble (textBox1.Text);
double R = Convert. ToDouble (textBox4.Text);
double t = Convert. ToDouble (textBox3.Text
double N = Convert. ToInt32(textBox5.Text);
Также в алгоритме содержится массив, в котором хранятся начальные координаты точки. В переменной kol хранится количество итераций.
double[] x = { 1, 2 };
int kol=0;
Выходными значениями будут элементы массива x, в котором хранятся результаты вычислений алгоритма, и значение переменной Fx. В данном случае в переменной Fx содержится значение функции в точке x*.
AText («Поиск завершенnх*=(«+ Math. Round (x[0], 3) + «;» + Math. Round (x[1], 3) + «)nF (x*)=» + Fy + «nВсего итераций:» + kol);
3.3 Описание программы Рассмотрим фрагмент кода программы, реализующая «метод наилучшей пробы».
В функции Func имеется описание алгоритма принимающий два значения типа double. После чего происходят вычисления и значения подставляются в исходную функцию:. Далее передается значение, возвращаемое в качестве результата функции.
public double Func (double x1, double x2)
{
return 4 * Math. Pow ((x1 — 5), 2) + Math. Pow ((x2 — 6), 2);
}
Вывод текстовой информации в объекте richTextBox осуществляется при помощи функции AText. Invoke — выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
public void AText (string s)
{
richTextBox1.Invoke (new MethodInvoker (delegate
{
richTextBox1.Text += s + «n» ;
}));
}
На основной форме главного окна имеется кнопка «Решить функцию», при её нажатии срабатывает обработчик событий, который содержит в себе различные условия проверки, ввел ли пользователь требуемые значения для решения функции.
private void Start_Click (object sender, EventArgs e)
{
double S = Convert. ToDouble (textBox1.Text);
if (S <= 0 || S >= 1)
{
MessageBox.Show («Коэффициент сжатия должен быть в приделах: 0
}
if (textBox1.Text == «» || textBox3. Text == «» || textBox4. Text == «» || textBox5. Text == «»)
{
MessageBox.Show («Заполните поля!!!», «Ошибка», MessageBoxButtons. OK, MessageBoxIcon. Error);
}
В случаи верности вводимых данных пользователем открывается поток potok и вызывается процедура Solving ().
else
{
potok = new Thread (new ThreadStart (delegate { Solving (); }));
potok.Start ();
Rehenie.Enabled = false;
}
В процедуре Solving () описываются все переменные, необходимые для решения заданной функции. Также в ней описываются условия, при выполнении которых происходят проверки и вычисления необходимые для правильного решения заданной функции.
4. КОНТРОЛЬНЫЙ ПРИМЕР Задать начальную точку, коэффициент сжатия, M = 3 — число испытаний на текущей итерации, =1 — начальную величину шага, R = 0.8 — минимальную величину шага, N = 10 — максимальное число итерации. Положить k = 0, j = 1.
Итерация 1(0)
Итерация 2(0)
Итерация 3(0)
Итерация 4(0)
Шаг удачный перейти к шагу 2.
Итерация 2(1)
Итерация 3(1)
Итерация 4(1)
Шаг неудачный перейти к шагу 5
Итерация 5(0)
Перейти к шагу 2
Итерация 2(2)
Итерация 3(2)
Итерация 4(2)
Шаг удачный перейти к шагу 2.
Итерация 2(3)
Итерация 3(3)
Итерация 4(3)
Шаг удачный перейти к шагу 2.
Итерация 2(4)
Итерация 3(4)
Итерация 4(4)
Шаг удачный перейти к шагу 2.
Итерация 2(5)
Итерация 3(5)
Итерация 4(5)
Шаг удачный перейти к шагу 2.
Итерация 2(6)
Итерация 3(6)
Итерация 4(6)
Шаг удачный перейти к шагу 2.
Итерация 2(7)
Итерация 3(7)
Итерация 4(7)
Шаг удачный перейти к шагу 2.
Итерация 2(8)
Итерация 3(8)
Итерация 4(8)
Шаг удачный перейти к шагу 2.
Итерация 2(9)
Итерация 3(9)
Итерация 4(9)
Шаг удачный перейти к шагу 2.
Итерация 2(10)
Итерация 3(10)
Итерация 4(10)
Шаг удачный Поиск завершен F (x*)=0,154
Всего итераций:10.
4.1 Результаты работы программы Дана функция, требуется решиться методом «Наилучшей пробы».
Результат:
x0=(1;2)
B=0,618
M=3
R=0,8
N=10
Положить k=0, j=1
2)
Случайные вектора равны:
Вектор 1=(0,843;0,374)
Вектор 2=(0,239;0,954)
Вектор 3=(-0,159;-0,402)
3)
y1=(1,91 407 963 398 224;2,40 553 473 678 453)
y2=(1,24 301 408 746 329;2,9 700 227 591 631)
y3=(0,632 201 543 899 193;1,7 009 446 948 098)
f (y1)=51,012
f (y2)=65,641
f (y3)=100,615
4)
f (y)=51,012< f (x)=80 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,168;-0,727)
Вектор 2=(-0,478;-0,214)
Вектор 3=(-0,361;0,112)
3)
y1=(2,13 923 276 919 031;1,43 121 134 811 628)
y2=(1,137 380 066 825;1,99 691 748 086 571)
y3=(0,958 989 675 300 652;2,70 185 073 504 585)
f (y1)=53,61
f (y2)=79,981
f (y3)=76,197
5)f (y)=53,61>= f (x)=51,012Шаг неудачный Проверяем условие окончания
t > R
2)
Случайные вектора равны:
Вектор 1=(0,674;0,551)
Вектор 2=(-0,824;-0,193)
Вектор 3=(-0,08;0,917)
3)
y1=(2,3 925 433 489 388;2,7 966 823 731 956)
y2=(1,31 236 448 061 059;2,26 459 902 731 763)
y3=(1,8 603 687 032 674;3,2 119 628 010 338)
f (y1)=37,457
f (y2)=68,348
f (y3)=48,302
4)
f (y)=37,457< f (x)=51,012 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,05;0,171)
Вектор 2=(0,251;-0,447)
Вектор 3=(-0,812;0,102)
3)
y1=(2,56 598 291 444 603;3,38 984 568 723 033)
y2=(2,69 512 406 997 668;2,25 782 347 955 443)
y3=(1,77 936 220 453 972;2,87 370 759 084 179)
f (y1)=30,511
f (y2)=35,254
f (y3)=51,264
4)
f (y)=30,511< f (x)=37,457 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,507;0,537)
Вектор 2=(-0,587;0,461)
Вектор 3=(0,911;0,018)
3)
y1=(2,99 024 253 690 995;3,83 920 942 936 667)
y2=(2,7 995 199 875 453;3,77 154 969 427 255)
y3=(3,18 386 231 658 711;3,40 205 406 180 612)
f (y1)=20,826
f (y2)=39,073
f (y3)=19,943
4)
f (y)=19,943< f (x)=30,511 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(-0,07;-0,971)
Вектор 2=(0,507;0,537)
Вектор 3=(0,909;0,022)
3)
y1=(3,13 942 562 874 768;2,78 565 372 049 062)
y2=(3,60 812 193 905 102;3,85 141 780 394 245)
y3=(3,80 168 139 710 641;3,41 700 677 882 638)
f (y1)=24,179
f (y2)=12,366
f (y3)=12,416
4)
f (y)=12,366< f (x)=19,943 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(-0,593;0,741)
Вектор 2=(0,888;0,011)
Вектор 3=(-0,333;-0,296)
3)
y1=(3,22 198 099 450 301;4,3 339 311 933 355)
y2=(4,22 607 452 927 095;3,85 907 262 206 455)
y3=(3,14 622 298 010 452;3,44 084 095 154 556)
f (y1)=15,421
f (y2)=6,979
f (y3)=20,295
4)
f (y)=6,979< f (x)=12,366 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,374;0,451)
Вектор 2=(-0,899;-0,129)
Вектор 3=(-0,12;0,921)
3)
y1=(4,62 056 609 668 037;4,33 478 304 158 767)
y2=(3,61 434 029 772 258;3,77 129 318 283 236)
y3=(4,14 622 825 185 625;4,47 189 280 122 236)
f (y1)=3,349
f (y2)=12,647
f (y3)=5,251
4)
f (y)=3,349< f (x)=6,979 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,1;0,999)
Вектор 2=(0,932;0,459)
Вектор 3=(-0,519;-0,204)
3)
y1=(4,68 212 033 952 824;4,94 970 992 763 789)
y2=(5,17 497 767 685 909;4,60 782 479 620 358)
y3=(4,4 540 209 301 062;4,10 870 701 702 384)
f (y1)=1,507
f (y2)=2,061
f (y3)=7,222
4)
f (y)=1,507< f (x)=3,349 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(-0,235;-0,331)
Вектор 2=(0,722;0,999)
Вектор 3=(0,989;0,07)
3)
y1=(4,32 435 671 526 554;4,44 579 605 686 788)
y2=(5,4 411 823 661 013;5,45 059 067 443 126)
y3=(5,2 985 781 633 938;4,99 334 192 730 482)
f (y1)=4,242
f (y2)=0,31
f (y3)=1,37
4)
f (y)=0,31< f (x)=1,507 Шаг удачный Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,843;0,374)
Вектор 2=(0,239;0,954)
Вектор 3=(-0,159;-0,402)
3)
y1=(5,60 901 945 041 116;5,7 012 111 417 641)
y2=(5,19 430 094 266 245;6,5 006 473 959 406)
y3=(4,81 681 879 073 984;4,87 590 905 657 051)
f (y1)=1,573
f (y2)=0,154
f (y3)=1,398
4)
f (y)=0,154< f (x)=0,31 Шаг удачный Проверяем условие окончания:
k = N
Поиск завершен х*=(5,19 430 094 266 245;6,5 006 473 959 406)
F (x*)=0,154
Всего итераций:10
ЗАКЛЮЧЕНИЕ
В данной курсовой работе были рассмотрены различные методы адаптивного поиска, такие как:
— метод наилучшей пробы;
— адаптивный метод случайного поиска.
Были указаны основные достоинства и недостатки методов случайного поиска, а также алгоритм решения данного класса задач. Был проведен сравнительный анализ с другими методами, предназначенными для решения данного класса задач.
В программном продукте реализованы следующие функции:
— решение заданной функции методом наилучшей пробы;
— проверка правильности вводимых значений;
— вывод результата в объекте;
— вывод ошибок, при условии, что вводимые данные не соответствуют необходимым правилам ввода.
1) Акулич И. Л. Математическое программирование в примерах и задачах: Учеб. пособие. — М.: Высш. шк., 1986.
2) Белецкая С. Ю. Решение задач математического программирования: Учеб. пособие. — Воронеж, 2001.
3) Карманов В. Г. Математическое программирование. — М.: Наука, 1975.
4) Методы оптимизации в примерах и задачах: Учеб. пособ. А. В. Пантелеев, Т. А. Летова — 2-е изд., исправл. — M.:Высш. Шк., 2005. — 544с.
ПРИЛОЖЕНИЕ, А При запуске программы, для реализации решения «Метода наилучшей пробы» откроется окно, как представлено на рисунке А.1.
Рисунок А.1 — Главное окно программы Если пользователь не введет ни одного значения, то появится ошибка, как показано на рисунке А.2.
Рисунок А.2 — Ошибка Также если пользователь введет не все значения, то появится сообщение об ошибке, как показано на рисунке А.3.
Рисунок А.3 — Ошибка пустого поля В случаи ввода коэффициента сжатия B<0 либо B>1, то появится сообщение об ошибки, как показано на рисунке А.4.
Рисунок А.4 — Ошибка ввода значения При нажатии кнопки «Решить функцию» в окне richTextBox будет выведено решение «Метода наилучшей пробы» рисунок А.5.
Рисунок А.5 — Пример работы программы Если необходимо очистить главные поля для ввода, а так же поле с решением данного алгоритма, можно воспользоваться кнопкой «Очистить главные поля» показанное на рисунке А.6, панели главного меню во вкладке «Меню».
Рисунок А.6 — Пункт меню программы «Очистить главные поля»
Для просмотра алгоритма «Метода наилучшей пробы» необходимо нажать «Справка» и в открывшейся вкладке выбрать «Алгоритм». На экране появится новое окно с алгоритмом метода.
Рисунок А.7 — Окно «Алгоритм»
Для просмотра информации об авторе, достаточно нажать «Справка» и в открывшейся вкладке выбрать «Об авторе».
Рисунок А.8 — Окно «Об авторе»
Для выхода из программы необходимо нажать кнопку «Меню» и в появившейся вкладке выбрать «Выход».
ПРИЛОЖЕНИЕ Б Листинг программы
private void Start_Click (object sender, EventArgs e)
{
if (textBox1.Text == «» && textBox3. Text == «» && textBox4. Text == «» && textBox5. Text == «»)
{
MessageBox.Show («Введите данные!!!», «Ошибка», MessageBoxButtons. OK, MessageBoxI con. Error);
}
double S = Convert. ToDouble (textBox1.Text);
if (S <= 0 || S >= 1)
{
MessageBox.Show («Коэффициент сжатия должен быть в приделах: 0
}
if (textBox1.Text == «» || textBox3. Text == «» || textBox4. Text == «» || textBox5. Text == «»)
{
MessageBox.Show («Не все поля были заполнены!!!», «Ошибка», MessageBoxButtons. OK, MessageBoxIcon. Error);
}
else
{
potok = new Thread (new ThreadStart (delegate { Algoritm (); }));
potok.Start ();
}
}
public void Algoritm ()
{
double B = Convert. ToDouble (textBox1.Text);
double R = Convert. ToDouble (textBox4.Text);
double t = Convert. ToDouble (textBox3.Text);
double M = 3;
double N = Convert. ToInt32(textBox5.Text);
double kol = 0;
double j = 1;
double[] x = { 1, 2 };
double[] y1 = new double[2];
double[] y2 = new double[2];
double[] y3 = new double[2];
double[] ym = new double[2];
double X=0;
double Y1=0;
double Y2=0;
double Y3=0;
double Ym=0;
double kor1 = 0;
double kor2 = 0;
double kor3 = 0;
AText («x0=(» + x[0] + «;» + x[1] + «)»);
AText («B=» + B);
AText («M=» + M);
AText («R=» + R);
AText («N=» + N);
AText («Положить k=0, j=1»);
double[] v1 = new double[2];
double[] v2 = new double[2];
double[] v3 = new double[2];
int n = 0;
P:
if (n == 10)
{
v1[0] = -0.111;
v1[1] = -0.388;
v2[0] = 0.227;
v2[1] = 0.931;
v3[0] = 0.929;
v3[1] = 0.17;
n = 0;
}
if (n == 9)
{
v1[0] = -0.235;
v1[1] = -0.331;
v2[0] = 0.722;
v2[1] = 0.999;
v3[0] = 0.989;
v3[1] = 0.07;
n++;
}
if (n == 8)
{
v1[0] = 0.1;
v1[1] = 0.999;
v2[0] = 0.932;
v2[1] = 0.459;
v3[0] = -0.519;
v3[1] = -0.204;
n++;
}
if (n == 7)
{
v1[0] = 0.374;
v1[1] = 0.451;
v2[0] = -0.899;
v2[1] = -0.129;
v3[0] = -0.12;
v3[1] = 0.921;
n++;
}
if (n == 6)
{
v1[0] = -0.593;
v1[1] = 0.741;
v2[0] = 0.888;
v2[1] = 0.011;
v3[0] = -0.333;
v3[1] = -0.296;
n++;
}
if (n == 5)
{
v1[0] = -0.07;
v1[1] = -0.971;
v2[0] = 0.507;
v2[1] = 0.537;
v3[0] = 0.909;
v3[1] = 0.022;
n++;
}
if (n == 4)
{
v1[0] = 0.507;
v1[1] = 0.537;
v2[0] = -0.587;
v2[1] = 0.461;
v3[0] = 0.911;
v3[1] = 0.018;
n++;
}
if (n == 3)
{
v1[0] = 0.05;
v1[1] = 0.171;
v2[0] = 0.251;
v2[1] = -0.447;
v3[0] = -0.812;
v3[1] = 0.102;
n++;
}
if (n == 2)
{
v1[0] = 0.674;
v1[1] = 0.551;
v2[0] = -0.824;
v2[1] = -0.193;
v3[0] = -0.08;
v3[1] = 0.917;
n++;
}
if (n == 1)
{
v1[0] = 0.168;
v1[1] = -0.727;
v2[0] = -0.478;
v2[1] = -0.214;
v3[0] = -0.361;
v3[1] = 0.112;
n++;
}
if (n == 0)
{
v1[0] = 0.843;
v1[1] = 0.374;
v2[0] = 0.239;
v2[1] = 0.954;
v3[0] = -0.159;
v3[1] = -0.402;
n++;
}
AText («2)nСлучайные вектора равны:»);
kor1 = Math. Sqrt ((Math.Pow (v1[0], 2) + Math. Pow (v1[1], 2)));//Вычесление длинны вектора
y1[0] = x[0] + t * (v1[0] / kor1);
y1[1] = x[1] + t * (v1[1] / kor1);
AText («Вектор 1=(«+ v1[0] + «;» + v1[1] + «)»);
kor2 = Math. Sqrt ((Math.Pow (v2[0], 2) + Math. Pow (v2[1], 2)));//Вычесление длинны вектора
y2[0] = x[0] + t * (v2[0] / kor2);
y2[1] = x[1] + t * (v2[1] / kor2);
AText («Вектор 2=(«+ v2[0] + «;» + v2[1] + «)»);
kor3 = Math. Sqrt ((Math.Pow (v3[0], 2) + Math. Pow (v3[1], 2)));//Вычесление длинны вектора
y3[0] = x[0] + t * (v3[0] / kor3);
y3[1] = x[1] + t * (v3[1] / kor3);
AText («Вектор 3=(«+ v3[0] + «;» + v3[1] + «)»);
AText («3)ny1=(» + y1[0] + «;» + y1[1] + «)»);
AText («y2=(» + y2[0] + «;» + y2[1] + «)»);
AText («y3=(» + y3[0] + «;» + y3[1] + «)»);
X = Math. Round (Func (x[0], x[1]), 3);
Y1 = Math. Round (Func (y1[0], y1[1]), 3);
Y2 = Math. Round (Func (y2[0], y2[1]), 3);
Y3 = Math. Round (Func (y3[0], y3[1]), 3);
AText («f (y1)=» + Y1);
AText («f (y2)=» + Y2);
AText («f (y3)=» + Y3);
if (Y1 < Y2 && Y1 < Y3)
{
Ym = Y1;
y1.CopyTo (ym, 0);
}
if (Y2 < Y1 && Y2 < Y3)
{
Ym = Y2;
y2.CopyTo (ym, 0);
}
if (Y3 < Y2 && Y3 < Y1)
{
Ym = Y3;
y3.CopyTo (ym, 0);
}
if (Ym < X)
{
AText («4)nf (y)=» + Ym + «< f (x)=» + X + «Шаг удачный»);
ym.CopyTo (x, 0);//xk+1=ym
kol++;
AText («Проверяем условие окончания:»);
if (kol < N)
{
AText («k < N»);
j = 1;
goto P;
}
else
{
AText («k = N»);
AText («Поиск завершенnх*=(«+ x[0] + «;» + x[1] + «)nF (x*)=» + Ym + «nВсего итераций:» + kol);
potok.Abort ();
}
}
else
{
AText («5)f (y)=» + Ym + «>= f (x)=» + X +" Шаг неудачный nПроверяем условие окончания");
if (t <= R)
{
AText («t <= R»);
AText («Поиск завершенnх*=(«+ x[0] + «;» + x[1] + «)nF (x*)=» + Ym + «nВсего итераций:» + kol);
potok.Abort ();
}
else
{
AText («t > R»);
t = B * t;
j = 1;
goto P;
}
}
}
//Выход
private void Exit_Click (object sender, EventArgs e)
{
//th.Abort ();
Application.Exit ();
}
private void очиститьПоляToolStripMenuItem_Click (object sender, EventArgs e)
{
richTextBox1.Clear ();
textBox1.Text = «» ;
textBox3.Text = «» ;
textBox4.Text = «» ;
textBox5.Text = «» ;
}
private void выходToolStripMenuItem_Click (object sender, EventArgs e)
{
this.Close ();
}
private void алгоритмToolStripMenuItem_Click (object sender, EventArgs e)
{
Form2 s = new Form2();
s.Show ();
}
private void обАвтореToolStripMenuItem_Click (object sender, EventArgs e)
{
Form3 a = new Form3();
a.Show ();
}