Метод сопряженных направлений
Курсовой проект - Математика и статистика
Другие курсовые по предмету Математика и статистика
(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