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
4452
В алгоритм я не вникал, но сразу в глаза бросается банальная ошибка. Во втором цикле (по убыванию) неправильно указан шаг: вместо шага 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, Супермодераторы



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

Сейчас этот форум просматривают: wrest


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

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