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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Математика
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,64 Мб
  • Опубликовано:
    2012-07-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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















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


Введение

сопряженный направление пауэлл квадратичный

Оптимизация как раздел математики существует достаточно давно. Оптимизация - это выбор, т.е. то, чем постоянно приходиться заниматься в повседневной жизни. Термином «оптимизация» в литературе обозначает процесс или последовательность операций, позволяющих получить уточненное решение. Хотя конечной целью оптимизации является отыскание наилучшего или «оптимального» решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. Поэтому под оптимизацией понимают скорее стремление к совершенству, которое, возможно, и не будет достигнуто.

Необходимость принятия наилучших решений так же стара, как само человечество. Испокон веку люди, приступая к осуществлению своих мероприятий, раздумывали над их возможными последствиями и принимали решения, выбирая тем или другим образом зависящие от них параметры - способы организации мероприятий. Но до поры, до времени решения могли приниматься без специального математического анализа, просто на основе опыта и здравого смысла.

Цель данной курсовой работы:

проанализировать и обработать теоретические и экспериментальные данные по теме метод сопряженных направлений;

анализ собранной информации;

сравнительный анализ с другими методами;

разработка программы, реализующая данный метод.


Метод сопряженных направлений. Постановка задачи

Требуется найти безусловный минимум функции f(x) многих переменных, т.е. найти точку

Определение. Пусть H - симметрическая матрица размера n x n. Векторы  называются H-сопряженными или просто сопряженными, если  при всех .

Стратегия поиска

В методе сопряженных направлений (методе Пауэлла [Powell M.J.D.] ) используется факт, что минимум квадратичной функции может быть найден не более чем за n шагов при условии, что поиск ведется вдоль сопряженных относительно матрицы Гессе направлений. Так как достаточно большой класс целевых функций может быть предоставлен в окрестности точки минимума своей квадратичной аппроксимацией, описанная идея применяется и для неквадратичных функций. Задается начальная точка и направления , совпадающие с координатами. Находится минимум f(x) при последовательном движении по (n + 1) направления с помощью одного из методов одномерной минимизации. При этом полученная ранее точка минимума берется в качестве исходной для поиска по совершенно нового направлению, а направление  используется как при первом , так и последнем поиске. Находится новое направление поиска, сопряженное с . Оно проходит через точки, полученные при последнем поиске. Заменяется  на ,  на  и т.д. Направление  заменяется сопряженным направлением, после чего повторяется поиск по (n+1) направлениям, уже не содержащим старого направления .

Для квадратичных функций последовательностью n2 одномерных поисков приводит к точке минимума (если все операции выполнены точно). Построение сопряженного направления для квадратичной функции при n = 2 изображено на рисунке 1.1. Оно проходит через точки 1 и 3.

Рисунок 1.1 - Построение сопряженного направления для квадратичной функции

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

Шаг 1. Задать начальную точку х 0 , число ε>0 для окончания алгоритма, начальные направления поиска


Положим d0 = dn , i = 0, у0 = х0, k= 0.

Шаг 2. Найти yi+1 = y i +ti di где шаг ti находится в результате поиска ми-нимума функции f(yi+tidi) по ti одним из методов одномерной минимизации.

Шаг 3. Проверить выполнение условий:

а) если i < n -1, положить i= i +1 и перейти к шагу 2;

б)      если I = n -1, проверить успешность поиска по n первым направлениям.

Если у n = у°, то поиск завершить: х* =yn, иначе положить i=i+1 и перей-ти к шагу 2;

в) если i = n, проверить успешность поиска по n последним направле-ниям. Если y n+1 = у 1, поиск завершить: х* = у n+1, иначе перейти к шагу 4 для построения сопряженного направления.

Шаг 4. Положить хk+1 = уn+1 и проверить условие окончания:

а)       если |||хk+1 - хk || | < ε, то поиск завершить: х* = хk+1;

б)      иначе положить: d0 = dn = уn+1 - у1 (новое направление);

 (исключается старое направление).

Если при этом rang (,...,)= п , то новая система направлений линей-но независима. В этом случае положить: di =di , i = 0,1,...,n; k =k +1, i = 0, у0 = xk+i и перейти к шагу 2.

Если rang(,...,)< n, то новая система направлений линейно зави-сима. Тогда следует продолжать поиск в старых направлениях Для этого поло-жить: di =di , i = 0,1,...,n; у0 = xk+1, k = k + 1, i = 0 и перейти к шагу 2.

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

Задать начальную точку , к примеру , число ε > 0  для окончания алгоритма, к примеру ε =0,1, начальные направления поиска:


Положить d0 = d2= , i = 0, у0 = х0, k= 0.

Пример поиска минимума функции методом Пауэлла

Пример. Найти минимум функции f(x) = 4(х1 -5)2 +(х2 -6) → min мето-дом Пауэлла.

□ 1°. Зададим начальную точку х° = (8,9)T,, ε=0,1. По-ложим d0=dn= d2 ; у0 = х0 , i=0, k = 0.

°. Получаем у1 = у0 +t0d0 = (8,9)T + t0(0,1)T = (8,9 + t0)T - Найдем мини-мум функции f(8,9 + t0) = 36 + (3 + t0)2 по t0. Очевидно, t0 = -3, а у1 = (8,6)T.

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

21.  Получаем у2 = у1 + t1d1 = (8,6)T + ti(l,0)T = (8 + t1,6)T. Найдем минимум функции f(8 + t1 , 6) = 4(3 +t1)2 по t1. Очевидно, он достигается при t1 =-3. Тогда у2 =(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 = у31 =(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++ к С#.

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

начальная точка 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;

}

Для вычисления ранга матрицы используется метод Rang_matrici.

int Rang_matrici(double [,]Matrica)

{(Matrica[1,0] != 0)(int i = 1; i < 2; i++)

{mnojitel = (Matrica[0, 0] / Matrica[i, 0]) * (-1);(int j = 0; j < 2; j++)

{[i, j] = Matrica[i,j] * mnojitel + Matrica[i-1, j];

}

}k;y = 0;(int i = 0; i < 2; i++)

{= 0;(int j = 0; j < 2; j++)

{(Matrica[i, j] == 0)++;

}(k == 2)++;

}rang = 2 - y;rang;

}

Запись полученного решения, хранящееся в объекте RichTextBox1, записывается в текстовый файл спомощью функции MenuFileSaveAs().

void MenuFileSaveAs()

{.Filter = "Text files|*.txt";(saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName.Length > 0)

{.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.UnicodePlainText);

}

}

А так же контролируются вводимые данные в элементы управления Text-Box. Пользователь может вводить только цифры и запятую. Проверка осуществляется при нажатии любой клавиши.

void textX0_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57 )).Handled = true;(e.KeyChar == 44).Handled = false;

}

Контрольный пример. Решения задачи методом сопряженных направлений

Найти минимум функции  методом сопряженных направлений Пауэлла.

10     x0 = (8;9)T, , ε = 0,1, y0 = x0 = (8;9)T

i=0, k=0;

0        y1 = y0 +t0 d0 = (8;9)T + t0 (0;1)T = (8, 9 + t0);(8, 9 + t0) = 83 + (9 + t0)2 - 24 - 2(9 + t0) + 2 = t02 + 16t0 + 553;0 = -8; y1 = (8;1)T;

0        Т.к. i < n-1 положим i=1 и перейдем к шагу 2;

1        y2 = y1 + t1 d1 = (8;1)T + t1 (1;0)T = (8 + t1;1)T;(8 + t1;1) = t13 + 24t12 + 189t1;1 = -7; y2 = (1;1);

1        i = n-1; y2 ≠ y0, i =2;

2       y3 = y2 + t2 d2 = (1;1)T + t2 (0;1)T = (1; 1+t2);2 = 0; y3 = (1;1)T;

2        i = n = 2;3 ≠ y1;

0        x1 = y3 = (1;1)T;

Т.к. || (1;1)T - (8;9)T || = 10,63 > ε положим  = d2 = y3 - y1 = (-7;0)T,

 = d2 = (0;1)T;

;

Новая система направлений линейно независима.

d0 =  = (-7;0)T;1 =  = (0;1)T;2 =  = (-7;0)T;= 0, k = 1, y0 = x1 = (1;1)T;

3        y1 = y0 +t0 d0 = (1;1)T + t0 (-7;0)T = (1 - 7t0 ;1);o = 0; y1 = (1;1);

3        i < n-1 положим i=1 и перейдем к шагу 2;

24      y2 = y1 + t1 d1 = (1;1)T + t1 (0;1)T = (1;1 + t1)T;1 = 0; y2 = (1;1);

x* = y2 = (1;1)T.

Результаты работы программы

Найти минимум функции  методом сопряженных направлений программно. Результат работы представлен на рисунке 4.1.

Рисунок 4.1 - Результат нахождения минимума функции метод сопряженных направления программой

Рисунок 4.1 - Продолжение результата нахождения минимума функции методом сопряженных направлений

Заключение

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

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

Данный метод ориентирован на исследование квадратичных функций. Основная его идея заключается в том, что бы, приведя квадратичную функцию n переменных к виду суммы полных квадратов, был найден ее оптимум в результате n одномерных поисков по преобразованным координатным направлениям.

В программном продукте были реализованы следующие функции:

решение заданной функции методом сопряженных направлений;

вывод результата и ход решения в текстовый объект;

вывод ошибок, при условии, что вводимые данные не корректны;

запись решения функции в текстовый файл.

сопряженный направление пауэлль квадратичный

Список использованной литературы

.Акулич И.Л. Математическое программирование в примерах и задачах: Учеб. пособие. - М.: Высш. шк., 1986.

.Банди Б. Методы оптимизации вводный курс. М.: Радио и связь,1988.

.Белецкая С.Ю. Решение задач математического программирования: Учеб. пособие. - Воронеж, 2001.

.Карманов В.Г. Математическое программирование. - М.: Наука, 1975.

.А.В.Пантелеев, Летова Т.А. Методы оптимизации в примерах и задачах: Учебное пособие - 2-е изд., исправл. - M.:Высш. Шк., 2005. - 544с.


Приложение А

Руководство пользователя

Для решения задачи методом сопряженных направлений следует запустить программу, кликнув на файл с названием Метод сопряженных направле-ний.exe.

После запуска программного продукта приложение примет вид как показано на рисунке А.1.

Рисунок А.1 - Главное окно программы

Для решения задачи необходимо заполнить все текстовые поля.

При нажатии на кнопку «Решить» в текстовом объекте richTextBox будет выведено решение метода сопряженных направлений (рис. А.2).

Рисунок А.2. - Пример работы программы

Для сохранения решения задачи нужно нажать на кнопку «Сохранить в файл», после чего откроется диалоговое окно (рис. А.3) для выбора места хранения файла и его (файла) названия. Решение примера будет сохранено в текстовый файл с разрешением *.txt.

Рисунок А.3 - Диалоговое окно сохранения файла.

В данном реализованном продукте можно воспользоваться справкой, где расположен алгоритм решения задачи методом сопряженных направлений. Что бы ее вызвать, нужно нажать на иконку . После чего откроется диалоговое окно с рассоложенной на ней необходимой информацией (рис А.4).

Рисунок А.4 - Диалоговое окно «Справка».

Приложение Б

Листинг программы

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.IO;System.Net;System.Net.Sockets;System.Runtime.Serialization;System.Runtime.Serialization.Formatters;System.Runtime.Serialization.Formatters.Binary;Метод_сопряженных_направлений

{partial class Form1 : Form

{[,] Matrica = new double[2, 2];[] x = new double[2];E;[] d1 = new double[2];[] d2 = new double[2];[] d0 = new double[2];i;k;n = 2;j;[] y = new double[2];[] y1 = new double[2];[] y0 = new double[2];[] x_st = new double[2];[] d1_n = new double[2];[] d2_n = new double[2];[] d0_n = new double[2];Form1()

{();

}void Form1_Load(object sender, EventArgs e)

{

}int Rang_matrici(double [,]Matrica)

{(Matrica[1,0] != 0)(int i = 1; i < 2; i++)

{mnojitel = (Matrica[0, 0] / Matrica[i, 0]) * (-1);(int j = 0; j < 2; j++)

{[i, j] = Matrica[i,j] * mnojitel + Matrica[i-1, j];

}

}k;y = 0;(int i = 0; i < 2; i++)

{= 0;(int j = 0; j < 2; j++)

{(Matrica[i, j] == 0)++;

}(k == 2)++;

}rang = 2 - y;rang;

}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;

}double Function(double x1, double x2)

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

}void button1_Click(object sender, EventArgs e)

{(checkBox1.Checked)

{[0] = 8;[1] = 9;= 0.1;[0] = 1;[1] = 0;[0] = 0;[1] = 1;[0] = d2[0];[1] = d2[1];.Text = x[0].ToString();.Text = x[1].ToString();.Text = E.ToString();x0.Text = d1[0].ToString();x1.Text = d1[1].ToString();x0.Text = d2[0].ToString();x1.Text = d2[1].ToString();

}

{[0] = Convert.ToDouble(textX0.Text);[1] = Convert.ToDouble(textX1.Text);= Convert.ToDouble(textE.Text);[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];

}.Text = "";t=0;= 0;[0] = x[0];[1] = x[1];[0] = y[0];[1] = y[1];= 0;= 0;(E >= 0.1)

{(j==0).Text += "\t\t\tИтерация " + Convert.ToString(j + 1) + "\n\n\tШаг 1. \nНачальная точка х = (" + x[0].ToString() + " ; " + x[1].ToString() + "), ε = " + E.ToString() + "\nd1 = (" + d1[0].ToString() + ";" + d1[1].ToString() + ") d2 = (" + d2[0].ToString() + ";" + d2[1].ToString() + ") d0 = dn\ni = " + i.ToString() + " k=" + k.ToString() + " y = x = (" + x[0].ToString() + ";" + x[1].ToString() + ")\n";_2:(j!=0).Text += "\n\t\t\tИтерация " + Convert.ToString(j + 1) + "\n";(checkBox1.Checked)

{(j)

{0: t = -8; break;1: t = -7; break;2: t = 0; break;3: t = 0; break;4: t = 0; break;

{[0] = y[0] + t * d0[0];[1] = y[1] + t * d0[1];[0] = y[0];[1] = y[1];

}(i == 2)

{[0] = y[0] + t * d2[0];[1] = y[1] + t * d2[1];

}

{[0] = y[0] + t * d1[0];[1] = y[1] + t * d1[1];

}

}

{(i == 0)

{= extremum(d0);[0] = y[0] + t * d0[0];[1] = y[1] + t * d0[1];

}

(i == 2)

{= extremum(d2);[0] = y[0] + t * d2[0];[1] = y[1] + t * d2[1];

}

{= extremum(d1);[0] = y[0] + t * d1[0];[1] = y[1] + t * d1[1];[0] = y[0];[1] = y[1];

}

}++;.Text += "\n\tШаг 2.\n y = (" + y[0].ToString() + " ; " + y[1].ToString() + ")\tt" + i.ToString() + " = " + t.ToString() + "\n";

//Шаг 3.Text += "\n\tШаг 3.\n";(i < n - 1)

{++;.Text += "Т.к. i=" + Convert.ToString(i - 1) + "< n-1 = 1, положим i = i+1 = "+Convert.ToString(i+1);step_2;

}(i == n - 1)

{.Text += "y2=(" + y[0].ToString() + ";" + y[1].ToString() + ")\ty0=(" + y0[0].ToString() + ";" + y0[1].ToString() + ")";(y[0] == y0[0] && y[1] == y0[1])

{

//то поиск завершить.Text += "\ni = "+i.ToString()+"\ni=n-1\ny2=y0\nПоиск завершен х* = (" + y[0].ToString() + ";" + y[1].ToString() + ")\n\n\tВсего итераций " + j.ToString();

}

{.Text += "\ni = "+i.ToString()+"\ni=n-1\ny2 != y0\n Положим i = i+1 = 2 и перейдем к шагу 2\n";++;step_2;

}

}

{(i == n)

{.Text += "\ni = " + i.ToString() + "\ti = n";.Text += "\ny3 = (" + y[0].ToString() + ";" + y[1].ToString() + ")\ty1 = (" + y1[0].ToString() + ";" + y1[1].ToString() + ")";(y[0] == y1[0] && y[1] == y1[1])

{

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

}

{.Text += "\ny3 !=y1\nПерейдем к шагу 4 для построения сопряженного направления";

//step_4:.Text += "\n\n\tШаг 4. \n";_st[0] = x[0];_st[1] = x[1];[0] = y[0];[1] = y[1];.Text += "k = " + k.ToString() + " Положим x_k+1 = y = (" + x[0].ToString() + ";" + x[1].ToString() + ") и проверим условие окончания\n";

(Math.Sqrt(Math.Pow((x_st[0] - x[0]), 2) + Math.Pow((x_st[1] - x[1]), 2)) < E)

{

//то поиск завершить.Text += "||x_k+1 - x_k|| < ε\n||(" + x[0].ToString() + ";" + x[1].ToString() + ") - (" + x_st[0].ToString() + ";" + x_st[1].ToString() + ")|| = " + Math.Sqrt(Math.Pow((x_st[0] - x[0]), 2) + Math.Pow((x_st[1] - x[1]), 2)) + " < " + E.ToString();.Text += "\nПоиск завершен х* = x_k+1 = (" + x[0].ToString() + ";" + x[1].ToString() + ")\n\n\tВсего итераций " + j.ToString();

}

{.Text += "||x_k+1 - x_k|| >= ε\n||(" + x[0].ToString() + ";" + x[1].ToString() + ") - (" + x_st[0].ToString() + ";" + x_st[1].ToString() + ")|| = " + Math.Sqrt(Math.Pow((x_st[0] - x[0]), 2) + Math.Pow((x_st[1] - x[1]), 2)) + " >= " + E.ToString();_n[0] = y[0] - y1[0];_n[1] = y[1] - y1[1];_n[0] = d2_n[0];_n[1] = d2_n[1];_n[0] = d2[0];_n[1] = d2[1];.Text += "\nПоложим новое направление _d0 = _dn = y3-y1 = (" + y[0].ToString() + ";" + y[1].ToString() + ") - (" + y1[0].ToString() + ";" + y1[1].ToString() + ") = (" + d2_n[0].ToString() + ";" + d2_n[1].ToString() + ")\n";.Text += "\nИсключим старое направление _d1 = d2 = (" + d1_n[0].ToString() + ";" + d1_n[1].ToString() + ")";[0, 0] = d1_n[0];[0, 1] = d2_n[0];[1, 0] = d1_n[1];[1, 1] = d2_n[1];(Rang_matrici(Matrica) == n)

{.Text += "Т.к. rang(" + d1_n[0].ToString() + ", " + d1_n[1].ToString() + " ; " + d2_n[0].ToString() + ", " + d2_n[1].ToString() + ")=" + n.ToString() + " новая система направлений линейно независима\n";[0] = d0_n[0];[1] = d0_n[1];[0] = d1_n[0];[1] = d1_n[1];[0] = d2_n[0];[1] = d2_n[1];++;= 0;[0] = x[0];[1] = x[1];[0] = y[0];[1] = y[1];.Text += "Положим \n\td1 = _d1 = (" + d1_n[0].ToString() + ";" + d1_n[1].ToString() + ")\n\t d2 = _d2 = (" + d2_n[0].ToString() + ";" + d2_n[1].ToString() + ")\n\tk=" + k.ToString() + " i=" + i.ToString();.Text += "\ty0=(" + y[0].ToString() + ";" + y[1].ToString() + ")\n";step_2;

}(Rang_matrici(Matrica) < n)

{.Text += "Т.к. rang(" + d1_n[0].ToString() + ", " + d1_n[1].ToString() + " ; " + d2_n[0].ToString() + ", " + d2_n[1].ToString() + ")=" + Rang_matrici(Matrica) + " < " + n.ToString() + " новая система направлений линейно зависима\n";[0] = x[0];[1] = x[1];[0] = y[0];[1] = y[1];++;= 0;.Text += "Положим: k=" + k.ToString() + " i=" + i.ToString() + " y0 = (" + y[0].ToString() + ";" + y[1].ToString() + ") и перейдем к шагу 2\n";step_2;

}

}

}

}

}

}.Show("Введите е >=0,1","Просьба!");

}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;

}

}void button2_Click(object sender, EventArgs e)

{.Clear();.Clear();.Clear();

}void button1_Click_1(object sender, EventArgs e)

{();

}void MenuFileSaveAs()

{.Filter = "Text files|*.txt";(saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName.Length > 0)

{.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.UnicodePlainText);

}

}void textX0_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57 )).Handled = true;(e.KeyChar == 44).Handled = false;

}void textX1_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57)).Handled = true;(e.KeyChar == 44).Handled = false;

}void textE_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57)).Handled = true;(e.KeyChar == 44).Handled = false;

}void textD1x0_KeyPress(object sender, KeyPressEventArgs e)

}void textD1x1_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57)).Handled = true;(e.KeyChar == 44).Handled = false;

}void textD2x0_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57)).Handled = true;(e.KeyChar == 44).Handled = false;

}void textD2x1_KeyPress(object sender, KeyPressEventArgs e)

{(e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57)).Handled = true;(e.KeyChar == 44).Handled = false;

}void panel1_Click(object sender, EventArgs e)

{form = new info();.ShowDialog();

}

}

}

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!