Файл: Элементы математического моделирования в программных средах MATLAB 5 и Scilab (Андриевский Фрадков).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.04.2024
Просмотров: 408
Скачиваний: 1
стей дифференциальных уравнений dx. Процедуре ode45 требуется, чтобы выходной массив был вектор-столбцом (нужной размерности). Для того чтобы выполнить это требование "автоматически", рекомендуется в начале программы выполнять оператор dx=zeros(size(x)) , который строит массив dx нулевых элементов, размер которого совпадает с размером формального входного массива х (в нашем примере size(x)=(2,l)). Процедура содержит также оператор global для передачи значений между головной программой и подпрограммой, минуя аппарат формальных параметров. В системе MATLAB 5 требуется, чтобы глобальные переменные были указаны до присваивания им значений (по тексту программы). В нашем примере это присваивание происходит в головной программе ниже строки, содержащей global. Далее в подпрограмме вычисляется входное (управляющее) воздействие u(t) как программная функция времени. Для этого используется конструкция if - else - end. Последними операторами программы являются операторы вычисления правых частей интегрируемой системы уравнений и записи результата в выходной массив dx.
Как видно из рис. 2.3, а, полученный в результате интегрирования процесс содержит ошибку (значение у(Т) не равно заданному значению ут = 10). Так как для данной задачи поучены аналитические выражения, можно исследовать эту ошибку более подробно. Получим значения y(t) по точной формуле и найдем относительную ошибку в долях ут :
_ Ш M l } где у - результат интегрирования. Расчеты выполним программой, которая запускается после процесса интегрирования, когда соответствующие переменные имеются в рабочей области MATLAB:
у1 =l/2*t.~2*b/m;
y . t l =1/(b+a)*a*y_T
v_tl=l/(b+a)*2~(l/2)*(m*(b+a)*a*y_T*b)~(l/2)/m y 2 = y _ t l + v _ t l * ( t - t l ) - l / 2 * a * ( t - t l ) . ~ 2 / m ; y=[yl(find(t<=tl)); y2(find(t>tl))]; dy=abs(x(:,2)-y)/y_T;
figure
subplot(211),plot(t,y - x(:,2)),grid title('\Delta y=y(t) - y~~(t)') subplot(212),plot(t,dy*100,'.k').grid
46
x l a b e l O t , с ' )
t i t l e ( ' \ d e l t a у, У.')
Первые четыре оператора программы служат для аналитического вычисления y(t) для моментов времени t) полученных выше при численном интегрировании. Весь процесс разбит на два участка: u(t) = Ь (при t G [0,£']) и u(t) = —а (при t 6 (£',*»]). На каждом участке движение определяется сво-
|
bt2 |
|
ей формулой: для первого участка y(t) = |
для второго - |
|
y(i) = y(t') + v{t'){t - t') - |
(t - t')2. Этим |
формулам соот- |
ветствуют первая и четвертая строки программы. Заметим, что, так как аргумент "время" t является массивом, для поэлементного возведения в степень используется операция .
а не ~ . Значения y(t') и v{t') обозначены соответственно через y . t l и v_tl. Они вычисляются во второй и третьей строках программы. Далее формируется массив у, содержащий искомые значения y(t). Для этого можно использовать оператор цикла for - end в сочетании с условным оператором if
- else - |
end. Эта же цель достигается конструкцией |
|
|
y=[yl(find(t<=tl)); |
y 2 ( f i n d ( t > t l ) ) ] ; |
|
|
Смысл |
ее состоит в том, |
что массив у получается |
объеди- |
нением |
(конкатенацией) частей массивов yl, у2. Эти части |
||
(подмассивы) выделяются оператором And, который |
форми- |
рует вектор индексов элементов массивов по указанному в качестве аргумента логическому выражению. Этим логическим выражением здесь служат операции сравнения t<=tl для массива yl и t > t l - для массива у2.
Далее в программе вычисляется относительная ошибка 6у, которая помещается в массиве dy. Конструкция х( : ,2) означает "вырезку" массива результатов х по второму измерению, т.е. выделение значений перемещения y(t), полученных интегрированием. Далее следуют операторы вывода на график. С помощью операторов subplot вывод производится в соответствующую часть графического экрана [74]. Оператор title служит для вывода заголовка графика. Результат выполнения программы показан на рис. 2.3, 5, е. Абсолютная ошибка &У = 2/(0 - 2/(0 показана на рис. 2.3, б. Рассмотрим график относительной ошибки (рис. 2.3, в) более подробно. Видно, что она превышает на конце интервала 2.5%, нарастая с
47
момента времени t'. Появление такой заметной ошибки связано с тем, что рассматриваемая система "неудобна" с точки зрения численного интегрирования, так как правые части
дифференциальных |
уравнений изменяются скачком (в точке |
t = t' процесс u(t) |
имеет разрыв). Автоматически изменяя |
шаг интегрирования, процедура ode45 уменьшает возникающую при этом ошибку, но она все равно остается значительной и имеет тенденцию к накоплению из-за свойств решаемых уравнений. Значения на графике показаны точками именно в те моменты времени, которые получены (автоматически) процедурой интегрирования. Как видно из графика, интервалы между значениями t не одинаковы, наиболее "густо" расположены точки в начале и конце интервала интегрирования, а также в окрестности скачкообразного изменения входно-
го воздействия. Наименьшее значение шага |
интегрирования |
||
оказывается равным 10"5 с и имеет место в начале |
процесса, |
||
а наибольшее - 0.094 с получается для t = 0.34 |
с. 1 Мо- |
||
менту времени |
= 1.07 с соответствует шаг |
интегрирования |
|
0.034 с. Повысить |
точность интегрирования |
можно заданием |
|
соответствующей |
опции программы ode45. |
Для этого заме- |
ним строку, содержащую обращение к процедуре интегрирования в головной программе, на
opt=odesetСRelTol' ,1е-5); [t,х]=ode45('fр1 . 2',[0; Т],хО,opt);
Здесь с помощью оператора odeset установлено значение параметра относительной ошибки RelTol, содержащееся в ODE-структуре с именем opt, равное 10~5 вместо принятого по умолчанию значения 10~3. Структура opt передается в качестве дополнительного параметра при вызове процедуры ode45. Относительная ошибка интегрирования для рассматриваемой задачи оказывается существенно меньше и достигает 0.04 %. Машинное время интегрирования для того же компьютера составляет около 0.27 с. Задавая RelTol равным 10~7, получим наибольшую относительную ошибку около 4-10~4 % при времени счета 0.4 с. Число шагов интегрирования в последнем случае оказывается равным 125; наименьший шаг имеет длину 3 • 10~6 с и получается в окрестности
1 |
Для определения этих |
значений можно использовать опера- |
|
торы |
[mi,ki]«min(diff(t)), |
t(ki), |
[ma,ka]«max(diff(t)), t(ka) и |
kl«find(abs(t-tl)«min(abs(t- |
t l ) ) , |
t(kl) - t(kl - 1) . |
48
скачка входного воздействия. Наибольший шаг составляет
0.09с.
2.2.3.Применение процедур анализа линейных систем
Так как рассматриваемое уравнение (1.4) является линейным ОДУ с постоянными коэффициентами, для его решения можно использовать специальные вычислительные методы, развитые для анализа линейных динамических систем. Эти методы реализованы, в первую очередь, в программах тулбокса CONTROL SYSTEMS, предназначенного для решения задач автоматического управления [6, 74, 61].
Предварительно запишем рассматриваемое уравнение в векторно-матричной форме
|
х = Ах + Ви, |
у = Сх + Du, |
|
|
где вектор |
состояния |
x(t) и входное воздействие u(t) |
были |
|
определены |
выше, а |
вектор |
выходов y(t) в данном примере |
|
можно считать тождественно |
равным я(£), а матрицы |
Л, 5, |
С, D выбираются таким образом, чтобы в результате выполнения матричных операций получилась исходная система дифференциальных уравнений первого порядка. Нетрудно убедиться, что для рассматриваемого примера
"0 |
0" |
, В =0 |
,с = |
'1 |
0" |
— 1 0 |
0 1 — |
Объединим эти матрицы в модели некоторой динамической системы с именем sys и выполним моделирование этой системы средствами тулбокса CONTROL SYSTEMS. Эти действия реализованы в следующей программе: 1
А= [0 0; 1 0 ] ;
В=[1/т; 0];
С = е у е ( 2 );
D = z e r o s ( 2 , l ) ; sys=ss(A,B,C,D); t=(0:Т/8еЗ:Т)1 ;
1 Моменты переключения t' и окончания процесса tm рассчитываются
так же, как и раньше, поэтому операторы вычисления t l и Т в данной программе не приводятся.
49
u l s b * o n e s ( s i z e ( t ) ); u2=-a*ones(size(t));
u=[ul(find(t<=tl)); u 2 ( f i n d ( t > t l ) ) ] ; x=lsim(sys,u,t);
Первые четыре строчки программы задают значения матриц А} В) С, D. Вызовом функции ss из этих матриц строится структура с именем sys, которая рассматривается дальше как модель линейной стационарной системы (ЛС-системы) в форме уравнений состояния. Оператором t=(0:T/8e3:T) ' ; интервал [O,t0] разбивается равномерно на 8000 точек, которые составляют массив t . 1 В следующих трех строчках формируется входное воздействие u(t): сначала генерируются векторы ul и и2 с одинаковыми значениями элементов, равными соответственно 6 и —а для всех точек t. Затем с помощью вырезки и объединения массивов получается последовательность требуемого вида. Возможно, этот же результат проще достичь оператором цикла
nt=length(t); f o r k=l:nt
if t(k)<=tl u(k)=b;
else
u(k)=-a; end
end
После получения массива u выполняется обращение к процедуре lsim, в которой происходит дискретизация модели системы (см. ниже п. 3.3.3) и рекуррентное вычисление реакции дискретной модели на заданное входное воздействие [4, б, 40, 74, 87]. В результате вычислений по этой программе при времени счета 0.16 с наибольшая относительная ошибка составляет около 0.025 %. Как отмечено в литературе [4, 40, 74, 87], эффективность этого метода интегрирования линейных ОЛУ по сравнению с универсальными методами растет с ростом порядка решаемой задачи и особенно велика
1 Данный оператор заканчивается операцией транспонирования ("штрих") только для удобства сочетания данной программы с ранее написанными фрагментами. Без этого массив t окажется вектор-строкой, а не столбцом, как принято выше.
50
для так называемых жестких систем.1 Сведения о жестких ОДУ и методах их интегрирования приведены в [74, 87, 97].
2.2.4.Применение системы SIMULINK
Рассмотрим решение задачи о постановке машины в гараж (п. 1.3) в среде системы визуального моделирования SIMULINK. Программа моделирования SIMULINK, хоть и имеет текстовое представление, создается и используется исследователем в виде блок-схемы (S-моделъ), в которой содержится описание рассматриваемой системы и задаются требуемые действия
[29]. |
Основным действием является моделирование системы, |
|
т.е. |
расчет протекающих в ней процессов в зависимости от |
|
времени. |
5-модель для рассматриваемой задачи показана на |
|
рис. 2.4. |
Блок Step - источник ступенчатого входного сиг- |
Step |
Gain |
Integrator Integrator |
Soope |
Рис. 2.4. 5-модель системы (1.4).
нала. Указаны следующие значения параметров настройки:
Step time (длительность ступеньки) - t l ; Initial value (начальное значение) равно b; Final value (конечное значение) равно
-а.
Блок Gain - усилитель. Параметр Gain (коэффициент передачи) установлен равным 1/т.
Блок Integrator - интегрирующий блок. Приняты заданные по умолчанию значения параметров, в частности нулевые начальные условия (параметр Initial condition).
Блок Scope - индикатор. Служит для вывода результатов в процессе интегрирования в "электронное окно". Параметры блока могут быть настроены после моделирования с помощью выводимых на панели окна кнопок [29].
Диалоговое окно 5-модели имеет меню Simulation (моделирование), которая включает опцию Parameters (параметры).
1 Следует заметить, что для рассматриваемого примера точность в значительной степени зависит от того, насколько близко лежат точки i', К к дискретной последовательности t. При попытке использовать lsim с неравномерным шагом по времени выводится сообщение об ошибке.
51