Цель работы
Исследование прямых методов многомерной минимизации и разработка программы, удовлетворяющей требованиям лабораторной работы 5.
Начальные данные
В программе используется метод Пауэлла-1;
Функция f(x) |
Начальная точка x1 |
Значение минимума x* |
(x2 – x12)2 + (1 – x1)2 |
(1.5; 2) (0; 0) (–1.2; 1) |
(1; 1) |
x13 + x22 – 3x1 – 2x2 + 2 |
(0; 0) (–1; –1) |
(1; 1) |
Краткое описание метода
начальный этап:
1)установить значение счетчика к=1;
2)задать точность вычислений е=10-4 – 10-7
3)задать начальную точку x0;
основной этап:
шаг 1: построить направление поиска:
где
шаг 2: найти αk, по направлению pk, как результат одномерной минимизации.
шаг 3: положить к=к+1 и перейти в новую точку xk+1= xk+ αk * pk
шаг 4: проверить критерий окончания поиска ||||<e
если он выполнился, то минимум найден xмин= xk, иначе перейти на шаг 1.
Спецификация программы
Глобальные переменные:
int z=0;//выбор функции
Int dlin;//число переменных
Классы:
class vect //класс вектор
{
public:
unsigned short n; //длина вектора
double * x;
vect()//конструктор по умолчанию
vect(unsigned short dlin) {n=dlin;if(n!=0) x=new double [n];else x=0;} //создание вектора длины n без инициализации
vect (vect &a) //конструктор копирования
vect operator = (vect &a) //конструктор копирования
vect mult(double c) //метод класса, для умножения вектора на число
vect sum(vect a) //метод класса, для подсчета суммы векторов
vect razn(vect a) //метод класса, для подсчета разности векторов
double pr_ch(vect b)// метод для перемножения векторов
double norm()//подсчет нормы вектора
}
class matr//класс матрица
{
public:
unsigned short n;//размерность
double * x;
matr(unsigned short dlin=0)
matr (matr &a) // метод для копирования матриц
matr operator = (matr &a)// метод для копирования матриц
double & e(unsigned short i,unsigned short j )// метод для определения элемента матрицы
matr multm(matr &a, matr &res)// метод для перемножения матриц
matr sum(matr a, matr b)// метод для сложения матриц
matr mult(double c)// метод для перемножения матрицы на число
vect mult(vect &a)// метод для перемножения матрицы на столбец
vect mult(vect &a)// метод для перемножения матрицы на столбец
Спецификация функций
Имя функции |
Назначение |
Входные параметры |
Возвращаемое значение |
main |
главная функция |
- |
- |
у |
вычисляет значение текущей функции в данной точке |
vect &v |
double |
next |
вычисляет значение текущей функции в точке полученной перемещением из данной точки, на данное расстояние, по заданному направлению |
double a, vect &x0, vect &p |
double |
dy |
вычисляет значение производной текущей функции в из данной точки, на данное расстояние, по заданному направлению |
double a, vect &x0, vect & p |
double
|
grad |
вычисляет градиент в заданой точке |
vect & point |
vect
|
Swann4 |
находит начальный интервал методом Свенна4 |
double a0,vect &x0, vect & p, double &x1, double &x2 |
- |
Davidon |
находит минимум по заданному направлению методом Давидона |
vect &x0, vect & p, double *al |
- |
step |
осуществляет шаг метода Коши |
vect &x0 |
vec
|
Dikson |
Находит минимум функции методом Диксона |
vect &x0 |
- |
Результаты тестирования программы
Функция:
f(x)= 8x12 + 4x1x2 + 5x22
Погрешность: e=10-4
Начальная точка х1=(0, 0)
Изменение точки x:
-1.245283, 2.128302,
0.143840, 0.143840,
-0.017912, 0.030614,
0.002069, 0.002069,
-0.000258, 0.000440,
0.000030, 0.000030,
-0.000004, 0.000006,
ITER=8, Min:-0.000004, 0.000006,
Функция:
f(x)= [1.5 – x1(1 – x2)]2 + [2.25 – x1(1 – x22)]2 + + [2.625 – x1(1 – x23)]2
Погрешность: e=10-4
Начальная точка х1=(3,0.5)
Изменение точки x:
2.125000, 0.000000,
2.125000, 0.214965,
2.363116, 0.214965,
2.363116, 0.301556,
2.498121, 0.301556,
2.498121, 0.349412,
2.589063, 0.349412,
2.589063, 0.380329,
2.655878, 0.380329,
2.655878, 0.402146,
2.707538, 0.402146,
2.707538, 0.418426,
2.748823, 0.418424,
2.748824, 0.431045,
2.782600, 0.431044,
2.782600, 0.441103,
2.810706, 0.441103,
2.810706, 0.449287,
2.834396, 0.449287,
2.834397, 0.456053,
2.854567, 0.456053,
2.854567, 0.461719,
2.871879, 0.461719,
2.871879, 0.466512,
2.886835, 0.466512,
2.886835, 0.470601,
2.899825, 0.470601,
2.899825, 0.474113,
2.911158, 0.474113,
2.911158, 0.477148,
2.921083, 0.477148,
2.921083, 0.479784,
2.929803, 0.479784,
2.929803, 0.482082,
2.937486, 0.482082,
2.937486, 0.484093,
2.944270, 0.484093,
2.944270, 0.485859,
2.950273, 0.485859,
2.950273, 0.487413,
2.955594, 0.487413,
2.955594, 0.488785,
2.960318, 0.488785,
2.960318, 0.489997,
2.964517, 0.489997,
2.964517, 0.491071,
2.968255, 0.491071,
2.968255, 0.492024,
2.971586, 0.492024,
2.971586, 0.492871,
2.974557, 0.492871,
2.974557, 0.493624,
2.977208, 0.493624,
2.977208, 0.494295,
2.979576, 0.494295,
2.979576, 0.494893,
2.981692, 0.494892,
2.981692, 0.495426,
2.983585, 0.495426,
2.983585, 0.495902,
2.985279, 0.495902,
2.985279, 0.496327,
2.986795, 0.496327,
2.986795, 0.496708,
2.988153, 0.496708,
2.988153, 0.497048,
2.989370, 0.497048,
2.989370, 0.497353,
2.990460, 0.497352,
2.990460, 0.497625,
2.991437, 0.497625,
2.991437, 0.497869,
2.992314, 0.497869,
2.992314, 0.498088,
2.993099, 0.498088,
2.993099, 0.498284,
2.993804, 0.498284,
2.993804, 0.498460,
2.994436, 0.498460,
2.994436, 0.498617,
2.995004, 0.498617,
2.995004, 0.498758,
2.995513, 0.498758,
2.995513, 0.498885,
2.995970, 0.498885,
2.995970, 0.498999,
2.996380, 0.498999,
2.996380, 0.499101,
2.996748, 0.499101,
2.996748, 0.499193,
2.997079, 0.499193,
2.997079, 0.499275,
2.997376, 0.499275,
2.997376, 0.499349,
2.997643, 0.499349,
2.997643, 0.499415,
2.997883, 0.499415,
2.997883, 0.499475,
2.998098, 0.499475,
2.998098, 0.499528,
2.998291, 0.499528,
2.998291, 0.499576,
2.998465, 0.499576,
2.998465, 0.499619,
2.998621, 0.499619,
2.998621, 0.499658,
2.998761, 0.499658,
2.998761, 0.499692,
2.998886, 0.499692,
2.998886, 0.499724,
2.998999, 0.499724,
2.998999, 0.499752,
2.999101, 0.499752,
2.999101, 0.499777,
2.999191, 0.499777,
2.999192, 0.499799,
2.999273, 0.499799,
2.999273, 0.499820,
2.999346, 0.499820,
2.999346, 0.499838,
2.999412, 0.499838,
2.999412, 0.499854,
2.999472, 0.499854,
2.999472, 0.499869,
2.999525, 0.499869,
2.999525, 0.499882,
2.999572, 0.499882,
2.999572, 0.499894,
2.999615, 0.499894,
2.999615, 0.499905,
2.999654, 0.499905,
2.999654, 0.499914,
2.999688, 0.499914,
2.999688, 0.499923,
ITER=135, Min:2.999688, 0.499923,