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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Приднестровский государственный университет им. Т.Г. Шевченко

Инженерно-технический институт

Кафедра информационных технологий и автоматизированного

управления производственными процессами

КУРСОВАЯ РАБОТА

по дисциплине «Математическое программирование»

тема: «МЕТОД НАИЛУЧШЕЙ ПРОБЫ»

Работу выполнил:

студент группы ИТ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< B<1», «Ошибка», MessageBoxButtons. OK, MessageBoxIcon. Error);

}

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< B<1», «Ошибка», Message BoxButtons. OK, MessageBoxIcon. Error);

}

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 ();

}

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