Скачиваний:
6
Добавлен:
01.05.2014
Размер:
105.47 Кб
Скачать

Цель работы

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

Начальные данные

В программе используется метод Пауэлла-1;

Функция f(x)

Начальная точка x1

Значение минимума x*

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

4)Создать систему поисковых направлений P={e1,e2,e1}, гдеe1,e2 координатные орты

основной этап:

шаг 1: выполнить nодномерных поисков вдоль системы изnлинейно независимых направленийPспустились из точкиx0 в точкуxn+1

шаг 2: найти новое поисковое направление dk=xn+1-x0;

шаг 3: перейти в новую точку xn+2=xn+1+ αk+1 *dk

шаг 4: проверить критерий окончания поиска ||||<e

если он выполнился, то минимум найден xмин=xk,

иначе

Pk+1={p1k+1=p2k;…;pnk+1} и перейти на шаг 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

Paul1

Находит минимум функции методом Пауелла1

vect&x0

-

Результаты тестирования программы

Функция:

f(x)= (x2 – x12)2 + (1 – x1)2

Погрешность: e=10-4

Начальная точка х1=(1.5, 2)

Изменение точки x:

-x2=[1.000035,0.999982]

ITER=1, Min:1.000035, 0.999982,

Функция:

x13+x22– 3x1– 2x2+ 2

Погрешность: e=10-4

Начальная точка х1=(-1,-1)

Изменение точки x:

x2=[0.312928,0.097923]

x2=[0.926363,0.785706]

x2=[0.999890,0.999879]

ITER=3, Min:1.000001, 1.000001,

Соседние файлы в папке Лабораторная работа №9