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

Принцип метода случайного поиска. Методы наилучшей пробы и его результаты. Блок-схема алгоритма метода наилучшей пробы. Выбор среды программирования, входные и выходные данные, описание программы и результаты её работы. Использование в работе языка C#.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.06.2012
Размер файла 812,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

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

студент группы ИТ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,91407963398224;2,40553473678453)

y2=(1,24301408746329;2,9700227591631)

y3=(0,632201543899193;1,07009446948098)

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,13923276919031;1,43121134811628)

y2=(1,00137380066825;1,99691748086571)

y3=(0,958989675300652;2,70185073504585)

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,3925433489388;2,7966823731956)

y2=(1,31236448061059;2,26459902731763)

y3=(1,8603687032674;3,02119628010338)

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,56598291444603;3,38984568723033)

y2=(2,69512406997668;2,25782347955443)

y3=(1,77936220453972;2,87370759084179)

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,99024253690995;3,83920942936667)

y2=(2,07995199875453;3,77154969427255)

y3=(3,18386231658711;3,40205406180612)

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,13942562874768;2,78565372049062)

y2=(3,60812193905102;3,85141780394245)

y3=(3,80168139710641;3,41700677882638)

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,22198099450301;4,3339311933355)

y2=(4,22607452927095;3,85907262206455)

y3=(3,14622298010452;3,44084095154556)

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,62056609668037;4,33478304158767)

y2=(3,61434029772258;3,77129318283236)

y3=(4,14622825185625;4,47189280122236)

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,68212033952824;4,94970992763789)

y2=(5,17497767685909;4,60782479620358)

y3=(4,04540209301062;4,10870701702384)

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,32435671526554;4,44579605686788)

y2=(5,04411823661013;5,45059067443126)

y3=(5,2985781633938;4,99334192730482)

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,60901945041116;5,7012111417641)

y2=(5,19430094266245;6,05006473959406)

y3=(4,81681879073984;4,87590905657051)

f(y1)=1,573

f(y2)=0,154

f(y3)=1,398

4)

f(y)=0,154< f(x)=0,31 Шаг удачный

Проверяем условие окончания:

k = N

Поиск завершен

х*=(5,19430094266245;6,05006473959406)

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

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.