2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Динамическое прогр-е. Задача о нагреве материала. [MATLAB]
Сообщение19.04.2016, 14:21 


03/10/08
47
Система нагрева состоит из двух печей. Задача заключается в том, чтобы нагреть материал до температуры $T$. Функция издержек (отклонения температуры материала от заданного значения $T$) на выходе из второй печи имеет следующий вид

$J_2(x_2)=r(x_2-T)^2.$

Тогда функция издержек второй печи записывается так:

$J_1(x_1) = \min_{u_1} (u_1^2 + J_2(x_2)),$ где $J_2(x_2)=r(x_2-T)^2,  x_2=(1-a)x_1+au_1$.

Отсюда можно найти выражение для оптимального значения переменной управления $u_1$ (переменной регулирования температуры нагрева). Она будет являться функцией от $x_1$:

$u^*_1(x_1)=\frac{ra(T-(1-a)x_1)}{1+ra^2}.$

Подставив это выражение в функцию издержек $J_1(x_1)$, можно получить следующее выражение для функции издержек второй печи:

$J_1(x_1)=\frac{r((1-a)x_1-T)^2}{1+ra^2}.$

Теперь нужно подставить это выражение в функцию издержек первой печи

$J_0(x_0) = \min_{u_0} (u_0^2 + J_1(x_1)),$

заменив при этом $x_1$ на $(1-a)x_0+au_0$.

После этого можно получить выражение для оптимального значения переменной управления первой печи $u_0$ и, соответственно, выражение для $J_0$ - функции издержек первой печи.


Я хочу решить эту задачу в случае $N$ печей. Один из вариантов решения заключается в следующем. Написать систему в общем виде, состоящую из уравнений для оптимальных значений переменной управления и уравнений динамики температуры нагрева $x_i$, и решить при помощи цикла в Matlab. Можно даже не записывать систему уравнений, а подставив уравнение температуры нагрева в уравнение для оптимального значения переменной управления $u_i$, получить последнее в общем виде.

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

$\left\{
\begin{array}{rcl}
 J_i(x_i)=\min_{u_i} (u_i^2+J_{i+1}(x_{i+1}))  \\
 x_{i+1}=(1-a)x_i + a u_i \\
\end{array}
\right.$

Возможно ли это? Если да, то подскажите, пожалуйста, как это реализовать в Matlab. Или наверняка существуют стандартные приемы решения этой задачи, на которые вы могли бы указать.

Если что-то не совсем ясно, внесу правки в сообщение.

 Профиль  
                  
 
 Posted automatically
Сообщение19.04.2016, 14:46 


20/03/14
12041
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Карантин»
по следующим причинам:

lopuxov в сообщении #1116602 писал(а):
Есть функция

И что?

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 Профиль  
                  
 
 Posted automatically
Сообщение19.04.2016, 15:53 


20/03/14
12041
 i  Тема перемещена из форума «Карантин» в форум «Программирование»

 Профиль  
                  
 
 Posted automatically
Сообщение19.04.2016, 16:21 
Модератор


19/10/15
1196
 i  Тема перемещена из форума «Программирование» в форум «Околонаучный софт»
Причина переноса: Matlab обсуждается тут

 Профиль  
                  
 
 Динамическое программирование в Matlab
Сообщение20.04.2016, 19:57 


03/10/08
47
Задача динамического программирования с полной обратной связью (closed-loop). Система нагрева состоит из N печей. Задача заключается в том, чтобы нагреть материал до температуры T. Переменная управления - u, переменная состояния - x. Нужно получить набор оптимальных значений переменной управления, переменной состояния и функции потерь (издержек). Подробнее - для случая двух печей - можно посмотреть здесь (topic107802.html).
/ Ветки на одну тему соединены. // GAA

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

код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M

r=0.8; T=100; N=10; %r - параметр, Т - температура на выходе, N - количество печей

%создание массива символьных переменных

for i=1:1:N+1
    tmpStr = strcat('x', num2str(i));
    sx(i) = sym(tmpStr);
    tmpStr = strcat('u', num2str(i));
    su(i) = sym(tmpStr);
end

sJ(N)=r*(sx(N)-T)^2; J(N)=r*(sx(N)-T)^2;

for i=N-1:1:1
    sJ(i)=u(i)^2+sJ(i+1);
    x(i+1)=(1-a)*sx(i)+a*su(i);
    sJ(i)=subs(sJ(i),sx(i+1),x(i+1)); %подстановка в функцию потерь sJ(i) x(i+1) вместо sx(i+1)
   
    dJ=diff(sJ(i),su(i)); %нахождение производной функции потерь sJ(i) по переменной управления su(i)
    u(i)=solve(dJ,su(i)); %решение полученного уравнения относительно переменной управления su(i) и
                          %получение выражения для оптимального значения u(i)
    sJ(i)=subs(sJ(i),su(i),u(i)); %подстановка выражения для оптимального u(i) в функцию потерь sJ(i)
   
end

%обратный ход

for i = 1:1:N
    u(i) = double(subs(u(i), sx(i), x(i)));
    x(i+1) = subs(x(i+1), sx(i), x(i));
    x(i+1) = subs(x(i+1), su(i), u(i));
    x(i+1) = double(x(i+1));
end
 

 Профиль  
                  
 
 Re: Динамическое прогр-е. Задача о нагреве материала. [MATLAB]
Сообщение20.04.2016, 21:56 
Заслуженный участник


12/07/07
4448
В алгоритм я не вникал, но сразу в глаза бросается банальная ошибка. Во втором цикле (по убыванию) неправильно указан шаг: вместо шага 1 следует взять -1 (иначе цикл ни разу не будет выполняться), т.е. следовало бы вместо
Используется синтаксис Matlab M
for i=N-1:1:1
    sJ(i)=u(i)^2+sJ(i+1);
написать
Используется синтаксис Matlab M
for i=N-1:-1:1
    sJ(i)=u(i)^2+sJ(i+1);

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group