Помощь в написании студенческих работ
Антистрессовый сервис

Метод наилучшей пробы

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Рисунок 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 ();

}

Показать весь текст
Заполнить форму текущей работой