Градиентные методы для решения систем линейных уравнений

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

Рубрика Экономико-математическое моделирование
Вид курсовая работа
Язык русский
Дата добавления 09.02.2013
Размер файла 427,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Градиентные методы для решения СЛАУ

Введение

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

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

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

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

К решению систем линейных уравнений сводятся многие химические задачи. В частности, когда рассматриваются свойства смесей компонентов, имеющие аддитивный характер. Вот несколько примеров. Известно, что светопоглощение вещества в растворе описывается законом Бугера-Ламберта-Бера:

где Dл - это оптическая плотность раствора при длине волны света л, с - молярная концентрация вещества в растворе, l - толщина слоя раствора, через который проходит свет, е - молярный коэффициент светопоглощения (молярный коэффициент экстинкции), зависящий от длины волны падающего света.

Если в растворе поглощает несколько веществ, то оптические плотности веществ складываются (оптическая плотность - аддитивное свойство). Обозначим через Dij оптическую плотность, которую имеет j-й компонент раствора при длине световой волны лi ij - молярный коэффициент светопоглощения j-го компонента раствора при длине световой волны лi)

Тогда общая оптическая плотность раствора при длине световой волны лi (Di) будет равна сумме по всем M компонентам:

Если измерить оптическую плотность раствора на M различных длинах волн, то можно получить систему из M линейных уравнений с M неизвестными концентрациями и использовать ее для их расчета.

Матрицу коэффициентов образуют значения молярной экстинкции каждого из компонента на всех длинах волн, а вектор-столбец свободных членов - отношения общего светопоглощения растворов при различных длинах волн к длине кюветы:

Другой пример - масс-спектрометрическое определение состава смеси газов по интенсивности пиков Метод масс-спектроскопии основан на ударной ионизации молекул вещества и наблюдению за отклонением потока ионизированных частиц в электрическом поле. Ионизированные частицы отклоняются в соответствии с величиной где m - масса иона, e - его заряд. Для каждого вещества состав и соотношение продуктов ионизации индивидуален (так же как и оптический спектр вещества). Абсолютная высота i-го пика с определенным соотношением (интенсивность) определяется парциальным давлением газа в смеси.

Si - есть интенсивность i-го пика в масс-спектре вещества с парциальным давлением, равным единице, этот параметр называют коэффициентом чувствительности. Для различных веществ набор пиков масс-спектра и их интенсивность являются индивидуальными.

В результате экспериментов получены следующие данные:

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

1. Метод покоординатного спуска

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

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

Зафиксируем теперь все координаты, кроме , и рассмотрим функцию этой переменной . Снова решая одномерную задачу оптимизации, находим ее наименьшее значение при , т.е. в точке .

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

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

Точка  описывает начальное приближение. Проводя спуск по координате , попадем в точку . Далее, двигаясь параллельно оси ординат, придем в точку  и т.д.

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

Для гладких функций при удачно выбранном начальном приближении (в некоторой окрестности минимума) процесс сходится к минимуму. К достоинствам метода покоординатного спуска следует также отнести возможность использования простых алгоритмов одномерной оптимизации.

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

Критерий останова

Критерии остановки процесса приближенного нахождения минимума могут быть основаны на различных соображениях. Некоторые из них:

Здесь  - значение, полученное после - го шага оптимизации,  - наперед заданное положительное число.

Реализация

Для одномерной оптимизации будем использовать метод дихотомии. Поиск минимума функции одной переменной будем производить на отрезке . За условие останова примем близость концов отрезка: , где и - правая и левая границы отрезка соответственно.

Применим метод покоординатного спуска для решения системы

,

где .

C помощью метода покоординатного спуска решение этой системы

получается за четыре итерации.

const double EPS = 1e-7;

double f (double X, vector<double> values, int pos) {

values[pos] = X;

return sqr (fabs(13 * values[0] + 14 * values[1] - 11)) + sqr (fabs(14* values[0] - 13* values[1] - 15)) + sqr (fabs(15 * values[2] - 19));

}

 // дихотомия для одномерной оптимизации

void binarySearch (vector<double> &values, int now) {

double l = - (1<<30), r = (1<<30), m1, m2;

for (; fabs(r - l) > EPS;) {

m1 = l + (r - l) / 3;

m2 = r - (r - l) / 3;

if (f(m1, values, now) - f (m2, values, now) > EPS) {

l = m1;

} else {

r = m2;

}

}

values[now] = m1;

}

 // покоординатный спуск

void Coords (vector<double> &answer) {

double prevValue = f (answer[0], answer, 0) + 100, nextValue = f (answer[0], answer, 0);

int i = 0;

while (fabs(nextValue - prevValue) > EPS) {

prevValue = nextValue;

binarySearch (answer, i);

i = (i + 1)% answer.sz;

nextValue = f (answer[0], answer, 0);

}

}

Пакетная реализация

2. Метод сопряженных градиентов

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

Определение. Два - мерных вектора и называют сопряженными по отношению к матрице (или -сопряженными), если скалярное произведение . Здесь - симметрическая положительно определенная матрица размером .

Предполагается, что квадратичная функция имеет вид:

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

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

Итерация метода сопряженных градиентов состоит в вычислении очередного приближения к точному решению

где

- очередное приближение

- приближение, построенное на предыдущем шаге

- скалярный шаг

- вектор направления.

Алгоритм

Перед выполнением первой итерации и полагаются равными нулю, а для вектора устанавливается значение

1. Вычисление градиента

2. Вычисление вектора направления

3. Вычисление величины смещения по заданному направлению

4. Вычисление нового приближения

Сходимость метода

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

Критерий останова

Критерий останова одномерного поиска вдоль каждого из направлений записывается в виде:

.

Реализация

Применим метод сопряжённых градиентов для решения системы

,

где .

C помощью метода сопряжённых градиентов решение этой системы

получается за три итерации.

const double EPS = 1e-7;

 // скалярное произведение

double inner_prod (vector<double> a, vector<double> b) {

double ans = 0;

for (int i = 0; i < a.sz; i++) {

ans += a[i] * b[i];

}

return ans;

}

 // вычисление градиента

vector<double> grad (vector<vector<double> > A, vector<double> B, vector<double> X) {

vector<double> ans (B.sz, 0);

for (int i = 0; i < X.sz; i++) {

for (int j = 0; j < X.sz; j++) {

ans[i] += A[j] [i] * X[j];

}

}

for (int i = 0; i < ans.sz; i++) {

ans[i] = B[i] - ans[i];

}

return ans;

}

double conv (vector<double> g) {

return inner_prod (g, g);

}

 // приближение ответа

vector<double> nextApp (vector<double> prev, double len, vector<double> dir) {

vector<double> ans = prev;

for (int i = 0; i < prev.sz; i++) {

ans[i] += dir[i] * len;

}

return ans;

}

вычисление направление движения

vector<double> direction (vector<double> dir, vector<double> prev, vector<double> now) {

double a = inner_prod (prev, prev), b = inner_prod (now, now);

for (int i = 0; i < dir.sz; i++) {

dir[i] *= (b / a);

dir[i] -= now[i];

}

return dir;

}

 // длина шага в заданном направлении

double length (vector<double> dir, vector<double> grad, vector<vector<double> > A) {

double a = 0;

vector<double> B (dir.sz, 0);

for (int i = 0; i < grad.sz; i++) {

a += grad[i] * dir[i];

}

for (int i = 0; i < dir.sz; i++) {

for (int j = 0; j < A[i].sz; j++) {

B[i] += dir[j] * A[j] [i];

}

}

return a / inner_prod (B, dir);

}

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

void ConGrad (vector<vector<double> > A, vector<double> B, vector<double> &X) {

vector<double> gP = B, d (B.sz, 0), gN = B, c;

double s;

while (conv(gN) > EPS) {

gN = grad (A, B, X);

if (conv(gN) < EPS) break;

d = direction (d, gP, gN);

s = length (d, gN, A);

X = nextApp (X, s, d);

gP = gN;

}

}

3. Сравнение методов

Рассмотрим недостатки и преимущества каждого из рассмотренных методов.

Метод покоординатного спуска

Преимущества:

· Простота реализации.

· Хорошо работает на гладких сепарабельных функциях и особенно на квадратичных, линии уровня которых похожи на концентрические круги.

· Возможность использования простых функций для одномерной оптимизации.

Недостатки:

· При движении вдоль «оврага» скорость сходи мости значительно снижается.

· При попадании в локальный минимум невозможен дальнейший поиск глобального минимума.

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

Преимущества:

· Простота реализации.

· Высокая скорость работы

· Не требует явного вычисления производных

Недостатки:

· При попадании в локальный минимум невозможен дальнейший поиск глобального минимума.

Для сравнения скорости работы этих методов была выбрана задача поиска решения системы .Ниже представлено количество операций для решения системы заданного размера для каждого из методов.

Метод покоординатного спуска

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

2

1111

2

5

8218

5

20

3432

21

50

6630

64

75

5235

102

4. Решение задачи

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

#include <vector>

#include <cstdio>

#include <iostream>

#include <algorithm>

#include <ctime>

#include <cmath>

using namespace std;

#define sz size()

#define all(x) (x).begin(), (x).end()

#define pb push_back

#define mp make_pair

#define X first

#define Y second

#define sqr(x) ((x)*(x))

const double EPS = 1e-7;

 // скалярное произведение

double inner_prod (vector<double> a, vector<double> b) {

double ans = 0;

for (int i = 0; i < a.sz; i++) {

ans += a[i] * b[i];

}

return ans;

}

 // вычисление градиента

vector<double> grad (vector<vector<double> > A, vector<double> B, vector<double> X) {

vector<double> ans (B.sz, 0);

for (int i = 0; i < X.sz; i++) {

for (int j = 0; j < X.sz; j++) {

ans[i] += A[j] [i] * X[j];

}

}

for (int i = 0; i < ans.sz; i++) {

ans[i] = B[i] - ans[i];

}

return ans;

}

double conv (vector<double> g) {

return inner_prod (g, g);

}

 // приближение ответа

vector<double> nextApp (vector<double> prev, double len, vector<double> dir) {

vector<double> ans = prev;

for (int i = 0; i < prev.sz; i++) {

ans[i] += dir[i] * len;

}

return ans;

}

 // вычисление направление движения

vector<double> direction (vector<double> dir, vector<double> prev, vector<double> now) {

double a = inner_prod (prev, prev), b = inner_prod (now, now);

for (int i = 0; i < dir.sz; i++) {

dir[i] *= (b / a);

dir[i] -= now[i];

}

return dir;

}

 // длина шага в заданном направлении

double length (vector<double> dir, vector<double> grad, vector<vector<double> > A) {

double a = 0;

vector<double> B (dir.sz, 0);

for (int i = 0; i < grad.sz; i++) {

a += grad[i] * dir[i];

}

for (int i = 0; i < dir.sz; i++) {

for (int j = 0; j < A[i].sz; j++) {

B[i] += dir[j] * A[j] [i];

}

}

return a / inner_prod (B, dir);

}

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

void ConGrad (vector<vector<double> > A, vector<double> B, vector<double> &X) {

vector<double> gP = B, d (B.sz, 0), gN = B, c;

double s;

while (conv(gN) > EPS) {

gN = grad (A, B, X);

if (conv(gN) < EPS) break;

d = direction (d, gP, gN);

s = length (d, gN, A);

X = nextApp (X, s, d);

gP = gN;

}

}

int main() {

int n;

cin >> n;

vector<vector<double> > A(n);

vector<double> B(n), X(n);

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

cin >> A[i] [j];

}

}

for (int i = 0; i < n; i++) {

cin >> B[i];

}

ConGrad (A, B, X);

for (int i = 0; i < n; i++) {

printf («%.4lf\n», X[i]);

}

return 0;

}

Получили следующий ответ: , он и является ответом на поставленную задачу.

Заключение

В настоящее время теория экстремальных задач обогатилась фундаментальными результатами, появились ее новые разделы. В любой практической оптимизационной задаче существует много совпадающих этапов. Наиболее важным этапом является моделирование рассматриваемой физической ситуации с целью получения математической функции, которую необходимо минимизировать, а также определения ограничений, если таковые существуют. Затем следует выбрать подходящую процедуру для осуществления минимизации. Эта процедура должна быть реализована на практике, что во многих реальных случаях вынуждает использовать ЭВМ для выполнения большого объема вычислений. Не случайно, что многие важные методы оптимизации были разработаны в течение трех последних десятилетий, в период появления цифровых ЭВМ, и эти методы являются машинными. Трудно считать их сколько-нибудь практически значимыми без большой скорости и эффективности вычислительных машин, имеющихся в нашем распоряжении. На многих универсальных ЭВМ имеются пакеты программ оптимизации, реализующие эти методы. Они могут оказаться весьма эффективными и позволят решить широкий круг задач.

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

минимизация градиент покоординатный программа

Список литературы

минимизация градиент покоординатный программа

1. Пантелеев А.А. Методы оптимизации в примерах и задачах. - М.: Высшая школа

2. Коршунов Ю.М., Коршунов Ю.М. Математические основы кибернетики. - М.: Энергоатомиздат

3. Максимов Ю.А. Алгоритмы линейного и дискретного программирования. - М.: МИФИ

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

5. А.А. Самарский, А.В. Гулин. Численные методы. М.: «Наука»

6. Н.Н. Калиткин. Численные методы. М.: «Наука»

Размещено на Allbest.ru


Подобные документы

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

    контрольная работа [474,2 K], добавлен 19.05.2014

  • Аналитическое определение экстремума функции одной и нескольких переменных. Расчет оптимальной долговечности изделия аналитическим методом. Решение одно- и многомерной задачи оптимизации численными методами. Поиск оптимального вложения инвестиций.

    лабораторная работа [914,5 K], добавлен 02.10.2012

  • Представление матрицы в виде произведения унитарной и верхнетреугольной матрицы. Листинг программы. Зависимость погрешности от размерности матрицы на примере метода Холецкого. Приближенные методы решения алгебраических систем. Суть метода Зейделя.

    контрольная работа [630,5 K], добавлен 19.05.2014

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

    курсовая работа [468,7 K], добавлен 10.04.2011

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

    методичка [955,1 K], добавлен 19.06.2015

  • Алгоритм решения оптимизационной задачи линейного программирования (ЗЛП) – планирования производства симплекс методом и при помощи средства "Поиск решения" в Microsoft Excel. Описание работы, графический интерфейс и схема программы для решения ЗЛП.

    дипломная работа [2,3 M], добавлен 19.09.2010

  • Исследование методом Жордана-Гаусса системы линейных уравнений. Решение графическим и симплексным методом задач линейного программирования. Экономико-математическая модель задачи на максимум прибыли и нахождение оптимального плана выпуска продукции.

    контрольная работа [177,8 K], добавлен 02.02.2010

  • Решение задачи оптимального закрепления грузоотправителей (ГО) за грузополучателями (ГП) и распределения груза для минимизации транспортной работы методами линейного программирования с использованием MS Excel. Расчет кратчайшего расстояния между ГО и ГП.

    курсовая работа [357,4 K], добавлен 06.03.2013

  • Применение линейного программирования для решения транспортной задачи. Свойство системы ограничений, опорное решение задачи. Методы построения начального опорного решения. Распределительный метод, алгоритм решения транспортной задачи методом потенциалов.

    реферат [4,1 M], добавлен 09.03.2011

  • Способы решения задач линейного программирования с вещественными числами симплекс-методом. Общие задачи, формы записи, максимизация и минимизация функции методом искусственного базиса. Пути поиска и исключения из базиса искусственных переменных.

    контрольная работа [130,6 K], добавлен 09.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.