Метод сопряженных направлений

Курсовой проект - Математика и статистика

Другие курсовые по предмету Математика и статистика

(5,6)T.

31.Имеем i = 1 = n-1, уn - у2 * у0, поэтому i = i + 1 = 2 и переходим к шагу 2.

22.Получаем у3 = у2 +t2d2 = (5,6)T +t2(0,1)T =(5,6 + t2)T. Найдем минимум функции f(5,6 +t2) = t22 по t2. Очевидно, t2 = 0, а у3 = у2 =(5,6)T.

32.Имеем i = 2 = n, у3 * у1. Перейдем к шагу 4.

4. Находим x1 =y3=(5,6)T, ||х1 -x0|| =4,24>?. Поло-жим d0=dn=d2 = у3-у1 =(5,6)T-(8,6)T =(-3,0)T; . Так как rang =2 = n, то система векторов линейно независима. По-ложим d2 = d2 = (-3,0), d1 = d1 = (0,1), d0 = d0 = (-3,0), k = k +1, i = 0, y0 = x1= =(5,6)T и перейдем к шагу 2.

3. Получаем у1 = y0 + t0d0 = (5,6)T +t0(-3,0)T =(5-3t0, 6)T. Найдем мини-мум функции f(5 - 3t0,6) =36t02 по t0. Так как t0 = 0, то у1 = (5,6)T = у0.

33.Имеем i = 0 < n -1 = 1, поэтому i =i +1 =1 и перейдем к шагу 2.

24. Получаем у2 = у1 +tldl = (5,6)T +t1(0,1)T =(5,6 + t1)T. Минимум функ-ции f(5,6 + t1) = t12 по t1 достигается при t1 = 0. Тогда у2 -(5,6)T = у1 = у0.

34.Имеем i = 1 = n -1, у2 = у0 , поэтому поиск завершается: x* = y2 = (5,6)T; f(x*) = 0.

 

 

Блок схема алгоритма метода сопряженных направлений

 

Рассмотрим алгоритм метода сопряженных направлений, представленный в виде блок схемы. Алгоритм начинается с ввода данных , где x0 - это координата начальной точки, ? - число для окончания алгоритма (? > 0), d1 и d2 -начальные направления поиска (). Выход их алгоритма возможен в трех случаях:

.При минимум функции будет найден в т. .

.При минимум функции будет найден в т. .

.При |||| < минимум функции будет найден в т. .

 

Рисунок 2.1 - Блок схема алгоритма метода сопряженных направлений

 

 

Рисунок 2.1 - Продолжение блок схемы алгоритма методом сопряженных направлений

 

Описание программной части. Выбор среды программирования

 

Для создания программного продукта использовалась интегрированная среда разработки приложений с графическим интерфейсом технологии Win-dows Form Visual Studio 2005 на языке C#.# - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлс-берга в компании Microsoft.# относится к семье языков с C-подобным синтаксисом, из них его син-таксис наиболее близок к C++ и Java.

Переняв многое от своих предшественников - языков C++, Ja-va, Delphi, Модула и Smalltalk - С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддержи-вает множественное наследование классов (в отличие от C++).

Название Си шарп (До диез) происходит от музыкальной нотации, где знак диез, прибавляемый к основному обозначению ноты, означает повышение соответствующего этой ноте звука на полутон.[4] Это аналогично названию языка C++, где ++ обозначает, что переменная должна быть увеличена на 1.

Вследствие технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того обстоятельства, что знак диез ?? не представ-лен на стандартной клавиатуре, знак номера # был выбран для представления знака диез при записи имени языка программирования.[5] Это соглашение отражено в Спецификации Языка C# ECMA-334.[6] Тем не менее, на практике (например, при размещении рекламы и коробочном дизайне[7]), Майкрософт использует предназначенный музыкальный знак.

Названия языков программирования не принято переводить, поэтому зачастую язык называют по-английски Си шарп.

C# является мощным объектным языком с возможностями наследования и универсализации.

C# является наследником языков С/С++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от C++ к С#.

 

Входные и выходные данные

 

После запуска программного продукта для нахождения минимума функции пользователю необходимо ввести данные в элементы управления текстовых полей textbox:

начальная точка x0 записывается в массив, в котором хранятся начальные координаты точки,

[] x = new double[2];[0] = Convert.ToDouble(textX0.Text);[1] = Convert.ToDouble(textX1.Text);

 

где x[0] - это координата x начальной точки, x[1] - координата y.

число ? записывается в переменную E. Значение данного числа должно быть больше нуля. В случае некорректного вода даны, будет показано сообщение об ошибке.

E;= Convert.ToDouble(textE.Text);

 

начальные направления поиска d1, d2, d0 записываются в массивы d1, d2, d0.

[] d1 = new double[2];[] d2 = new double[2];[] d0 = new double[2];[0] = Convert.ToDouble(textD1x0.Text);[1] = Convert.ToDouble(textD1x1.Text);[0] = Convert.ToDouble(textD2x0.Text);[1] = Convert.ToDouble(textD2x1.Text);[0] = d2[0];[1] = d2[1];

 

Выходными значениями будут элементы массива x, в котором хранятся результаты вычислений алгоритма.

richTextBox1.Text += "y3 = y1\nПоиск завершен х* = y3 = (" + y[0].ToString() + ";" + y[1].ToString() + ")\n\n\tВсего итераций " + j.ToString();

 

Описание программы

 

Рассмотрим основные фрагменты программного продукта, реализующий метод сопряженных направлений.

Функция Function содержит в себе математическую формулу для нахождения значения функции: f(x) = x13 + x22 - 3x1 - 2x2 + 2 min.

double Function(double x1, double x2)

{Math.Pow(x1, 3) + Math.Pow(x2, 2) - 3 * x1 - 2 * x2 + 2;

}

 

Нахождение экстремума функции f(yi + ti di ) по ti осуществляется функцией Extremum одним из методов одномерной минимизации: Фибоначи.

double extremum(double[]u) // u[] это d[]

{a = -2 * y[0];b = 2 * y[0];eps = (b-a)/50;l = (b-a)/10;g = 0; //счетчикs; //yw; //z_3: s = (a + b - eps) / 2;= (a + b + eps) / 2;(Function_for_search_extremum(y, u, s) <= Function_for_search_extremum(y, u, w))

{= w;

}

{= s;

}(Math.Abs(b - a) <= l)(a + b) / 2;

{++;step_3;

}

}

 

Функция Function_for_search_extremum необходима для нахождения значения функции при поиске экстремума.

double Function_for_search_extremum(double[] y, double[] u, double t)

{Fx = Math.Pow((y[0] + t * u[0]), 3) + Math.Pow((y[1] + t * u[1]), 2) - 3 * (y[0] + t * u[0]) - 2 * (y[1] + t * u[1]) + 2;Fx;

}

 

&nbs