97422

Оптимальное управление инвестициями в двухсекторной экономике

Дипломная

Информатика, кибернетика и программирование

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

Русский

2015-10-18

1.88 MB

5 чел.

Министерство образования и науки Российской Федерации

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Математический факультет

наименование факультета (института)

Кафедра

прикладной математики

наименование кафедры

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Направление подготовки (специальность)

01.03.02 Прикладная математика

код, наименование

и информатика

Оптимальное управление инвестициями в двухсекторной экономике

ОГУ 01.03.02. 1015. 060. ОО

Руководитель направления

д-р техн. наук, профессор

И.П. Болодурина

подпись, дата

инициалы, фамилия

Руководитель программы

д-р техн. наук, профессор

И.П. Болодурина

подпись, дата

инициалы, фамилия

Научный руководитель

д-р техн. наук, профессор

И.П. Болодурина

подпись, дата

инициалы, фамилия

Студент

Е.А. Головацкая

подпись, дата

инициалы, фамилия

Оренбург 2015

Утверждаю

заведующий кафедрой прикладной математики

И.П. Болодурина

подпись

инициалы, фамилия

«___»____________ 2015 г.

ЗАДАНИЕ

на выполнение выпускной квалификационной работы

студенту

Головацкой Елене Александровне

по направлению подготовки

01.03.02 Прикладная математика и информатика

код, наименование

1 Тема ВКР

Оптимальное управление инвестициями в двухсекторной экономике

2 Срок сдачи студентом ВКР

«     »                       2015 г.

3 Цель и задачи ВКР

Целью ВКР является максимизация прироста основных фондов

потребительского сектора на основе необходимых и достаточных условий

оптимального управления. Задачи ВКР: нахождение решения задачи оптимального

управления инвестициями в двухсекторной экономике с помощью принципа максимума

Понтрягина и исследование возможности существования особого управлении; нахождение

решения с помощью процедуры Беллмана в непрерывном времени; разработка и реализация

численного алгоритма решения задачи на основе итерационного метода; исследование

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

разработка и реализация численного алгоритма решения задачи на основе метода проекции

градиента в случае нескольких потребительских секторов.

4 Исходные данные к ВКР

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

двухсекторной экономике.

5 Перечень вопросов, подлежащих разработке

Нахождение решения задачи оптимального

управления инвестициями с помощью принципа максимума и процедуры Беллмана

в непрерывном времени; исследование возможности существования особого режима;

разработка и программная реализация численного алгоритма решения на основе

итерационного метода; использование методов различного порядка точности при

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

реализация численного алгоритма решения задачи в случае нескольких секторов

потребления на основе метода проекции градиента.

Дата выдачи и получения задания

Руководитель ВКР

«___»_____________2015 г.

И.П. Болодурина

подпись

инициалы, фамилия

Студент

«___»_____________2015 г.

Е.А. Головацкая

подпись

инициалы, фамилия


Аннотация

В данной ВКР рассматривается задача оптимального планирования инвестиций в двухсекторной экономике.

Структура ВКР выглядит следующим образом.

В первом разделе дана постановка задачи.

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

В третьем разделе представлено решение задачи на основе процедуры Беллмана в непрерывном времени.

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

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

Работа выполнена на 58 страницах с использованием 20 источников литературы, содержит 8 рисунков, 3 таблицы и 3 приложения.


Annotation

The graduation work considers the optimal planning problem of investments in a two-sector economy.

The graduation work has the following form.

The first part contains the statement of the problem.

The second part is devoted to the application of Pontryagin’s maximum principle to the problem under consideration.

The third part considers the solution of the problem based on continuous time Bellman equation.

The forth part is devoted to the numerical solution of the problem and the analysis of the results of developed software product.

The fifth part considers the problem of the optimal planning of investments in the case of several consumer sectors.

The graduation work contains 58 pages with 20 sources of literature, 8 drawings, 3 tables and 3 supplements.


Содержание

[1]
Введение

[2]
1 Постановка задачи оптимального управления инвестициями в двухсекторной экономике

[3]
2 Задача оптимального управления. Необходимые условия оптимальности

[3.1] 2.1 Нахождение решения на основе принципа максимума

[3.2] 2.2 Особое управление

[4]
3 Решение задачи с помощью процедуры Беллмана в непрерывном времени

[5]
4 Численное решение

[5.1] 4.1 Дискретная аппроксимация непрерывной задачи методом Эйлера

[5.2] 4.2 Дискретная аппроксимация непрерывной задачи методом Хьюна

[5.3] 4.3 Дискретная аппроксимация непрерывной задачи методом Рунге-Кутты третьего порядка

[5.4] 4.4 Алгоритм решения дискретной задачи оптимального управления

[5.5] 4.5 Программная реализация и анализ результатов

[6]
5 Задача оптимального управления инвестициями в случае нескольких секторов потребления

[7]
Заключение

[8]
Список использованных источников

[9]
Приложение А

[10]
Приложение Б

[11]
Приложение В


Введение

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

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

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

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

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

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

Для решения поставленной цели, необходимо решить следующие задачи:

1) получить решение на основе принципа максимума Понтрягина и исследовать возможность существования особого управления;

2) получить решение с помощью процедуры Беллмана в непрерывном времени;

3) разработать и реализовать численный алгоритм решения задачи на основе итерационного метода;

4) исследовать различные подходы к дискретной аппроксимации дифференциальных уравнений;

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

Объектом исследования является процесс распределения инвестиций между потребительским и фондообразующим секторами двухсекторной модели экономики.

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


1 Постановка задачи оптимального управления инвестициями в двухсекторной экономике

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

1) скорость изменения основных фондов фондообразующего сектора увеличивается пропорционально капиталу, направляемому в развитие данного сектора;

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

Составим математическую модель задачи, для этого введем обозначения:

– основные фонды (капитал) фондообразующего сектора;

– основные фонды потребительского сектора;

– доля инвестиций, направляемых в потребительский сектор;

– заданная протяженность интервала планирования.

Согласно первому условию задачи уравнение движения основных фондов фондообразующего сектора имеет вид:

,

(1.1)

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

Исходя из второго условия, получим уравнение движения для основных фондов потребительского сектора:

.

(1.2)

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

Зададим значения фазовых переменных в начальный момент времени :

,

(1.3)

.

(1.4)

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

.

(1.5)

Таким образом, получим математическую модель рассматриваемой задачи:

,

(1.6)

,

(1.7)

,

(1.8)

,

(1.9)

,

(1.10)

.

(1.11)


2 Задача оптимального управления. Необходимые условия оптимальности

2.1 Нахождение решения на основе принципа максимума

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

Рассмотрим задачу управления системой:

,

, ,

,

(2.1)

с ограничениями

(2.2)

и минимизируемым функционалом

.

(2.3)

Моменты времени ,  и начальное положение  заданы.

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

Принцип максимума Понтрягина определяется следующей теоремой.

Теорема. Пусть  – оптимальное управление в задаче (2.1) – (2.3), а  – соответствующая ему траектория. Тогда существует такой вектор , , удовлетворяющий системе

(2.4)

что справедливо условие максимума

, ,

(2.5)

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

.

(2.6)

Ниже описан алгоритм построения оптимального управления на основе принципа максимума.

Если решение задачи оптимального управления (2.1) – (2.3) существует, то:

1) определяют управление  как функцию переменных ,  и  из условия (2.5);

2) подставляют найденное выражение  в уравнения (2.1), (2.4) и решают полученную краевую задачу относительно  и :

(2.7)

Решение краевой задачи (2.7) обозначим через  и .

3) Далее полученные значения  и  подставляют в выражение для : . В результате получаем оптимальное программное управление .

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

Требуется найти минимум функционала:

(2.8)

при динамических ограничениях:

,

(2.9)

,

(2.10)

начальных условиях:

,

(2.11)

,

(2.12)

ограничениях на управление:

.

(2.13)

Функция Понтрягина для рассматриваемой задачи имеет вид:

(2.14)

Составим уравнения для сопряженных переменных:

,

(2.15)

(2.16)

Так как в задаче правый конец свободен, то запишем условия трансверсальности:

(2.17)

(2.18)

Оптимальное управление определяется из условия:

,

(2.19)

где .

В задаче (2.8) – (2.13) данное условие выглядит следующим образом:

(2.20)

Функция Понтрягина линейна относительно управления, следовательно, могут существовать точки переключения. Поэтому введем функцию переключения для поиска оптимального управления:

.

(2.21)

Заметим, что множитель  не влияет на знак функции переключения, так как , а в силу (2.9)  поэтому  . Тогда (2.21) перепишется в виде:

.

(2.22)

Графическое определение значения управления  в зависимости от знака функции переключения  представлено на рисунке 2.1.

а)

б)

в)

Рисунок 2.1 – Определение значения управления

Рассмотрим следующие случаи:

1) если  (рисунок 2.1а), то функция Понтрягина возрастает, а значит, ее максимум на отрезке  достигается, когда управление принимает значение, равное 1;

2) если  (рисунок 2.1б), то функция Понтрягина носит убывающий характер, следовательно, ее максимум на отрезке  достигается при управлении, равном нулю;

3) если значение функции переключения  (рисунок 2.1в), то функция Понтрягина является постоянной, и ее максимум достигается на всем отрезке . В этом случае возможно существование особого оптимального управления, исследование которого будет проведено ниже.

Таким образом, оптимальное управление определяется из системы:

(2.23)

Составим краевую задачу:

(2.24)

Данная система замкнута управлением , вычисленным с помощью (2.23) на временном отрезке .

Так как правые части исходной системы дифференциальных уравнений в (2.9) и (2.10) линейны относительно фазовых координат, то уравнения для сопряженных переменных (2.15) и (2.16) не содержат фазовых координат. Управление (2.23) так же свободно от фазовых координат. Таким образом, можно решить две задачи Коши. Сначала необходимо проинтегрировать уравнения для сопряженных переменных (2.15), (2.16) при условиях (2.17), (2.18) и управлении (2.23). В результате управление будет являться функцией времени. Затем с полученной функцией нужно проинтегрировать уравнения для фазовых переменных (2.9), (2.10) при начальных значениях (2.11), (2.12). В итоге будет решена краевая задача (2.24).

Задача Коши для сопряженных переменных имеет вид:

(2.25)

Из системы (2.25) получаем, что .

Проинтегрируем первое уравнение по участкам постоянства функции , начиная с  (рисунок 2.2).

Рисунок 2.2 – Зависимости сопряженных переменных  и  от времени t

При  . Тогда

,

,

,

.

Так как , то , следовательно, . Таким образом, получаем:

.

(2.26)

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

Если , то будем рассматривать только один участок: .

При  . Тогда

,

,

,

,

.

Нам известно, что , тогда , следовательно, . Таким образом, получаем:

.

(2.27)

В результате управление будет определяться следующим образом (рисунок 2.3):

Рисунок 2.3 – Зависимость управления  от времени t

для :

(2.28)

для :

(2.29)

Теперь следует подставить полученную функцию  в первые два уравнения системы (2.24) и проинтегрировать их с заданными начальными условиями.

Проинтегрируем первое уравнение, так как оно не содержит .

1) Для :

а) при  ,

,

,

.

Учитывая, что , получим .

б) при  ,

,

.

При  было получено . Найдем . Таким образом, , следовательно, .

2) Для  при  ,

,

.

Зная , получим  и .

С найденной функцией  проинтегрируем второе уравнение системы (2.24).

1) Для :

а) при

.

Учитывая, что , имеем .

б) при

,

.

При  . Тогда . Таким образом, , следовательно, .

2) Для  при

,

.

Зная, что , получим  и .

Полученные результаты сведем в таблицу (см. таблица 2.1) и изобразим графически зависимости фазовых переменных от времени при  (рисунок 2.4).

Таблица 2.1 – Результаты интегрирования

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

На основе данных таблицы 2.1 найдем оптимальную величину целевого функционала (1.11).

Для

,

для

.

Рисунок 2.4 – График зависимости фазовых переменных от времени при

Таким образом, оптимальное значение максимизируемого функционала (1.11) определяется системой (2.30):

(2.30)

2.2 Особое управление

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

,

(2.31)

где

,

(2.32)

,

(2.33)

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

(2.33)

(2.34)

Приравняем вторую производную функции  к нулю (), получим, что . Ранее было показано, что , следовательно, либо , либо . Так как , значит,  – особое управление.

Определим, является ли это особое управление оптимальным. Для этого проверим выполнение условия Келли:

(2.35)

Для рассматриваемой задачи оно запишется в виде:

.

(2.36)

Условие Келли не выполнено, значит, найденное особое управление не оптимально.


3 Решение задачи с помощью процедуры Беллмана в непрерывном времени

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

Однако прежде чем переходить к решению задачи оптимального управления инвестициями с помощью данного метода, рассмотрим порядок нахождения решения для канонической задачи:

 

 

(3.1)

Для задачи (3.1) строится функция максимального выигрыша :

(3.2)

где под  понимаются фазовая траектория и программа управления на укороченном отрезке времени  а через  обозначено множество допустимости задачи (3.1) с измененным начальным условием .

Уравнение в частных производных для функции Беллмана  в точке ,  имеет вид:

(3.3)

Для этого уравнения согласно определению функции  (3.2) должно выполняться краевое условие:

(3.4)

В результате решения задачи (3.3) – (3.4), если функция  окажется гладкой, находятся максимальное значение критерия качества  и закон оптимального управления :

,

(3.5)

(3.6)

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

   

(3.7)

Теперь применим процедуру Беллмана в непрерывном времени к задаче оптимального управления инвестициями в двухсекторной экономике.

Проинтегрируем уравнение ,  в квадратурах и запишем результат в критерий качества :

(3.8)

Правые части дифференциальных уравнений (1.6) – (1.7) не зависят от , поэтому исключим фазовую координату  из дальнейшего рассмотрения. Таким образом, задача (1.6) – (1.11) преобразуется к виду:

    .

(3.9)

Задача (3.9) не выходит из рамок (3.1), поэтому для нее справедливы уравнение Беллмана (3.3) и краевое условие (3.4), которые принимают следующий вид:

(3.10)

(3.11)

Максимизируемая функция в (3.10) линейна по , поэтому оптимальное управление определяется из системы (3.12):

(3.12)

После отыскания максимума уравнение (3.10) записывается в виде:

(3.13)

В окрестности терминальной линии  реализуется первый вариант уравнения (3.13), так как . Этот вариант уравнения интегрируется как обыкновенное дифференциальное уравнение с параметром : .

Нам известно, что , тогда , а значит:

при , т.е. при .

(3.14)

При  реализуется второй вариант уравнения (3.13). Здесь требуется решить задачу Коши:

,

(3.15)

.

(3.16)

Решим данную задачу методом характеристик, для этого составим характеристическое уравнение, соответствующее уравнению в частных производных (3.15):

.

(3.17)

Решение уравнения (3.17) имеет вид:

 или , .

(3.18)

Общее решение уравнения (3.15) выражается через произвольную функцию  с помощью формулы:

.

(3.19)

Подставив в общее решение (3.19) условие (3.16), получим:

.

(3.20)

Из выражения (3.20) определим функцию :

.

(3.21)

Подставив зависимость (3.21) в (3.19), находим решение задачи Коши (3.15) – (3.16):

при , т.е. при .

(3.22)

Таким образом, получим систему:

(3.23)

Прямой проверкой можно убедиться в непрерывности и непрерывной дифференцируемости функции , определяемой системой (3.23). Гладкость функции  гарантирует максимальность критерия качества:

(3.24)

и оптимальность траектории  и управления , которые восстанавливаются по правилу (3.7):

(3.25)

(3.26)

Задача (3.9) решалась при протяженности интервала планирования , если же , то решение уравнения Беллмана состоит только из одного участка (3.14), которому соответствуют критерий качества:

(3.27)

фазовая траектория  и оптимальное управление .

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


4 Численное решение

4.1 Дискретная аппроксимация непрерывной задачи методом Эйлера

Разобьем отрезок интегрирования  на  одинаковых частей, равных по величине :

,

где , , .

Введем обозначения:

, ,

, ,

, .

Для вычисления производных  и  в точке  будем использовать метод Эйлера:

, ,

, .

Дискретная задача оптимального управления, аппроксимирующая непрерывную задачу (2.8) – (2.13), представлена формулами (4.1) – (4.6):

,

(4.1)

, ,

(4.2)

, ,

(4.3)

,

(4.4)

,

(4.5)

, .

(4.6)

В соответствии с выбранной схемой аппроксимации точность дискретной аппроксимации исходной задачи оптимального управления (2.8) – (2.13) равна  на интервале интегрирования.

В соотношениях (4.2) – (4.3) перенесем всё в левую часть, получим:

, ,

(4.7)

, .

(4.8)

Воспользуемся методом Лагранжа для решения задачи оптимального управления. Каждому ограничению (4.7) – (4.8) поставим в соответствие множители Лагранжа , , .

Составим функцию Лагранжа:

(4.9)

Для того чтобы допустимый процесс , где , , был локально-оптимальным в дискретной задаче оптимального управления (4.1) – (4.6), необходимо, чтобы были выполнены следующие условия:

1) условие стационарности по :

, ,

(4.10)

,

(4.11)

, ,

(4.12)

;

(4.13)

2) условие минимума функции Лагранжа по управлению:

;

(4.14)

3) условие неотрицательности:

;

(4.15)

4) условие допустимости – соотношения (4.2) – (4.6).

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

 ,

(4.16)

,

(4.17)

, ,

(4.18)

.

(4.19)

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

Из (4.16) и (4.18) получаем:

,

(4.20)

, .

(4.21)

Вернемся к исходным обозначениям:

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, .

Тогда выражения (4.20) и (4.21) примут вид:

,

(4.22)

, .

(4.23)

 

В этих равенствах перейдем к пределу при , при этом считая, что , и учтем, что:

,

.

В итоге получаем:

(4.24)

Сравнивая (4.24) и (2.25) и полагая, что , видим, что рекуррентные формулы для вычисления сопряженных переменных в дискретной задаче оптимального управления (4.1) – (4.6) в пределе при  переходят в сопряженную систему и в условия трансверсальности в непрерывной задаче оптимального управления (2.8) – (2.13).

4.2 Дискретная аппроксимация непрерывной задачи методом Хьюна

Аппроксимируем дискретную задачу другим способом. Динамическую систему будем аппроксимировать методом Хьюна (модифицированный метод Эйлера, метод Рунге-Кутты второго порядка).

Схема метода Хьюна:

В нашем случае ,

Таким образом, дискретная задача будет иметь следующий вид:

,

(4.25)

, ,

(4.26)

, ,

(4.27)

,

(4.28)

,

(4.29)

, .

(4.30)

Мы получили дискретную задачу оптимального управления (4.25) – (4.30), аппроксимирующую исходную задачу (2.8) – (2.13) со вторым порядком точности.

Каждому ограничению (4.26) – (4.27) поставим в соответствие множители Лагранжа , , , и запишем для этой задачи функцию Лагранжа:

(4.31)

Условия стационарности по  примут вид:

(4.32)

,

(4.33)

, ,

(4.34)

.

(4.35)

Из выражений (4.32) – (4.35) получим рекуррентные соотношения для вычисления сопряженных переменных:

 ,

(4.36)

,

(4.37)

, ,

(4.38)

.

(4.39)

Осуществив предельный переход в соотношениях (4.36) – (4.39) при  и положив , придем к выражениям, совпадающим с сопряженной системой (2.25).

4.3 Дискретная аппроксимация непрерывной задачи методом Рунге-Кутты третьего порядка

Аппроксимируем динамическую систему методом Рунге-Кутты третьего порядка.

Схема метода:

В нашем случае ,

Таким образом, дискретная задача оптимального управления, аппроксимирующая непрерывную задачу (2.8) – (2.13), будет иметь следующий вид:

,

(4.40)

, ,

(4.41)

, ,

(4.42)

,

(4.43)

,

(4.44)

, .

(4.45)

Дискретная аппроксимация (4.40) – (4.45) исходной задачи (2.8) – (2.13) имеет третий порядок точности относительно шага интегрирования.

Каждому ограничению (4.41) – (4.42) поставим в соответствие множители Лагранжа , , , и запишем для этой задачи функцию Лагранжа:

(4.46)

Условия стационарности по  примут вид:

(4.47)

,

(4.48)

, ,

(4.49)

.

(4.50)

Из выражений (4.47) – (4.50) получим рекуррентные соотношения для вычисления сопряженных переменных:

 

(4.51)

,

(4.52)

, ,

(4.53)

.

(4.54)

Осуществив предельный переход в соотношениях (4.51) – (4.54) при  и положив , придем к выражениям, совпадающим с сопряженной системой (2.25).

4.4 Алгоритм решения дискретной задачи оптимального управления

Опишем алгоритм решения задачи (4.1) – (4.6) с использованием итерационного метода. Верхний индекс в скобках обозначает номер итерации.

  1.  Выбираем шаг разбиения .
  2.  Задаем начальное приближение управления – допустимый набор:

, где , .

2. Строим начальную траекторию:

,

используя начальные условия и разностные соотношения, аппроксимирующие уравнения движения, (4.2) – (4.4):

, ,

, ,

, .

3. Вычисляем начальное приближение целевой функции  по формуле:

.

4. Находим сопряженные переменные по формулам (4.16) – (4.19):

, ,

,

, .

5. Определяем управление:

.

6. Вычисляем соответствующую этому управлению траекторию по формулам:

, ,

, ,

, .

7. Находим очередное приближение целевой функции  по формуле:

.

8. Если , то идем к шагу 9, иначе полагаем , , , и идем к шагу 12.

9. Проверяем, достигнута ли заданная точность вычислений. Если  и , то идем к 12, иначе – идем к 10.

10. Производим переприсваивание , , .

11. Идем к 4 – следующему шагу итерационного метода.

12. Полагаем, что , ,  – решение, полученное с шагом разбиения .

Конец алгоритма.

Алгоритмы решения задач (4.25) – (4.30) и (4.40) – (4.45) совпадают с описанным выше алгоритмом, за исключением шагов 2, 4 и 6.

Для задачи (4.25) – (4.30) на шаге 2 строим начальную траекторию, используя соотношения (4.26) – (4.29):

, ,

, ,

, .

На шаге 4 находим сопряженные переменные по формулам (4.36) – (4.39):

, ,

,

, .

На шаге 6 вычисляем траекторию следующим образом:

, ,

, ,

, .

Для задачи (4.40) – (4.45) на шаге 2 имеем выражения:

, ,

, ,

, ;

на шаге 4:

, ,

, ;

на шаге 6:

, ,

, ,

, .

4.5 Программная реализация и анализ результатов

Для поиска решения задачи оптимального управления разработано программное средство в среде Microsoft Visual Studio 2010 на языке Visual C#.

В качестве входного параметра будем рассматривать протяженность интервала планирования .

Листинг программы представлен в приложении А, результаты работы программы при различных значениях входного параметра  представлены на рисунках Б.1 – Б.3 приложения Б.

Сравнивая численное решение с аналитическим (таблица 4.1), видим, что когда длина интервала планирования не превышает единицы, то есть, когда нет точек переключения управления, аппроксимация дифференциальных уравнений по методу Эйлера дает лучшие результаты, чем аппроксимация двумя другими методами. При длительном интервале планирования методы Хьюна и Рунге-Кутты третьего порядка для первой фазовой переменной показывают большую точность, нежели метод Эйлера. Однако для второй переменной и функционала метод Эйлера имеет точность в том же знаке, что и у остальных методов. Из чего можно заключить, что при дискретной аппроксимации дифференциальных уравнений на основе итерационного метода численного решения задачи нет необходимости в использовании методов высокого порядка и можно ограничиться методом Эйлера.

Таблица 4.1 – Погрешности фазовых переменных и функционала,  полученные методами Эйлера, Хьюна и Рунге-Кутты третьего порядка при различных значениях  

Метод

Погрешность

1

2

3

4

5

0,3

Эйлера

0

1,671·10-14

1,671·10-14

Хьюна

0

1,5·10-5

1,5·10-5

Рунге-Кутты III

0

1,5·10-5

1,5·10-5

Продолжение таблицы 4.1

1

2

3

4

5

0,7

Эйлера

0

6,073·10-14

6,073·10-14

Хьюна

0

3,5·10-5

3,5·10-5

Рунге-Кутты III

0

3,5·10-5

3,5·10-5

1,0

Эйлера

0

9,381·10-14

9,381·10-14

Хьюна

0

5·10-5

5·10-5

Рунге-Кутты III

0

5·10-5

5·10-5

1,5

Эйлера

2,061·10-4

1,649·10-4

4,122·10-5

Хьюна

1,374·10-9

8,244·10-5

8,244·10-5

Рунге-Кутты III

3,109·10-14

8,244·10-5

8,244·10-5

2

Эйлера

4,077·10-4

2,718·10-4

1,36·10-4

Хьюна

4,53·10-9

1,36·10-4

1,36·10-4

Рунге-Кутты III

1,119·10-13

1,36·10-4

1,36·10-4

2,5

Эйлера

7,842·10-4

4,481·10-4

3,361·10-4

Хьюна

1,12·10-8

2,241·10-4

2,241·10-4

Рунге-Кутты III

3,038·10-13

2,241·10-4

2,241·10-4

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

Таблица 4.2 – Значение критерия качества, полученное при дискретной аппроксимации методом Эйлера при различных значениях

Значение критерия качества

(Метод Эйлера)

0,3

0,3

0,7

0,7

1

1

1,5

1,648

2

2,716

2,5

4,473


5 Задача оптимального управления инвестициями в случае нескольких секторов потребления

Усложним исходную задачу (1.6) – (1.11) для случая нескольких потребительских секторов.

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

Тогда имеем следующую задачу:

,

(5.1)

, ,

(5.2)

,

(5.3)

, ,

(5.4)

, , ,

(5.5)

.

(5.6)

Функция Понтрягина для задачи (5.1) – (5.6) имеет вид:

(5.7)

Запишем выражения для сопряженных переменных и условия трансверсальности:

(5.8)

 ,

(5.9)

(5.10)

.

(5.11)

Из выражений (5.9), (5.11)  получаем, что . Тогда функция Понтрягина перепишется в виде:

(5.12)

Введем функции переключения:

, .

(5.13)

Оптимальное управление находится из линейной задачи максимизации:

,

(5.14)

то есть определяется условиями:

1) если , то , ;

2) если , то , , ;

3) если , то  – особое оптимальное управление.

Так как управление не может быть найдено в явном виде, то воспользуемся численным решением. Для этого преобразуем задачу (5.1) – (5.6) к дискретному виду, используя схему Эйлера для дифференциальных уравнений с шагом дискретизации :

, ,

(5.15)

, , ,

(5.16)

,

(5.17)

, ,

(5.18)

, , , ,

(5.19)

.

(5.20)

Функция Лагранжа для задачи (5.15) – (5.20) запишется в следующем виде:

(5.21)

Необходимые условия оптимальности для случая  имеют вид:

, ,

(5.22)

,

(5.23)

, , ,

(5.24)

, ,

(5.25)

, , .

(5.26)

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

, ,

(5.27)

,

(5.28)

, , ,

(5.29)

, .

(5.30)

Если устремить  к нулю, то предельные соотношения (5.27) – (5.30)  совпадают с выражениями (5.8) – (5.11) для сопряженных функций в непрерывной задаче.

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

Алгоритм метода проекции градиента

1. Задаем начальное приближение управления – допустимый набор:

, где , , .

2. Строим начальную траекторию , используя начальные условия и разностные соотношения, аппроксимирующие уравнения движения, (5.15) – (5.18):

, ,

, ,

, ,

, ,  .

3. Вычисляем начальное приближение целевой функции  по формуле (5.20):

.

4. Находим сопряженные переменные по формулам (5.27) – (5.30):

, , ,

, ,

, ,

, .

5. Вычисляем производные функции Лагранжа по управлению по формуле (5.26):

, ,

, .

6. Задаем начальное значение шага градиентного спуска .

7. Находим  по формулам:

, ,

, .

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

если , , то , ;

если , , то , ;

если , , то , ;

если , , то , ;

если , , то , ;

если , , , то , .

8. Вычисляем соответствующую этому управлению траекторию  по формулам:

, ,

, ,

, ,

, ,  .

9. Находим очередное приближение целевой функции  по формуле:

.

10. Если , то идем к шагу 12, иначе – идем к 11.

11. Делим шаг спуска пополам , идем к 7.

12. Проверяем, достигнута ли заданная точность вычислений. Если  и , то идем к 14, иначе – идем к 13.

13. Производим переприсваивание , , , идем к 4.

14. , ,  – решение задачи. Конец алгоритма.

На рисунке 5.1 представлен результат работы программы, разработанной на языке Visual C# в среде Microsoft Visual Studio. Листинг программы расположен в приложении В.

Рисунок 5.1 – Результат работы программы в случае двух секторов потребления при

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


Заключение

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

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

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

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

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


Список использованных источников

1 Андреева, Е.А. Вариационное исчисление и методы оптимизации: учеб. пособие / Е.А. Андреева, В.М. Цирулева. – Оренбург-Тверь: ГОУ ОГУ, Твер. гос. ун-т, 2004. – 575 с.

2 Андреева, Е.А. Математическое моделирование: учеб. пособие / Е.А. Андреева, В.М. Цирулева.  – Тверь: Твер. гос. ун-т, 2004. – 502 с.

3 Болтянский, В.Г. Математические методы оптимального управления / В.Г. Болтянский. – 2-е изд., перераб. и доп. – М.: Наука, 1969. – 408 с.:ил. – (Серия «Физико-математическая библиотека инженера»).

4 Вержбицкий, В.М. Основы численных методов: учебник для вузов / В.М. Вержбицкий. – М.: Высш. шк., 2002. – 840 с.:ил. – ISBN 5-06-004020-8.

5 Зайцев, В.Ф. Справочник по дифференциальным уравнениям с частными производными первого порядка / В.Ф. Зайцев, А.Д. Полянин. – М.: ФИЗМАТЛИТ, 2003. – 416 с. – ISBN 5-9221-0287-7.

6 Косачев, Ю.В. Экономико-математические модели эффективности финансово-промышленных структур / Ю. В. Косачев. – М.: Логос, 2004. – 248 с. – ISBN 5-94010-282-4.

7 Кротов, В.Ф. Основы теории оптимального управления: учеб. пособие для экон. вузов / В.Ф. Кротов, Б.А. Лагоша, С.М. Лобанов и др.; под ред. В.Ф. Кротова. – М.: Высш. шк., 1990. – 430 с.: ил. – ISBN 5-06-000622-0.

8 Крылов, И.А. Алгоритм метода последовательных приближений для задач оптимального управления / И.А. Крылов, Ф.Л. Черноусько // Вычисл. матем. и матем. физ, 1972. – Т. 12. – № 1. – С. 14 – 34.

9 Лагоша, Б.А. Оптимальное управление в экономике: учеб. пособие / Б.А. Лагоша. – М.: Финансы и статистика, 2003. – 192 с.:ил. – ISBN 5-279-02575-5.

10 Математическое моделирование и оптимальное управление: учеб.-метод. пособие для сам. работы студентов / Е.А. Андреева, И.П. Болодурина, О.С. Арапова, Т.А. Огурцова. – Оренбург: ГОУ ОГУ, 2009. – 152 с.: ил. – ISBN 978-5-7410-0879-9.

11 Павлов, О.В. Оптимальное управление инвестициями в проекте промышленного предприятия / О.В. Павлов, Т.А. Машкова // Экономические науки, 2009. – №2. – С. 295 – 299.

12 Павлов, О.В. Численный алгоритм оптимального управления инвестициями промышленного предприятия / О.В. Павлов // Экономические науки, 2009. – №4. – С. 324 – 327.

13 Пантелеев, А.В. Методы оптимизации в примерах и задачах: учеб. пособие / А.В. Пантелеев, Т.А. Летова. – М.:Высш.шк., 2002. – 544 с.: ил. – ISBN 5-06-004137-9.

14 Пантелеев, А.В. Теория управления в примерах и задачах: учеб. пособие / А.В. Пантелеев, А.С. Бортаковский. – М.: Высш. шк., 2003. – 583 с.: ил. – ISBN 5-06-004136-0.

15 Самарский, А.А. Численные методы: учеб. пособие для вузов / А.А. Самарский, А.В. Гулин. – М.: Наука, 1989. – 432 с. – ISBN 5-02-013996-3.

16 Семыкина, Н.А. Линейная задача оптимального управления с фазовыми ограничениями / Н.А. Семыкина // Оптимальное управление динамическими системами: сб. науч. тр. – Тверь: Твер. гос. ун-т, 2001. – С. 72 – 88.

17 Токарев, В.В. Методы оптимальных решений. В 2 т. Т.2. Многокритериальность. Динамика. Неопределенность / В.В. Токарев. – 2-е изд., испр. – М.: ФИЗМАТЛИТ, 2011. – 420 с. – ISBN 978-5-9221-1258-1.

18 Тюкавкин, И.Н. Экономико-математическое моделирование / И.Н. Тюкавкин; рец. А.Н. Сорочайкина // Аудит и финансовый анализ, 2013. – №6. – С. 182 – 185.

19 Черноусько, Ф.Л. Вычислительные и приближенные методы оптимального управления / Ф.Л. Черноусько, В.Б. Колмановский // Итоги науки и техн. Сер. Мат. анал., 1977. – Т.14. – С. 101 – 166.

20 Хофер, Э. Численные методы оптимизации / Эберхарт Хофер, Рейнхарт Лундерштедт; пер. с нем. Т. А. Летовой; под ред. В. В. Семенова. – М.: Машиностроение, 1981. – 192 с.: ил.


Приложение А

(обязательное)

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

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Windows.Forms.DataVisualization.Charting;

namespace Программа_к_диплому

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       void Alg(int Method_ind, int q, double h, double[] t, double[] x, double[] y, double I)

       {

           double I_0, I_1, X, Y;

           

           double[] x_0 = new double[q + 1];

           double[] y_0 = new double[q + 1];

           double[] u_0 = new double[q];

           double[] x_1 = new double[q + 1];

           double[] y_1 = new double[q + 1];

           double[] u_1 = new double[q];

           double[] p_1 = new double[q + 1];

           double[] p_2 = new double[q + 1];

           

           for (int i = 0; i < q; i++)

           {

               u_0[i] = 0.5;

           }

           x_0[0] = 1;

           y_0[0] = 0;

           if (Method_ind == 0)

               for (int i = 0; i < q; i++)

               {

                   x_0[i + 1] = x_0[i] + (1 - u_0[i]) * x_0[i] * h;

                   y_0[i + 1] = y_0[i] + u_0[i] * x_0[i] * h;

               }

           else

           {

               if (Method_ind==1)

                   for (int i = 0; i < q; i++)

                   {

                       x_0[i + 1] = x_0[i] + h / 2 * (1 - u_0[i]) * x_0[i] * (2 + h * (1 - u_0[i]));

                       y_0[i + 1] = y_0[i] + h / 2 * u_0[i] * x_0[i] * (2 + h * u_0[i]);

                   }

               else

                   for (int i = 0; i < q; i++)

                   {

                       x_0[i + 1] = x_0[i] + h / 6 * (1 - u_0[i]) * x_0[i] * (6 + h * (1 - u_0[i]) * (3 + h * (1 - u_0[i])));

                       y_0[i + 1] = y_0[i] + h / 6 * u_0[i] * x_0[i] * (6 + h * u_0[i] * (3 + h * u_0[i]));

                   }

           }

           I_0 = -y_0[q];

       label1:

           p_1[q] = 0;

           p_2[q] = 1;

           

           if (Method_ind == 0)

               for (int i = q - 1; i >= 0; i--)

               {

                   p_1[i] = p_1[i + 1] + p_1[i + 1] * h + (p_2[i + 1] - p_1[i + 1]) * u_0[i] * h;

                   p_2[i] = p_2[i + 1];

               }

           else

           {

               if (Method_ind == 1)

                   for (int i = q - 1; i >= 0; i--)

                   {

                       p_1[i] = p_1[i + 1] + p_1[i + 1] * h * (1 - u_0[i]) * (2 + h * (1 - u_0[i])) / 2 + p_2[i + 1] * h * u_0[i] * (2 + h * u_0[i]) / 2;

                       p_2[i] = p_2[i + 1];

                   }

               else

               {

                   double S1 = 0, S2 = 0;

                   for (int i = q - 1; i >= 0; i--)

                   {

                       S1 = (1 - u_0[i]) * (6 + h * (1 - u_0[i]) * (3 + h * (1 - u_0[i])));

                       S2 = u_0[i] * (6 + h * u_0[i] * (3 + h * u_0[i]));

                       p_1[i] = p_1[i + 1] + p_1[i + 1] * (h / 6) * S1 + p_2[i + 1] * (h / 6) * S2;

                       p_2[i] = p_2[i + 1];

                   }

               }

           }           

           for (int i = 0; i < q; i++)

           {

               if (p_1[i + 1] >= p_2[i + 1])

                   u_1[i] = 0;

               else

                   u_1[i] = 1;

           }

           x_1[0] = 1;

           y_1[0] = 0;                       

           if (Method_ind == 0)

               for (int i = 0; i < q; i++)

               {

                   x_1[i + 1] = x_1[i] + (1 - u_1[i]) * x_1[i] * h;

                   y_1[i + 1] = y_1[i] + u_1[i] * x_1[i] * h;

               }

           else

           {

               if (Method_ind == 1)

                   for (int i = 0; i < q; i++)

                   {

                       x_1[i + 1] = x_1[i] + h / 2 * (1 - u_1[i]) * x_1[i] * (2 + h * (1 - u_1[i]));

                       y_1[i + 1] = y_1[i] + h / 2 * u_1[i] * x_1[i] * (2 + h * u_1[i]);

                   }

               else

                   for (int i = 0; i < q; i++)

                   {

                       x_1[i + 1] = x_1[i] + h / 6 * (1 - u_1[i]) * x_1[i] * (6 + h * (1 - u_1[i]) * (3 + h * (1 - u_1[i])));

                       y_1[i + 1] = y_1[i] + h / 6 * u_1[i] * x_1[i] * (6 + h * u_1[i] * (3 + h * u_1[i]));

                   }

           }

           I_1 = -y_1[q];

           if (I_1 < I_0)

           {

               X = Math.Abs(x_0[0] - x_1[0]);

               for (int i = 1; i <= q; i++)

                   if (X < Math.Abs(x_0[i] - x_1[i]))

                       X = Math.Abs(x_0[i] - x_1[i]);

               Y = Math.Abs(y_0[0] - y_1[0]);

               for (int i = 1; i <= q; i++)

                   if (Y < Math.Abs(y_0[i] - y_1[i]))

                       Y = Math.Abs(y_0[i] - y_1[i]);

               if (Math.Abs(I_0 - I_1) <= h && X <= h && Y <= h)

                   Out(q, t, x_1, y_1, u_1, I_1, Method_ind);

               else

               {

                   I_0 = I_1;

                   for (int i = 0; i <= q; i++)

                   {

                       x_0[i] = x_1[i];

                       y_0[i] = y_1[i];

                       if (i != q)

                           u_0[i] = u_1[i];

                   }

                   goto label1;

               }

           }

           else

           {

               I_1 = I_0;

               for (int i = 0; i <= q; i++)

               {

                   x_1[i] = x_0[i];

                   y_1[i] = y_0[i];

                   if (i != q)

                       u_1[i] = u_0[i];

               }

               Out(q, t, x_1, y_1, u_1, I_1, Method_ind);

           }

           Tochnost(q, x, x_1, y, y_1, I, I_1, Method_ind);

       }

       void Out(int q, double[] t, double[] x1, double[] x2, double[] u, double J, int ind)

       {

           string[] row = new string[4];

           TextBox[] tB = { textBox3, textBox4, textBox5 };

           Chart[] ch = { chart1, chart2, chart3, chart4, chart5, chart6 };

           DataGridView[] dtGrV = { dataGridView1, dataGridView2, dataGridView3 };

           for (int i = 0; i <= q; i++)

           {

               row[0] = t[i].ToString();

               row[1] = x1[i].ToString();

               row[2] = x2[i].ToString();

               if (i != q)

                   row[3] = u[i].ToString();

               else

                   row[3] = "";

               dtGrV[ind].Rows.Add(row);

           }

           tB[ind].Text = Convert.ToString(J);

           ch[2 * ind].Series.Clear();

           ch[2 * ind + 1].Series.Clear();

           ch[2 * ind].Series.Add("x1(t)");

           ch[2 * ind].Series.Add("x2(t)");

           ch[2 * ind + 1].Series.Add("u(t)");

           ch[2 * ind].Series["x1(t)"].ChartType = SeriesChartType.Line;

           ch[2 * ind].Series["x2(t)"].ChartType = SeriesChartType.Line;

           ch[2 * ind + 1].Series["u(t)"].ChartType = SeriesChartType.Line;

           ch[2 * ind].Series["x1(t)"].BorderWidth = 2;

           ch[2 * ind].Series["x2(t)"].BorderWidth = 2;

           ch[2 * ind + 1].Series["u(t)"].BorderWidth = 2;

           for (int i = 0; i <= q; i++)

           {

               ch[2 * ind].Series["x1(t)"].Points.AddXY(t[i], x1[i]);

               ch[2 * ind].Series["x2(t)"].Points.AddXY(t[i], x2[i]);

               if (i != q)

                   ch[2 * ind + 1].Series["u(t)"].Points.AddXY(t[i], u[i]);

           }            

       }

       void Tochnost(int q, double[] x, double[] x_1, double[] y, double[] y_1, double I, double J, int ind)

       {

           

           double[] EpsX = new double[q + 1];

           double[] EpsY = new double[q + 1];

           for (int i = 0; i <= q; i++)

           {

               EpsX[i] = Math.Abs(x[i] - x_1[i]);

               EpsY[i] = Math.Abs(y[i] - y_1[i]);                

           }

           double maxEpsX, maxEpsY;

           maxEpsX = EpsX[0];

           maxEpsY = EpsY[0];

           for (int i = 1; i <= q; i++)

           {

               if (maxEpsX < EpsX[i])

                   maxEpsX = EpsX[i];

               if (maxEpsY < EpsY[i])

                   maxEpsY = EpsY[i];

           }

           TextBox[] tB = { textBox6, textBox7, textBox12, textBox8, textBox9, textBox13, textBox10, textBox11, textBox14 };

           tB[3 * ind].Text = maxEpsX.ToString();

           tB[3 * ind + 1].Text = maxEpsY.ToString();

           tB[3 * ind + 2].Text = (Math.Abs(I-J)).ToString();

       

       }

       private void button1_Click(object sender, EventArgs e)

       {

           int q;

           double T, h=0.0001;

           T = Convert.ToDouble(textBox1.Text);

           q = Convert.ToInt32(T / h);

           int k = 0;

           int q1;

           q1 = q;

           while (q1 != 0)

           {

               q1 = q1 / 10;

               k++;

           }

           double[] t = new double[q + 1];

           t[0] = 0;

           for (int i = 0; i < q; i++)

               t[i + 1] = Math.Round(t[i] + h, k);

           //Точное решение:

           double[] x = new double[q + 1];

           double[] y = new double[q + 1];

           double[] U = new double[q];

           double I;

           for (int i = 0; i <= q; i++)

           {

               if (T > 1)

               {

                   if (t[i] <= T - 1)

                   {

                       if (i != q) U[i] = 0;

                       x[i] = Math.Exp(t[i]);

                       y[i] = 0;

                   }

                   else

                   {

                       if (i != q) U[i] = 1;

                       x[i] = Math.Exp(T - 1);

                       y[i] = Math.Exp(T - 1) * (t[i] - T + 1);

                   }

               }

               else

               {

                   if (i != q) U[i] = 1;

                   x[i] = 1;

                   y[i] = t[i];

               }

           }

           if (T > 1)

               I = -Math.Exp(T - 1);

           else

               I = -T;

           

           Alg(0, q, h, t, x, y, I);   //Метод Эйлера

           Alg(1, q, h, t, x, y, I);   //Метод Хьюна

           Alg(2, q, h, t, x, y, I);   //Метод Рунге-Кутты III         

       }

   }

}


Приложение Б

(обязательное)

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

Рисунок Б.1 – Результат работы программы при


Рисунок Б.2 – Результат работы программы при

Рисунок Б.3 – Результат работы программы при


Приложение В

(обязательное)

Листинг программы в случае двух секторов потребления

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Windows.Forms.DataVisualization.Charting;

namespace Программа

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       public void Out(int q, double[] t, double[] x, double[] y1, double[] y2, double[] u1, double[] u2, double J)

       {

           int k = 0;

           int q1;

           q1 = q;

           while (q1 != 0)

           {

               q1 = q1 / 10;

               k++;

           }

           chart1.Series.Clear();

           chart2.Series.Clear();

           chart1.Series.Add("x(t)");

           chart1.Series.Add("y1(t)");

           chart1.Series.Add("y2(t)");

           chart2.Series.Add("u1(t)");

           chart2.Series.Add("u2(t)");

           chart1.Series["x(t)"].ChartType = SeriesChartType.Line;

           chart1.Series["y1(t)"].ChartType = SeriesChartType.Line;

           chart1.Series["y2(t)"].ChartType = SeriesChartType.Line;

           chart2.Series["u1(t)"].ChartType = SeriesChartType.Line;

           chart2.Series["u2(t)"].ChartType = SeriesChartType.Line;

           chart1.Series["x(t)"].BorderWidth = 2;

           chart1.Series["y1(t)"].BorderWidth = 2;

           chart1.Series["y2(t)"].BorderWidth = 2;

           chart2.Series["u1(t)"].BorderWidth = 2;

           chart2.Series["u2(t)"].BorderWidth = 2;

           for (int i = 0; i <= q; i++)

           {

               chart1.Series["x(t)"].Points.AddXY(t[i], x[i]);

               chart1.Series["y1(t)"].Points.AddXY(t[i], y1[i]);

               chart1.Series["y2(t)"].Points.AddXY(t[i], y2[i]);

           }

           for (int i = 0; i <= q - 1; i++)

           {

               chart2.Series["u1(t)"].Points.AddXY(t[i], u1[i]);

               chart2.Series["u2(t)"].Points.AddXY(t[i], u2[i]);

           }

           textBox1.Text = Convert.ToString(-J);

           string[] row = new string[7];

           row[0] = "q";

           row[1] = "t";

           row[2] = "x(t)";

           row[3] = "y1(t)";

           row[4] = "y2(t)";

           row[5] = "u1(t)";

           row[6] = "u2(t)";

           dataGridView1.ColumnCount = 7;

           dataGridView1.RowCount = 1;

           dataGridView1.Rows.Add(row);

           for (int i = 0; i <= q; i++)

           {

               row[0] = i.ToString();

               row[1] = Math.Round(t[i], k).ToString();

               row[2] = x[i].ToString();

               row[3] = y1[i].ToString();

               row[4] = y2[i].ToString();                

               if (i != q)

               {

                   row[5] = u1[i].ToString();

                   row[6] = u2[i].ToString();

               }

               else

               {

                   row[5] = "";

                   row[6] = "";

               }

               dataGridView1.Rows.Add(row);

           }

       }

       private void button1_Click(object sender, EventArgs e)

       {

           int q;

           double T;

           double h=0.001;            

           T = Convert.ToDouble(textBox2.Text);

           q = Convert.ToInt32(T / h);

                      

           double[] t = new double[q + 1];

           t[0] = 0;

           for (int i = 0; i < q; i++)

               t[i + 1] = t[i] + h;

           double[] x_0 = new double[q + 1];

           double[] y1_0 = new double[q + 1];

           double[] y2_0 = new double[q + 1];

           double[] u1_0 = new double[q];

           double[] u2_0 = new double[q];

           double[] x_1 = new double[q + 1];

           double[] y1_1 = new double[q + 1];

           double[] y2_1 = new double[q + 1];

           double[] u1_1 = new double[q];

           double[] u2_1 = new double[q];

           double[] p = new double[q + 1];            

           double[] ro1 = new double[q + 1];

           double[] ro2 = new double[q + 1];

           

           double I_0, I_1;

           double alpha;

           double Sum;

           double buf;

           for (int i = 0; i < q; i++)

           {

               u1_0[i] = 0.2;

               u2_0[i] = 0.2;

           }

           x_0[0] = 1;

           y1_0[0] = 0;

           y2_0[0] = 0;

                       

           for (int i = 0; i < q; i++)

           {

               Sum = u1_0[i] + u2_0[i];

               x_0[i + 1] = x_0[i] + (1 - Sum) * x_0[i] * h;

               y1_0[i + 1] = y1_0[i] + u1_0[i] * x_0[i] * h;

               y2_0[i + 1] = y2_0[i] + u2_0[i] * x_0[i] * h;

           }

           

           I_0= -(y1_0[q]+y2_0[q]);

           label1:

           p[q] = 0;

           ro1[q] = 1;

           ro2[q] = 1;

           for (int i = q - 1; i >= 0; i--)

           {

               Sum = u1_0[i] + u2_0[i];

               p[i] = p[i + 1] + p[i + 1] * (1 - Sum) * h + Sum * h;

               ro1[i] = ro1[i + 1];

               ro2[i] = ro2[i + 1];

           }

           

           alpha = 100;

           label2:

           for (int i = 0; i < q; i++)

           {

               u1_1[i] = u1_0[i] - alpha * x_0[i] * h * (p[i + 1] - ro1[i + 1]);

               u2_1[i] = u2_0[i] - alpha * x_0[i] * h * (p[i + 1] - ro2[i + 1]);

               if (u1_1[i] < 0)

                   u1_1[i] = 0;

               if (u2_1[i] < 0)

                   u2_1[i] = 0;

               if (u2_1[i] > 1 && u2_1[i] >= u1_1[i] + 1)

               {

                   u1_1[i] = 0;

                   u2_1[i] = 1;

               }

               if (u1_1[i] > 1 && u2_1[i] <= u1_1[i] - 1)

               {

                   u1_1[i] = 1;

                   u2_1[i] = 0;

               }

               if (u2_1[i] < u1_1[i] + 1 && u2_1[i] > u1_1[i] - 1 && u2_1[i] + u1_1[i] > 1)

               {

                   buf = u1_1[i];

                   u1_1[i] = (u1_1[i] - u2_1[i] + 1) / 2;

                   u2_1[i] = (u2_1[i] - buf + 1) / 2;

               }

           }

          

           x_1[0] = 1;

           y1_1[0] = 0;

           y2_1[0] = 0;

           for (int i = 0; i < q; i++)

           {

               Sum = u1_1[i] + u2_1[i];

               x_1[i + 1] = x_1[i] + (1 - Sum) * x_1[i] * h;

               y1_1[i + 1] = y1_1[i] + u1_1[i] * x_1[i] * h;

               y2_1[i + 1] = y2_1[i] + u2_1[i] * x_1[i] * h;

           }

           I_1 = -(y1_1[q] + y2_1[q]);

                       

           double X, Y1, Y2;

           if (I_1 < I_0)

           {

               X = Math.Abs(x_0[0] - x_1[0]);

               for (int i = 1; i <= q; i++)

                   if (X < Math.Abs(x_0[i] - x_1[i]))

                       X = Math.Abs(x_0[i] - x_1[i]);

               Y1 = Math.Abs(y1_0[0] - y1_1[0]);

               for (int i = 1; i <= q; i++)

                   if (Y1 < Math.Abs(y1_0[i] - y1_1[i]))

                       Y1 = Math.Abs(y1_0[i] - y1_1[i]);

               Y2 = Math.Abs(y2_0[0] - y2_1[0]);

               for (int i = 1; i <= q; i++)

                   if (Y2 < Math.Abs(y2_0[i] - y2_1[i]))

                       Y2 = Math.Abs(y2_0[i] - y2_1[i]);

               if (Math.Abs(I_0 - I_1) <= h && X <= h && Y1 <= h && Y2 <= h)

                   Out(q, t, x_1, y1_1, y2_1, u1_1, u2_1, I_1);                

               else

               {

                   I_0 = I_1;

                   for (int i = 0; i <= q; i++)

                   {

                       x_0[i] = x_1[i];

                       y1_0[i] = y1_1[i];

                       y2_0[i] = y2_1[i];

                       if (i != q)

                       {

                           u1_0[i] = u1_1[i];

                           u2_0[i] = u2_1[i];

                       }

                   }                   

                   goto label1;

               }

           }

           else

           {

               alpha /= 2;

               goto label2;

           }            

       }

   }

}


 

А также другие работы, которые могут Вас заинтересовать

57501. Оптимизация организационной структуры департамента продаж компании «Делта групп» в интересах стимулирования сбыта и увеличения доли рынка в сегменте региональных розничных сетей 903 KB
  Анализ проблемной области при помощи методов визуализации причинно-следственных связей. Определение составляющих покупательского спроса и оценка их вкладов. Формирование перечня обязательных ежемесячных действий менеджера для обеспечения максимальной отдачи при работе с сетевыми клиентами. Расчет среднемесячного расхода рабочего времени менеджера, необходимого для выполнения перечня необходимых действий...
57502. Технологическая безопасность обращения бензина на ОПО «ХЕНКЕЛЬ-ЭРА» 10.24 MB
  Разрушение оборудования – существенное нарушение целостности оборудования с образованием отверстий с размером, сопоставимыми с размерами оборудования, при этом содержащееся в оборудовании опасное вещество в жидком или газообразном состоянии мгновенно выбрасывается в окружающую среду...
57503. Ми – громадяни України 120 KB
  Створити модель громадянина України людини з притаманними їй особистісними рисами характеру світоглядом і способом мислення почуттями вчинками та поведінкою спрямованими на саморозвиток та розвиток демократичного громадянського суспільства.
57504. Новий Рік - за народним календарем 13 січня. Як святкували і що їли з нагоди свята 207.5 KB
  Як святкували і що їли з нагоди свята Новий рік Маланки Меланки святої Мелани Щедрий вечір 13 січня одне з найпопулярніших в українців як і в інших слов’ян та у більшості народів світу світське свято на якому майже не позначився релігійний християнський вплив за винятком пристосування...
57505. Інформаційна система. Апаратна складова 85 KB
  Зображення на екрані монітора утворюється з окремих елементів зображення пікселів англ. picture element елемент зображення які інколи називаютьточками зображення. Вони забезпечують високу яскравість і контрастність зображення.
57506. Перші весняні квіти. Урок розвитку зв’язного мовлення 67 KB
  Вчити учнів описувати весняні квіти послідовно формувати думки та поєднувати їх у мовленні. Чайковський Вальс квітів€ відео Весняні квіти†Спів соловейка†мультимедійна установка. Квіти Отже сьогодні ми навчимося описувати перші весняні квіти.
57507. Групи слів за значенням: синоніми, антоніми, омоніми, конспект уроку 43 KB
  Мета: поглибити знання про групи слів за значеннямформувати вміння визначати в реченнях і текстах синонімиантоніми й омоніми доречно вживати їх у мовленніутворювати синонімічні ряди добирати антонімічні пари...
57508. Дворцовые перевороты 62.5 KB
  Указ Петра I о престолонаследии. Задание учащимся: рассмотреть таблицу Дворцовые перевороты и ответить на вопрос: Что общего между правителями в эту эпоху Варианты ответов учащихся: Правителями были дальние и близкие родственники Петра I.
57509. Групи слів за значенням (синоніми, антоніми, омоніми, пароніми) 35.5 KB
  Скласти речення до кожної групи слів. Синоніми допомагають точніше висловлювати думку уникнути повторення однакових або співзвучних слів. З одним із слів скласти речення.