Что такое Steam в matlab

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

При исследовании функции представляют интерес:
— предел функции;
— корни функции.

Вычисление предела функции

Напомним, что функция f(x) имеет предел в точке а тогда и только тогда, когда в этой точке существуют левый и правый пределы, причем они равны. В математике для нахождения пределов функций применяются специальные приемы, в частности такой, как разложением числителя и знаменателя на сомножители и некоторые другие.
Рассмотрим, как можно вычислить предел функции в Matlab.

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

Пример. Требуется вычислить предел функции

Решение задачи приведено ниже в таблице и на рис. 1..

Simulink 01 Начало работы

Вычисление корней функции

Напомним, что корнями функции Y=f(x) называют такие значения х , при которых функция принимает значение ноль.

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

Приведенный ниже пример показывает приближенное вычисление р/2 из решения уравнения cos(x)=0 с представлением косинуса дескриптором:

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

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

Пример . Требуется найти все корни функции

Источник: dzen.ru

Создание S-блоков с использованием программ MATLAB

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

S-функция— это относительно самостоятельная программа, которая написана на языке MATLAB или С. Главное назначение S-функции состоит в решении сле­дующих задач:

· создание новых блоков, которые дополняют библиотеку пакета Simulink;

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

· включение ранее созданных программ на языке С или MATLAB в S-модель.

Стандартными аргументами S-функции являются:

· t – текущее значение аргумента (времени);

· х — текущее значение вектора переменных состояния;

MATLAB в образовании

· u — текущее значение вектора входных величин;

· flag — целочисленная переменная, отражающая форму представления резуль­татов действия S-функции;

· — дополнительные идентификаторы, характеризующие значения некоторых параметров системы, используемых в S-функции (наличие их не является обязательным).

Еще по теме:  Открывается экранная клавиатура Стим

В результате вычислений, осуществляемых при работе S-функции, получают зна­чение такие переменные:

· sys — системная переменная, содержимое которой зависит от значения, кото­рое приобретает переменная flag;

· х0 — вектор начальных значений переменных состояния;

· str — символьная переменная состояния (обычно она пуста []);

· ts — матрица, которая содержит информацию о дискретах времени.

Текст S-функции состоит из текста самой S-функции и текстов подпрограмм (внут­ренних), которые она вызывает. В табл. 1 приведены внутренние процедуры, S-функции.

Таблица 1. Внутренние процедуры S-функции

Процедура Описание
mdlInitializeSizes Устанавливает размеры переменных S-функции и начальные значения переменных состояния
mdlDerivatives Используется как процедура правых частей системы дифференциальных уравнений модели в форме Коши в случае, когда переменные состояния объявлены как непрерывные
mdlUpdate Используется как процедура обновления на следующем интервале дискрета времени значений переменных состояния, которые объявлены как дискретные
mdlOutputs Формирует вектор значений выходных переменных в блоке S-функции
mdlGetTimeOfNextVarHit Является вспомогательной функцией, которая используется для определения момента времени, когда конкретная переменная состояния пересекает заданный уровень
mdlTerminate Является функцией, которая завершает работу S-функции

Некоторые из указанных процедур S-функции могут не использоваться. Это за­висит от типа уравнений (алгебраические, дифференциальные или разностные), которыми описывается моделируемый через S-функцию блок. Так, если блок за­дан алгебраическими уравнениями, то не используются почти все указанные внут­ренние процедуры, за исключением процедуры mdlOutputs, в которой и вычисля­ются соответствующие алгебраические соотношения, определяющие связь между входными переменными и выходными переменными у. В том случае, если пове­дение блока задано системой непрерывных дифференциальных уравнений, не ис­пользуется функция mdl Update, если уравнения блока являются разностными — функция mdlDerivatives. Обязательными являются лишь процедуры mdlInitializeSizes и mdlOutputs (инициализации и формирования выхода).

В зависимости от значения переменной flag главная процедура S-функции со­держит обращение к той или иной внутренней процедуре. Например:

error([‘Unhandled flag — ‘,num2str(flag)]);

В зависимости от значения переменной flag выполняются следующие действия (через вызов соответствующей внутренней процедуры):

· 0 — инициализация блока S-функции;

· 1 — обращение к процедуре правых частей непрерывных дифференциальных уравнений;

· 2 — вычисление новых значений переменных состояния на следующем шаге дискретизации (для дискретной S-функции);

· 3 — формирование значения вектора выходных величин блока S-функции;

· 4 — формирование нового значения модельного времени, которое отсчитывается от момента пересечения заданного уровня определенной переменной со­стояния;

· 9 — прекращение работы блока S-функции.

Установка и изменение значения переменной flag осуществляется автоматиче­ски, без вмешательства пользователя, в соответствии с логикой функционирова­ния блоков при моделировании.

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

Чтобы создать блок S-функции, выполните следующие действия.

1. Напишите текст S-функции, например в виде М-файла; текст составляется на основе файла-шаблона SfunTMPL.m с учетом заданных уравнений поведения блока.

Еще по теме:  Битрейт что это в Стиме

2. Перетащите стандартный блок S-Function (рис. 13) из раздела User-Defined Functions библиотеки Simulink в окно блок-схемы, в которой будет создаваться новый S-блок.

Рис. 13 Заготовка S – функции

3. Дважды щелкните мышью на изображении блока S-Function, что приведет к по­явлению на экране окна его настройки. Окно содержит два поля: S-function name (Имя S-функции), в которое вводится имя написанной S-функции, и S-function parameters (Параметры S-функции), в которое вводятся имена или значения параметров блока, указанных в разделе М-файла, содержащего S-функцию.

4. Введите в указанные поля имя М-файла, в котором хранится S-функция, и список значений параметров S-функции.

5. Щелкните мышью на кнопке ОК. Если система обнаружит М-файл с указан­ным именем в папках, которые для нее доступны, то на изображении блока в окне блок-схемы появится вве­денное имя S-функции.

S-блок на основе S-функции будет соз­дан. Теперь его можно использовать как обычный S-блок в блок-схеме S-модели. На вход этого блока должен поступать векторный сигнал u. Выходом блока станет векторный сигнал у, который сформирован S-функцией во внутренней процеду­ре mdlOutputs.

Пример выполнения работы для варианта:

№ варианта Нелинейная функция ОУ Границы изменения входного параметра ОУ Шаг поиска Структура ОУ Постоянная времени ОУ Чистая задержка ОУ
Y = 25 — (x-5)(x-5) [0;10] ЛН

function [sys,x0,str,ts] = extr(t,x,u,flag)

Источник: megalektsii.ru

Подготовка графиков в MatLab

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

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

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

set(0,’DefaultAxesFontSize’,14,’DefaultAxesFontName’,’Times New Roman’); set(0,’DefaultTextFontSize’,14,’DefaultTextFontName’,’Times New Roman’);

Затем необходимо настроить размер графика и его положение на экране, например, с отображением на весь экран:

figure(‘Units’, ‘normalized’, ‘OuterPosition’, [0 0 1 1]);

При необходимости вставляем название графика:

title(‘Название’);

Далее можно включить построение нескольких графиков в одном окне, c использованием тех же осей и свойств графика:

hold on;%или hold all;

Строим графики с определенным цветом, стилем и толщиной линии:

plot(X2,Y2,’:k’,’LineWidth’,3); plot(X2,Y3,’:b’,’LineWidth’,3); plot(X2,Y4,’-.’,’Color’,[.1 .7 .7],’LineWidth’,3); plot(X2,Y5,’—‘,’Color’,[.1 .4 .1],’LineWidth’,3); plot(X2,Y6,’r’,’LineWidth’,3);

Вставляем легенду в график с определенным положением на рисунке, например справа внизу:

legend(‘исходные данные’,’полином 3-й степени’,’полином 4-й степени’,’полином 5-й степени’,’полином 7-й степени’,’полином 9-й степени’, 4);
И вот тут начинается самое интересное.

Еще по теме:  Как на Стим сделать вх

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

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

воспользуемся небольшим куском кода:

BX=get(gca,’XTick’); BY=get(gca,’YTick’); xlabel(XL,’Position’,[BX(size(BX,2)) BY(1)]) ylabel(YL,’Rotation’,0,’Position’,[BX(1) BY(size(BY,2))]) XA=get(gca,’XTickLabel’);% for i=1:size(XA,1) z=rem(i,2); if z==0; if XA(i,1)~=’0′ XA(i,2)~=0 XA(i,:)=char(0); end end end XA(size(XA,1),:)=char(0); set(gca,’XTickLabel’,XA); YA=get(gca,’YTickLabel’);% for i=1:size(YA,1) z=strfind(YA(i,:),’.’); YA(i,z)=’,’; clear z; z=rem(i,2); if z~=0; YA(i,:)=char(0); end end YA(size(YA,1),:)=char(0); set(gca,’YTickLabel’,YA);

Код «прореживает» подписи осей x и y, а также исправляет точки на запятые в подписях на оси y. Для других осей необходимо повторить аналогичные процедуры.

И в заключении отобразим линии координатной сетки:

grid on;

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

Функция subgraphic

function result=subgraphic(X1,X2,Y1,Y2,Y3,Y4,Y5,Y6,Tit,TL,XL,YL,PL) figure(‘Units’, ‘normalized’, ‘OuterPosition’, [0 0 1 1]); plot(X1,Y1,’o’,’LineWidth’,2,’MarkerEdgeColor’,’k’,’MarkerFaceColor’,[.49 1 .63],’MarkerSize’,5); if Tit title(TL); end hold on; plot(X2,Y2,’:k’,’LineWidth’,3); plot(X2,Y3,’:b’,’LineWidth’,3); plot(X2,Y4,’-.’,’Color’,[.1 .7 .7],’LineWidth’,3); plot(X2,Y5,’—‘,’Color’,[.1 .4 .1],’LineWidth’,3); plot(X2,Y6,’r’,’LineWidth’,3); legend(‘исходные данные’,’полином 3-й степени’,’полином 4-й степени’,’полином 5-й степени’,’полином 7-й степени’,’полином 9-й степени’, PL); BX=get(gca,’XTick’); BY=get(gca,’YTick’); xlabel(XL,’Position’,[BX(size(BX,2)) BY(1)]) ylabel(YL,’Rotation’,0,’Position’,[BX(1) BY(size(BY,2))]) XA=get(gca,’XTickLabel’);% for i=1:size(XA,1) z=rem(i,2); if z==0; if XA(i,1)~=’0′ XA(i,2)~=0 XA(i,:)=char(0); end end end XA(size(XA,1),:)=char(0); set(gca,’XTickLabel’,XA); YA=get(gca,’YTickLabel’);% for i=1:size(YA,1) z=strfind(YA(i,:),’.’); YA(i,z)=’,’; clear z; z=rem(i,2); if z~=0; YA(i,:)=char(0); end end YA(size(YA,1),:)=char(0); set(gca,’YTickLabel’,YA); grid on; result=1;
subgraphic(B,T,A,Y3,Y4,Y5,Y7,Dva_theta_0_5,Tit,’Название’,'<itT>, circC’,'<2<phi>_, град.’,3);

с заранее подготовленными данными.

И здесь нас ждет небольшая засада.

В результате получаем вот такой график:

По умолчанию MatLab отображает греческую букву «фи» как в кириллице «ф». Одним из способов отобразить привычную греческую букву «фи» с петлеобразным начертанием, является выбор специального шрифта c греческими буквами. Скачиваем, например, шрифт Greek Normal отсюда и устанавливаем. Просмотрев шрифт Greek в таблице символов, замечаем, что в этом шрифте буква «фи» существует в двух вариантах, причем для кода латинской «f» получим тот же результат что и в MatLab в виде «ф», а для кода латинской «j» должен быть получен требуемый результат.

subgraphic(B,T,A,Y3,Y4,Y5,Y7,Dva_theta_0_5,Tit,’Название’,'<itT>, circC’,’j>_, град.’,3);
И получим вот такой график:

В результате использования приведенного кода для построения графиков с помощью системы MatLab удалось:

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

UPD Еще один способ, подсказанный в комментариях, для отображения «фи» с петлеобразным начертанием:

text(x, y, ‘$varphi$’, ‘FontSize’, 14, ‘Interpreter’, ‘latex’);

  • matlab
  • графики
  • диаграммы
  • региональные настройки
  • разделитель целой и дробной части

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...