Метод наилучшей пробы
Приднестровский
государственный университет им. Т.Г. Шевченко
Инженерно-технический
институт
Кафедра
информационных технологий и автоматизированного
управления
производственными процессами
КУРСОВАЯ
РАБОТА
по
дисциплине «Математическое программирование»
тема: «МЕТОД
НАИЛУЧШЕЙ ПРОБЫ»
Работу выполнил:
студент группы ИТ09Др62ИВ1
А.Е. Гусев
Руководитель:
Доцент, к.т.н.
Т.Д. Бордя
Тирасполь,
2012
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
. МЕТОДЫ
СЛУЧАЙНОГО ПОИСКА
.1 Методы
наилучшей пробы
.2
Адаптивный метод случайного поиска
. ОПИСАНИЕ
АЛГОРИТМА
.1 Входные
данные
.2
Блок-схема алгоритма метода Наилучшей пробы
. ОПИСАНИЕ
ПРОГРАММНОЙ ЧАСТИ
.1 Выбор
среды программирования
.2 Входные
и выходные данные
.3 Описание
программы
.
КОНТРОЛЬНЫЙ ПРИМЕР
.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);R = Convert.ToDouble(textBox4.Text);t =
Convert.ToDouble(textBox3.TextN = Convert.ToInt32(textBox5.Text);
Также в алгоритме содержится массив, в котором
хранятся начальные координаты точки. В переменной kol
хранится количество итераций.[] x = { 1, 2 };
int
kol=0;
Выходными значениями будут элементы массива x,
в котором хранятся результаты вычислений алгоритма, и значение переменной Fx.
В данном случае в переменной Fx
содержится значение функции в точке x*.("Поиск
завершен\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)
{4 * Math.Pow((x1 - 5), 2) +
Math.Pow((x2 - 6), 2);
}
Вывод текстовой информации в объекте richTextBox
осуществляется при помощи функции AText. Invoke
- выполняет указанный делегат в том потоке, которому принадлежит базовый
дескриптор окна элемента управления.
public void AText(string s)
{.Invoke(new MethodInvoker(delegate
{
richTextBox1.Text += s + "\n";
}));
}
На основной форме главного окна имеется кнопка
“Решить функцию”, при её нажатии срабатывает обработчик событий, который
содержит в себе различные условия проверки, ввел ли пользователь требуемые
значения для решения функции.
private void Start_Click(object sender,
EventArgs e)
{S = Convert.ToDouble(textBox1.Text);(S <= 0
|| S >= 1)
{.Show("Коэффициент сжатия должен быть в
приделах: 0<B<1", "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}(textBox1.Text == "" || textBox3.Text
== "" || textBox4.Text == "" || textBox5.Text ==
"")
{.Show("Заполните поля!!!",
"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
В случаи верности вводимых данных пользователем
открывается поток potok
и вызывается процедура Solving().
else
{= new Thread(new
ThreadStart(delegate { Solving(); }));.Start();.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 Результаты работы
программы
Дана функция ,
требуется решиться методом “Наилучшей пробы”.
Результат:
=(1;2)=0,618=3=0,8=10
Положить k=0, j=1
)
Случайные вектора равны:
Вектор 1=(0,843;0,374)
Вектор 2=(0,239;0,954)
)
=(1,91407963398224;2,40553473678453)=(1,24301408746329;2,9700227591631)=(0,632201543899193;1,07009446948098)(y1)=51,012(y2)=65,641(y3)=100,615
)
(y)=51,012< f(x)=80 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(0,168;-0,727)
Вектор 2=(-0,478;-0,214)
Вектор 3=(-0,361;0,112)
)
=(2,13923276919031;1,43121134811628)=(1,00137380066825;1,99691748086571)=(0,958989675300652;2,70185073504585)(y1)=53,61(y2)=79,981(y3)=76,197
)f(y)=53,61>= f(x)=51,012Шаг неудачный
Проверяем условие окончания
> R
)
Случайные вектора равны:
Вектор 1=(0,674;0,551)
Вектор 2=(-0,824;-0,193)
Вектор 3=(-0,08;0,917)
)
=(2,3925433489388;2,7966823731956)=(1,31236448061059;2,26459902731763)=(1,8603687032674;3,02119628010338)(y1)=37,457(y2)=68,348(y3)=48,302
)
(y)=37,457< f(x)=51,012 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(0,05;0,171)
Вектор 2=(0,251;-0,447)
Вектор 3=(-0,812;0,102)
3)
=(2,56598291444603;3,38984568723033)=(2,69512406997668;2,25782347955443)=(1,77936220453972;2,87370759084179)(y1)=30,511(y2)=35,254(y3)=51,264
)
(y)=30,511< f(x)=37,457 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(0,507;0,537)
Вектор 2=(-0,587;0,461)
Вектор 3=(0,911;0,018)
)
=(2,99024253690995;3,83920942936667)=(2,07995199875453;3,77154969427255)=(3,18386231658711;3,40205406180612)(y1)=20,826(y2)=39,073(y3)=19,943
)
(y)=19,943< f(x)=30,511 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(-0,07;-0,971)
Вектор 2=(0,507;0,537)
Вектор 3=(0,909;0,022)
)
=(3,13942562874768;2,78565372049062)=(3,60812193905102;3,85141780394245)=(3,80168139710641;3,41700677882638)(y1)=24,179(y2)=12,366(y3)=12,416
)
(y)=12,366< f(x)=19,943 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(-0,593;0,741)
Вектор 2=(0,888;0,011)
Вектор 3=(-0,333;-0,296)
)
=(3,22198099450301;4,3339311933355)=(4,22607452927095;3,85907262206455)=(3,14622298010452;3,44084095154556)(y1)=15,421(y2)=6,979(y3)=20,295
)
(y)=6,979< f(x)=12,366 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(0,374;0,451)
Вектор 2=(-0,899;-0,129)
Вектор 3=(-0,12;0,921)
)
=(4,62056609668037;4,33478304158767)=(3,61434029772258;3,77129318283236)=(4,14622825185625;4,47189280122236)(y1)=3,349(y2)=12,647(y3)=5,251
)
(y)=3,349< f(x)=6,979 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(0,1;0,999)
Вектор 2=(0,932;0,459)
Вектор 3=(-0,519;-0,204)
)
y1=(4,68212033952824;4,94970992763789)=(5,17497767685909;4,60782479620358)=(4,04540209301062;4,10870701702384)(y1)=1,507(y2)=2,061(y3)=7,222
)
(y)=1,507< f(x)=3,349 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(-0,235;-0,331)
Вектор 2=(0,722;0,999)
Вектор 3=(0,989;0,07)
)
=(4,32435671526554;4,44579605686788)=(5,04411823661013;5,45059067443126)=(5,2985781633938;4,99334192730482)(y1)=4,242(y2)=0,31(y3)=1,37
)
(y)=0,31< f(x)=1,507 Шаг удачный
Проверяем условие окончания:
< N
)
Случайные вектора равны:
Вектор 1=(0,843;0,374)
Вектор 2=(0,239;0,954)
Вектор 3=(-0,159;-0,402)
)
=(5,60901945041116;5,7012111417641)=(5,19430094266245;6,05006473959406)=(4,81681879073984;4,87590905657051)(y1)=1,573(y2)=0,154(y3)=1,398
)
(y)=0,154< f(x)=0,31 Шаг удачный
Проверяем условие окончания:
k = N
Поиск завершен
х*=(5,19430094266245;6,05006473959406)(x*)=0,154
Всего итераций:10
ЗАКЛЮЧЕНИЕ
В данной курсовой работе были рассмотрены
различные методы адаптивного поиска, такие как:
метод наилучшей пробы;
адаптивный метод случайного поиска.
Были указаны основные достоинства и недостатки
методов случайного поиска, а также алгоритм решения данного класса задач. Был
проведен сравнительный анализ с другими методами, предназначенными для решения
данного класса задач.
В программном продукте реализованы следующие
функции:
решение заданной функции методом наилучшей
пробы;
проверка правильности вводимых значений;
вывод результата в объекте;
вывод ошибок, при условии, что вводимые данные
не соответствуют необходимым правилам ввода.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
) Акулич И.Л. Математическое
программирование в примерах и задачах: Учеб. пособие. - М.: Высш. шк., 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 - Окно “Об авторе”
Для выхода из программы необходимо нажать кнопку
“Меню” и в появившейся вкладке выбрать “Выход”.
ПРИЛОЖЕНИЕ Б
Листинг программы
void Start_Click(object sender,
EventArgs e)
{(textBox1.Text == ""
&& textBox3.Text == "" && textBox4.Text ==
"" && textBox5.Text == "")
{.Show("Введите
данные!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxI
con.Error);
}S =
Convert.ToDouble(textBox1.Text);(S <= 0 || S >= 1)
{.Show("Коэффициент сжатия
должен быть в приделах: 0<B<1", "Ошибка", Message
BoxButtons.OK, MessageBoxIcon.Error);
}(textBox1.Text == "" ||
textBox3.Text == "" || textBox4.Text == "" || textBox5.Text
== "")
{.Show("Не все поля были
заполнены!!!", "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
{= new Thread(new
ThreadStart(delegate { Algoritm(); }));.Start();
}
}void Algoritm()
{B =
Convert.ToDouble(textBox1.Text);R = Convert.ToDouble(textBox4.Text);t =
Convert.ToDouble(textBox3.Text);M = 3;N = Convert.ToInt32(textBox5.Text);kol =
0;j = 1;[] x = { 1, 2 };[] y1 = new double[2];[] y2 = new double[2];[] y3 = new
double[2];[] ym = new double[2];X=0;Y1=0;Y2=0;Y3=0;Ym=0;kor1 = 0;kor2 = 0;kor3
= 0;("x0=(" + x[0] + ";" + x[1] +
")");("B=" + B);("M=" + M);("R=" +
R);("N=" + N);("Положить k=0, j=1");[] v1 = new
double[2];[] v2 = new double[2];[] v3 = new double[2];n = 0;:(n == 10)
{[0] = -0.111;[1] = -0.388;[0] =
0.227;[1] = 0.931;[0] = 0.929;[1] = 0.17;= 0;
}(n == 9)
{[0] = -0.235;[1] = -0.331;[0] =
0.722;[1] = 0.999;[0] = 0.989;[1] = 0.07;++;
}(n == 8)
{[0] = 0.1;[1] = 0.999;[0] =
0.932;[1] = 0.459;[0] = -0.519;[1] = -0.204;++;
}(n == 7)
{[0] = 0.374;[1] = 0.451;[0] =
-0.899;[1] = -0.129;[0] = -0.12;[1] = 0.921;++;
}(n == 6)
{[0] = -0.593;[1] = 0.741;[0] =
0.888;[1] = 0.011;[0] = -0.333;[1] = -0.296;++;
}(n == 5)
{[0] = -0.07;[1] = -0.971;[0] =
0.507;[1] = 0.537;[0] = 0.909;[1] = 0.022;++;
}(n == 4)
{[0] = 0.507;[1] = 0.537;[0] =
-0.587;[1] = 0.461;[0] = 0.911;[1] = 0.018;++;
}(n == 3)
{[0] = 0.05;[1] = 0.171;[0] =
0.251;[1] = -0.447;[0] = -0.812;[1] = 0.102;++;
}(n == 2)
{[0] = 0.674;[1] = 0.551;[0] =
-0.824;[1] = -0.193;[0] = -0.08;[1] = 0.917;++;
}( n == 1 )
{[0] = 0.168;[1] = -0.727;[0] =
-0.478;[1] = -0.214;[0] = -0.361;[1] = 0.112;++;
}(n == 0)
{[0] = 0.843;[1] = 0.374;2[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);[1] = x[1] + t * (v1[1] / kor1);("Вектор 1=(" + v1[0] +
";" + v1[1] + ")");= Math.Sqrt((Math.Pow(v2[0], 2) + Math.Pow(v2[1],
2)));//Вычесление длинны вектора[0] = x[0] + t * (v2[0] / kor2);[1] = x[1] + t
* (v2[1] / kor2);("Вектор 2=(" + v2[0] + ";" + v2[1] +
")");= Math.Sqrt((Math.Pow(v3[0], 2) + Math.Pow(v3[1],
2)));//Вычесление длинны вектора[0] = x[0] + t * (v3[0] / kor3);[1] = x[1] + t
* (v3[1] / kor3);("Вектор 3=(" + v3[0] + ";" + v3[1] +
")");("3)\ny1=(" + y1[0] + ";" + y1[1] +
")");("y2=(" + y2[0] + ";" + y2[1] +
")");("y3=(" + y3[0] + ";" + y3[1] +
")");= Math.Round(Func(x[0], x[1]), 3);= Math.Round(Func(y1[0],
y1[1]), 3);= Math.Round(Func(y2[0], y2[1]), 3);= Math.Round(Func(y3[0], y3[1]),
3);("f(y1)=" + Y1);("f(y2)=" + Y2);("f(y3)=" +
Y3);(Y1 < Y2 && Y1 < Y3)
{= Y1;.CopyTo(ym, 0);
}(Y2 < Y1 && Y2 < Y3)
{= Y2;.CopyTo(ym, 0);
}(Y3 < Y2 && Y3 < Y1)
{= Y3;.CopyTo(ym, 0);
}(Ym < X)
{("4)\nf(y)=" + Ym +
"< f(x)=" + X + " Шаг удачный");.CopyTo(x,
0);//xk+1=ym++;("Проверяем условие
окончания:");
if (kol
< N)
{("k < N");= 1;P;
}
{("k = N");("Поиск
завершен\nх*=(" + x[0] + ";" + x[1] + ")\nF(x*)=" + Ym
+ "\nВсего итераций:" + kol);.Abort();
}
}
{("5)f(y)=" + Ym +
">= f(x)=" + X +"Шаг
неудачный
\nПроверяем
условие
окончания");(t
<= R)
{("t <= R");("Поиск
завершен\nх*=(" + x[0]
+ ";" + x[1] +
")\nF(x*)="
+ Ym + "\nВсего
итераций:" + kol);
potok.Abort();
}
{("t > R");= B * t;=
1;P;
}
}
}
//Выходvoid Exit_Click(object
sender, EventArgs e)
{
//th.Abort();.Exit();
}void
очиститьПоляToolStripMenuItem_Click(object sender, EventArgs e)
{.Clear();.Text = "";.Text
= "";.Text = "";.Text = "";
}void выходToolStripMenuItem_Click(object
sender, EventArgs e)
{.Close();
}void
алгоритмToolStripMenuItem_Click(object sender, EventArgs e)
{s = new Form2();.Show();
}void
обАвтореToolStripMenuItem_Click(object sender, EventArgs e)
{a = new Form3();.Show();
}