<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Блог о Scilab</title>
		<link>http://inclab.ru</link>
		<description>Блог о Scilab</description>
		<language>ru-ru</language>
		<atom:link href="http://inclab.ru/rss" rel="self" type="application/rss+xml" />
		<item>
			<title><![CDATA[Подбор логина и пароля перебором]]></title>
			<link>http://inclab.ru/articles/podbor-logina-i-parolya-pereborom</link>
			<guid>http://inclab.ru/articles/podbor-logina-i-parolya-pereborom</guid>
			<description><![CDATA[<img src="http://inclab.ru" />На примере одной формы авторизации рассмотрим возможность подбора по словарям логина и пароля<h2>Первые шаги</h2>
<p>Предположим, что у нас имеются списки, с наибольшей вероятностью используемых на ресурсе логинов и паролей.</p>
<p>Попробуем авторизоваться на ресурсе с помощью метода грубой силы и использования всего-навсего функционала инструментов разработчика в браузере.</p>

<p>Заходим на страницу авторизации и попробуем ввести логин:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/1wlpx5g/forma-avtorizacii.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/1wlpx5g/forma-avtorizacii.jpg" itemprop="contentUrl" alt="форма авторизации." title="форма авторизации."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">форма авторизации.</span>
</div>
  
<p>Получим ошибку про неправильный <b>логин</b>.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/1xzfes6/poluchili-oshibku.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/1xzfes6/poluchili-oshibku.jpg" itemprop="contentUrl" alt="получили ошибку." title="получили ошибку."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">получили ошибку.</span>
</div>

  
<p>И это радует.</p>
<p>Потому что <b>сообщения</b> о неверном логине и пароле явно <b>будут отличаться</b>, а значит, можно сначала подобрать логин, а потом перейти к паролю.</p>
 
<h2>F12 спешит на помощь</h2>  
<p>Автоматизируем подбор логина, используя только средства разработчика в Firefox.</p>
<p>На текущей странице нужно: </p>
<ol>
<li>нажать f12, </li>
<li>открыть вкладку «Сеть», </li>
<li>далее ввести какие-либо данные в поля логина и пароля,</li>
<li>нажать «login»,</li>
<li>и во вкладке «Сеть» отобразятся все запросы, которые были отправлены со страницы.</li>
</ol>
  

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/1cds8mu/vkladka-set-i-zaprosy.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/1cds8mu/vkladka-set-i-zaprosy.jpg" itemprop="contentUrl" alt="вкладка сеть и запросы." title="вкладка сеть и запросы."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">вкладка сеть и запросы.</span>
</div>
<p>Нам нужно найти POST запрос со статусом 200 и ключевым словом login. </p>
<ol>
<li>Клик правой кнопкой мыши по строке с данным запросом вызовет контекстное меню.</li> 
<li>Выбираем "Использовать как fetch в консоли" (запрос будет скопирован в буфер и появится во вкладке ниже)</li>
</ol>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/16v4y9h/skopirovali-zapros-v-konsol.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/16v4y9h/skopirovali-zapros-v-konsol.jpg" itemprop="contentUrl" alt="скопировали запрос в консоль." title="скопировали запрос в консоль."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">скопировали запрос в консоль.</span>
</div>    
<p>Это  и есть наш <b>POST запрос</b>, в котором указаны <b>username=1 password=2</b>.<br/> Модифицируем этот код так, чтобы вместо параметра username подставлялось значение из списка логинов.</p>
  
<h2>Подготовка к bruteforce</h2>  
<h3>1. Подготовим массив с логинами:</h3>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/vz3w7v/gotovim-massivy-s-dannymi-v-js.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/vz3w7v/gotovim-massivy-s-dannymi-v-js.jpg" itemprop="contentUrl" alt="готовим массивы с данными в js." title="готовим массивы с данными в js."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">готовим массивы с данными в js.</span>
</div> 
  
<p>Добавим цикл перебора логина. Логин будем подставлять прямо в запросе:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/1f56qkt/modificiruem-zapros.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/1f56qkt/modificiruem-zapros.jpg" itemprop="contentUrl" alt="модифицируем запрос." title="модифицируем запрос."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">модифицируем запрос.</span>
</div> 
<p>Скопируем этот код и вернёмся в Firefox..</p>
  
<h3>2. Использование консоли и вкладки "Сеть" в FF</h3>
<p>Этот модифицированный скрипт и вставим в консоль на странице с формой и жмакнем enter, чтобы запустить цикл: </p>
 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/1rgghni/zapuskaem-cikl-otpravki-zaprosov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/1rgghni/zapuskaem-cikl-otpravki-zaprosov.jpg" itemprop="contentUrl" alt="запускаем цикл отправки запросов." title="запускаем цикл отправки запросов."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">запускаем цикл отправки запросов.</span>
</div>  
 
<p>Далее Перейдём на вкладку «Сеть» - здесь куча POST запросов со статусом 200  это и есть перебор логинов.</p> 
    <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/19oju2i/vse-otpravlennye-so-stranicy-zaprosy.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/19oju2i/vse-otpravlennye-so-stranicy-zaprosy.jpg" itemprop="contentUrl" alt=" все отправленные со страницы запросы." title=" все отправленные со страницы запросы."/>
    </picture>
    <span class="image-description text-italic" itemprop="description"> все отправленные со страницы запросы.</span>
</div>  
 
<p>Среди них нужно вручную найти ответ, где логин пользователя оказался верным. </p>
<p>Об этом будет свидетельствовать <b>изменение ошибки на «Incorrect password»</b>.</p>
<p>В текущем случае - это пользователь af, так как теперь на странице выводится ошибка, что пароль не верный.</p> 
   
<h3>3. Теперь подберём пароль. </h3>
<p>В коде с циклом пропишем логин пользователя, раз мы его уже нашли, а бежать мы теперь будем по массиву паролей (который составлен аналогично usernames):</p>   
    <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/1nlxr96/podstavim-naydennyy-login-v-zapros-i-pereberem-paroli.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/1nlxr96/podstavim-naydennyy-login-v-zapros-i-pereberem-paroli.jpg" itemprop="contentUrl" alt=" подставим найденный логин в запрос и переберем пароли." title=" подставим найденный логин в запрос и переберем пароли."/>
    </picture>
    <span class="image-description text-italic" itemprop="description"> подставим найденный логин в запрос и переберем пароли.</span>
</div>  
 
   
   
<h3>Отправка запросов</h3>   
<p>Этот модифицированный скрипт опять вставим в консоль на странице с формой: </p> 
 
  
<p>В ответах на вкладке «Сеть» теперь будем искать POST запрос со статусом 302: под ним и будет нужный пароль. В текущем случае пароль  mustang.</p>  
    <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/s0ln5s/ischem-zapros-s-redirektom-na-profil.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/s0ln5s/ischem-zapros-s-redirektom-na-profil.jpg" itemprop="contentUrl" alt=" ищем запрос с редиректом на профиль." title=" ищем запрос с редиректом на профиль."/>
    </picture>
    <span class="image-description text-italic" itemprop="description"> ищем запрос с редиректом на профиль.</span>
</div>  
 
     


<p>Итак, логин и пароль подобраны и для этого на не понадобилось никакое специальное ПО.</p>   
    <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/podbor-logina-i-parolya-pereborom/dc6lq0/kartinka-s-kotikami.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/podbor-logina-i-parolya-pereborom/dc6lq0/kartinka-s-kotikami.jpg" itemprop="contentUrl" alt=" картинка с котиками" title=" картинка с котиками"/>
    </picture>
    <span class="image-description text-italic" itemprop="description"> картинка с котиками</span>
</div>  
<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/podbor-logina-i-parolya-pereborom'>http://inclab.ru/articles/podbor-logina-i-parolya-pereborom</a><p>]]></description>
			<pubDate>Sat, 13 Apr 2024 23:48:27 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Min элемент в ряду матрицы scilab]]></title>
			<link>http://inclab.ru/articles/min-element-v-matrice</link>
			<guid>http://inclab.ru/articles/min-element-v-matrice</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Поиск минимального элемента в строке матрицы<p>Рассмотрим задачку из линейной алгебры: как найти наименьший элемент в строке матрицы в scilab, без использования встроенной функции.</p>
<p>А встроенные полезные функции для работы с матрицами описаны в <a href="https://inclab.ru/beginner/specialnye-matrichnye-funkcii">этом материале</a>, а линейной алгебры - в <a href="https://inclab.ru/beginner/reshenie-slu-oslu-v-scilab">этом</a>.</p>
<h2>Постановка задачи</h2>
<p>Сформировать матрицу \( M(7,5) \) по правилу \( M(i, j) = cos(i^2 - \frac{j}{2}) \).
Определить наименьший элемент в каждой строке матрицы и записать его в 
соответствующий элемент вектора \( V \). Вывести на экран сформированную 
матрицу и полученный вектор \(V \), сравнить результат со встроенной функцией.</p>

<h2>Приступим к работе</h2>

<p>Создадим заглушку функции, которая будет генерировать элементы матрицы по заданному правилу:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Заготовка функции для формирования матрицы</span>
</div>


<p>Создадим заглушку функции, которая будет искать минимальный элемент в каждой строке матрицы и формировать вектор:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Заготовка функции для поиска min элемента</span>
</div>

<h2>Генерируем матрицу</h2>

<p>Создавать матрицу по заданному правилу будем построчно во вложенном цикле: </p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Формируем матрицу</span>
</div>

<h2>Ищем заданный элемент в строке</h2>

<p>Разобьем поиск заданного элемента в строке матрицы на два процесса: раздел матрицы по строкам в цикле \(for\) и сам поиск элемента  в функции \(findMinInRow\). (Так будет удобно модифицировать функцию поиска элемента с наименьшего на наибольший, например). <br>Результат запишем в вектор \(mVector\).</p>

<p>Пройдёмся по строкам матрицы: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Начали обход матрицы</span>
</div>

<p>Искать наименьший элемент в строке матрицы будем перебором. </p>
<p>В переданной строке \(curRow\), примем, что первый элемент \(curRow(1)\) - есть искомый \(curMinElement\).<br> Далее, пробегая строку, т.е. увеличивая номер столбца, будем сравнивать текущий элемент \(curRow(j)\) с "минимальным" \(curMinElement\). Если найденный будет меньше минимального  - обновим минимальный. </p>

<p>Код пользовательской функции поиска мин элемента будет слудующий: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Перебираем элементы в строке матрицы</span>
</div>

<p>Добавим вектор, полученный с помощью встроенной scilab функции поиска минимального эдемента в строке матрицы:</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Встроенная scilab функция поиска min элемента в строке матрицы</span>
</div>    
  
<h2>Выводим результаты</h2>

<p>Вывалим в консоль всё, что нагенерировали:</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Встроенная scilab функция поиска min элемента в строке матрицы</span>
</div>   
  
<p>Окончательно, наша программа на scilab будет выглядеть так:</p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a></b></p>
<span class="image-description text-italic">Работа с матрицами с scilab</span>
</div>   
  
  <p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/min-element-v-matrice'>http://inclab.ru/articles/min-element-v-matrice</a><p>]]></description>
			<pubDate>Mon, 14 Aug 2023 16:13:10 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Сумма ряда в scilab]]></title>
			<link>http://inclab.ru/articles/summa-ryada-v-scilab</link>
			<guid>http://inclab.ru/articles/summa-ryada-v-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Подсчёт конечной суммы бесконечного ряда с заданной точностью<p>Рассмотрим простую задачку из матана: как посчитать конечную сумму ряда приближенно в scilab, задав предварительно точность для сравнения с аналитическим значением.</p>
<h2>Постановка задачи</h2>
<p>Вычислить приближенное значение бесконечной суммы   \( \frac{1}{1\cdot 3}  + \frac{1}{2\cdot 4} + \frac{1}{3\cdot 5}...\) с точностью \( \varepsilon = 0,0001  \). Сравнить полученный результат c точным значением, равным \( 0.75  \)</p>

<h2>Вводим входные параметры</h2>
<p>Создадим заглушку функции, которая принимала бы от пользователя на вход точность и значение, к которому будем приближаться:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Заготовка функции</span>
</div>

<h2>Задание необходимых параметров в функции</h2>
<p>Для подсчета суммы в пользовательской функции нам потребуется:</p> 
  <ul>
  <li>накопитель \(curSum \):</li> 
  <li>текущая ошибка \(curErr \):</li>
  <li>счетчик итераций \(n \)</li>
  <li>и максимальное число суммирований чтобы не упасть в бесконечный цикл \(maxIteration \):</li>
</ul>

<p>При этом, \(myRange \) функция примет вид:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Подготовка к циклу подсчета ряда</span>
</div>

<h2>Подсчет частичной суммы в цикле</h2>
<p>Создадим цикл с ограничением на допустимое отклонение от эталона и максимальное число итераций </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Условия продолжения суммирования</span>
</div>

<p>На каждом шагу цикла будем:<br/> 
  -- прибавлять одно слагаемое ряда</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Накапливаем сумму</span>
</div>  
  
<p>-- считать отклонение от заданного значения</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Считаем ошибку</span>
</div>    
  
  <p>-- увеличивать счетчик</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Итерация++</span>
</div>  
  
<p>В итоге, цикл примет вид:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Циклу подсчета ряда</span>
</div>  
  
<p>Добавим в пользовательскую цункцию ещё и вывод промежуточных результатов, чтобы отслеживать происходящее. Окончательно, программа, осущетсвляющая подсчет ряда на scilab будет выглядеть:</p>  
  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a></b></p>
<span class="image-description text-italic">Вычисляем приближённое значение ряда</span>
</div>   
  
  
  
  
  
  
  
  
  
  
  
  
  
  <p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/summa-ryada-v-scilab'>http://inclab.ru/articles/summa-ryada-v-scilab</a><p>]]></description>
			<pubDate>Mon, 14 Aug 2023 16:21:44 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Пишем нейросеть на Scilab]]></title>
			<link>http://inclab.ru/articles/pishem-neyroset-na-scilab</link>
			<guid>http://inclab.ru/articles/pishem-neyroset-na-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Реализация на Scilab процесса настройки нейросети<h3>Реализация на Scilab процесса обучения нейронной сети</h3>
<p>Соберём уже знакомые функции, которые нам понадобятся:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a></b></p>
</div>	

<p>Зададим число узлов (нейронов) и слоёв в нашей сети:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a></b></p>
</div>

<p>И сгенерируем нейросеть со случайными матрицами весовых коэффициентов:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a></b></p>
</div>
 <p> здесь    <br/> 
\(net - \) это матрица нейросети размером \( 5\times 4 \), первый столбец которой - случайный входной вектор, например: </p>

<p class="text-center"> 
\( 
  net = \begin{pmatrix}
   0.21  & 0. &  0. &  0. \\
   0.76  & 0. &  0. &  0.\\
   0.    & 0. &  0. &  0.\\
   0.33  & 0. &  0. &  0.\\
   0.67 &  0. &  0. &  0.
  \end{pmatrix}   
  \)  
 </p>  


<p>\(matr - \) гипер-структура list, элементами которой являются весовые матрицы размером \( 5\times 5 \) со случайно сгенерированными значениями, например:</p>  
<p class="text-center"> 
\( 
  weightMatrixes(1) = \begin{pmatrix}
   0.29 &  0.65 &  0.61 &  0.57 &  0.12\\
   0.86  & 0.99 &  0.85 &  0.57 &  0.73\\
   0.85  & 0.05 &  0.06 &  0.82 &  0.27\\
   0.53 &  0.75 &  0.83 &  0.06 &  0.55\\
   0.99 &  0.41 &  0.93 &  0.56 &  0.99
  \end{pmatrix}   
  \)  
 </p>  

<p>Зададим количество итераций \( lim \), массив для сбора результата каждой эпохи \( epoch \),  скорость обучения нейросети \( educationSpeed \) и эталонный выход \( vectorOutputEtalon \):</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a></b></p>
</div>

<p>И с помощью цикла \( for \) проведём обучение неросети на Scilab:</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a></b></p>
</div>
<p>В первом вложенном цикле происходит <a href="https://inclab.ru/profi/prosteyshaya-neyronnaya-set-na-scilab">прямое распространение сигнала  в нейросети</a> - заполнение всех столбцов матрицы \( neuralNetwork \).</p> 

<p>Далее в текущий столбец  \( epoch \) записывается полученный выходной вектор нейронки, он нам пригодится позже для отслеживания процесса обучения.</p> 

<p>После каждого прямого прохода по сети, мы <a href="https://inclab.ru/profi/obuchenie-neyronnoy-seti">расчитываем ошибку</a> на каждом из слоёв <!--и пишем результат в гипер-структуру list-->:<br/>
 - cначала, на выходном,- как разницу эталонного и текущего выхода, <br/>
 - а далее, во втором вложенном цикле, -  на остальных слоях, вплоть до входного.</p> 

<p>И, наконец, расчитываем весовую поправку \( dW \) и <a href="https://inclab.ru/profi/obuchenie-neyronnoy-seti">обновляем коэффициенты весовых матриц</a> \( weightMatrixes \).</p> 

<h3>Обработка результа тренировки нейронной сети на Scilab</h3>
<p>Для того, чтобы не сверять самостоятельно циферки на выходе нейросети с эталонными значениями, выведем график зависимости выходного слоя от эпохи (итерации) обучения:</p> 
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a></b></p>
</div>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/pishem-neyroset-na-scilab/mjhrvb/priblizhenie-vyhodnyh-znacheniy-neyroseti-k-ehtalonnym-na-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/pishem-neyroset-na-scilab/mjhrvb/priblizhenie-vyhodnyh-znacheniy-neyroseti-k-ehtalonnym-na-scilab.jpg" itemprop="contentUrl" alt="Приближение выходных значений нейросети к эталонным на Scilab" title="Приближение выходных значений нейросети к эталонным на Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Приближение выходных значений нейросети к эталонным на Scilab</span>
</div>



















<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/pishem-neyroset-na-scilab'>http://inclab.ru/articles/pishem-neyroset-na-scilab</a><p>]]></description>
			<pubDate>Mon, 04 Jul 2022 18:11:21 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Корректировка весовых коэффициентов  нейросети в Scilab]]></title>
			<link>http://inclab.ru/articles/obuchenie-neyronnoy-seti</link>
			<guid>http://inclab.ru/articles/obuchenie-neyronnoy-seti</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Обратное распостранение ошибки в нейроннонной сети и корректировка весовых коэффициентов по методу градиентного спуска<p>Ранее мы улучшали поведение простого <a href="https://inclab.ru/profi/nastroyka-lineynogo-klassifikatora-scilab">линейного классификатора</a> и рассмотрели, как по входу и матрицам весов <a href="https://inclab.ru/profi/prosteyshaya-neyronnaya-set-na-scilab">нейросети</a> вычислить её выход.</p>
<p>Теперь предположим, что имеется некий эталоный выход, к которому должен стремиться результат работы нейросети. Для достижения эталона нам потребуется что-то перенастраивать в сети. Это будут весовые коэффициенты.</p>

<p>Выясним, как мы будем обновлять матрицы весов.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/obuchenie-neyronnoy-seti/1c1lie5/zagotovka-raspredeleniya-oshibki-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/obuchenie-neyronnoy-seti/1c1lie5/zagotovka-raspredeleniya-oshibki-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Заготовка распределения ошибки. Изображение из (1)" title="Заготовка распределения ошибки. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Заготовка распределения ошибки. Изображение из (1)</span>
</div>
<h2>Обратное распространение ошибки в нейронной сети</h2>
<p>Воспользуемся методом ОРО, пропорционально распределяя ошибку между имеющимися узлами:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/obuchenie-neyronnoy-seti/8pitjk/prostaya-set-i-oshibka-na-uzlah-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/obuchenie-neyronnoy-seti/8pitjk/prostaya-set-i-oshibka-na-uzlah-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Простая сеть и ошибка на узлах. Изображение из (1)" title="Простая сеть и ошибка на узлах. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Простая сеть и ошибка на узлах. Изображение из (1)</span>
</div>
<p>Определим ошибку на выходном слое \(  e^{О}\), как разность между эталонным значением \(  t_{i}\) и полученным \(  o_{i}\) на выходе нейросети : </p>
<p class="text-center"> \(  e^{О}_{i} = t_{i} - o_{i}\)</p>
<p>Тогда, глядя на рисунок выше, заключим, что ошибка \(  e^{О}_{1}\) распределяется пропорционально весам \(  w_{11}\) и \(  w_{21}\), а ошибка \(  e^{О}_{2}\) должна распределяться пропорционально весам \(  w_{12}\) и \(  w_{22}\). </p>

<p>Запишем эти доли в явном виде:</p>
<p class="text-center"> \(  e^{O}_{1} = \displaystyle\frac {w_{11}}{w_{11} + w_{21}}; \quad e^{O}_{2} = \displaystyle\frac {w_{12}}{w_{12} + w_{22}}, \)</p>
  


<p>Итак, на основе отклонения текущего выхода от эталонного, мы будем обновлять весовые коэффициенты во всей нейросети, двигаясь с конца к её началу.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/obuchenie-neyronnoy-seti/1ozvrnz/raspredelenie-oshibki-po-sloyam-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/obuchenie-neyronnoy-seti/1ozvrnz/raspredelenie-oshibki-po-sloyam-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Распределение ошибки по слоям. Изображение из (1)" title="Распределение ошибки по слоям. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Распределение ошибки по слоям. Изображение из (1)</span>
</div>

<p>Но если сначала мы использовали ошибку выходного слоя, то какую ошибку использовать для узлов скрытого слоя? Ведь мы не можем указать очевидную ошибку для узла в таком слое. <br/> Разберёмся, как определить ошибку для скрытого узла.</p>

<h3>Ошибка скрытого слоя</h3>
<p>Мы можем воссоединить ошибки, распределенные по связям следующим образом: ошибка на первом скрытом узле \(  e^{H}_{1} \) представляет собой сумму ошибок, распределенных по всем связям, исходящим из этого узла в прямом направлении: </p>
<p class="text-center"> \(  e^{H}_{1} = e^{O}_{1} \cdot \frac {w_{11}}{w_{11} + w_{21}} + e^{O}_{2} \cdot \frac {w_{12}}{w_{12} + w_{22}}, \)</p>
  
  <p>или как показано на иллюстрации ниже:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/obuchenie-neyronnoy-seti/v8p7hg/metod-oro-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/obuchenie-neyronnoy-seti/v8p7hg/metod-oro-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Метод ОРО. Изображение из (1)" title="Метод ОРО. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Метод ОРО. Изображение из (1)</span>
</div>

<p>Применять данную методику мы будем до тех пор, пока не доберёмся до входного слоя:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/obuchenie-neyronnoy-seti/1gs63o3/raschet-oshibki-na-vnutrennih-uzlah-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/obuchenie-neyronnoy-seti/1gs63o3/raschet-oshibki-na-vnutrennih-uzlah-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Расчет ошибки на внутренних узлах. Изображение из (1)" title="Расчет ошибки на внутренних узлах. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Расчет ошибки на внутренних узлах. Изображение из (1)</span>
</div>


<h3>Векторизация метода ОРО в нейросети</h3>
<p>Опять, так как Scilab - матричный язык, адаптируем поэлементный процесс обратного распространения ошибки в нейросети под удобный нам.</p>
<p>Зададим эталонный вектор \(  V_{e}\), тогда ошибка  \(  E_O\) на выходном слое \(  O\) считается самым простым способом:</p>
<p class="text-center"> \(  E_O = V_{e} - O \)</p>
<p>Ошибка \(  E_H \) на скрытом слое \(  H\)  будет считаться с учетом вклада каждого узла следующим образом:</p>
<p class="text-center"> 
  \(  E_H = \begin{pmatrix}
  \frac {w_{11}}{w_{11} + w_{21}} & \frac {w_{12}}{w_{12} + w_{22}} \\
  \frac {w_{21}}{w_{21} + w_{11}} & \frac {w_{22}}{w_{22} + w_{12}} 
  \end{pmatrix} \cdot E_o
\)  
</p> 
<p>Здесь  \(  w_{ij} \) - элементы матрицы \(  W_{HO} \), задающей веса для слоёв выходной-скрытый.</p>
<p>Это выражение  можно переписать в более простом виде, отказавшись от знаменателей в первом множителе. Тогда получим связь  с весовой матрицей на текущем шаге:</p>
<p class="text-center"> 
  \(  E_H = \begin{pmatrix}
  w_{11} & w_{12} \\
  w_{21} & w_{22}
  \end{pmatrix} \cdot E_O 
\)  
</p>
<p>Итак, ошибка  \(  E_H \) скрытого вычисляется с учётом ошибки \(E_O\) выходного слоя и матрицы \(  W_{HO} \):</p>
<p class="text-center">  \(  E_H = W_{HO}^T \cdot E_O\)  </p>
<p>Аналогично, для входного слоя ошибка \(  E_I \) будет вычисляться с учётом ошибки \(E_H\) предыдущего слоя в связи с матрицей \(  W_{IH} \), определяющей веса входной-скрытый слоёв:</p>
<p class="text-center">   \(   E_I = W_{IH}^T \cdot E_H\)  </p>

<h2>Обновление весовых коэффициентов</h2>
<p>Для обновления весовых коэффициентов мы воспользуемся методом градиентного спуска (подробнее в (1)).</p>
<p>При подсчёте ошибки на каждом из слоёв, будем немного корректировать весовые коэффициенты соответвующей весовой матрицы на величину  \(  \Delta w \), которая на векторно-матричном языке может быть представлена как:</p>
 <p class="text-center">   \(   \Delta w = - \alpha \cdot E_k \cdot O_k \cdot (1 - O_k) \cdot O^T_j,    \)  </p> 

 <p> где    <br/> 
\(\alpha - \) скорость обучения нейронной сети \(\alpha \in (0,1) \),   <br/> 
\(E_k - \) ошибка текущего слоя (вектор столбец),  <br/>  
\(O_k - \) текущий слой (вектор-столбец),    <br/>
\(O^T_j - \) предыдущий слой (вектор-столбец).</p> 

 <p> А обновлённая матрица весов примет вид:</p> 
 <p class="text-center">   \( W^{new} = W^{cur} -  \Delta w  \)  </p> 


<p>Осталось лишь собрать всё в программный код <a href="https://inclab.ru/profi/pishem-neyroset-na-scilab">обучения нейросети</a> &#128513;</p>

<p>Данная статья создана на основе <a id="tarikbook" target="_blank" href="https://books.google.ru/books?id=wynnDwAAQBAJ">чудесной книги</a>(1) с реализацией автором  приведённых примеров на Scilab.</p>











<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/obuchenie-neyronnoy-seti'>http://inclab.ru/articles/obuchenie-neyronnoy-seti</a><p>]]></description>
			<pubDate>Mon, 04 Jul 2022 18:08:38 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Решение СЛУ и ОСЛУ в Scilab]]></title>
			<link>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</link>
			<guid>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Функции наиболее часто применяемые для решения СЛАУ.<p>Основные функции для работы с матрицами рассмотрены в статье <a href="https://inclab.ru/beginner/odnomernye-i-mnogomernye-massivy-v-skilabe">Массивы в Scilab</a>.<br/>
Специальные функции для работы с матрицами рассмотрены в статье <a href="https://inclab.ru/beginner/specialnye-matrichnye-funkcii">Специальные матричные функции в Scilab</a>.</p>
<p>Ниже остановимся на функциях, которые могут полезны, в том числе, для решения задач линейной алгебры.</p>
  
  
<h2>Характериститики матрицы</h2>
<h3 style="font-weight: normal"><em>Найдём определитель матрицы A</em>: функция <em>det()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 3 \\
  2 & 7 & 1 \\
  0 & 4 & 1 
  \end{pmatrix} &
    
  d = 27
   \end{matrix}
  \)  
 </p>

<h3 style="font-weight: normal"><em>Найдём ранг матрицы A</em>: функция <em>rank()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 3 \\
  2 & 7 & 1 \\
  0 & 4 & 1 
  \end{pmatrix} &
    
  r = 3
   \end{matrix}
  \)  
 </p>

<h3 style="font-weight: normal"><em>Найдём норму матрицы</em>: функция <em>norm(A,option) </em>в Scilab</h3>

<p><em>option</em> - число или строка. Принимает значения:<br/>
2 - вычисляет 2-ю норму матрицы (её наибольшее сингулярное значение).<br/>
1 - вычисляет 1-ю норму матрицы (её наибольшая сумма в столбцах).<br/>
'inf' - вычисляет бесконечную норму матрицы (её наибольшая сумма в строках).<br/>
'fro' - вычисляет евклидову норму матрицы (корень из суммы квадратов всех элементов матрицы).</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 3 \\
  2 & 7 & 1 \\
  0 & 4 & 1 
  \end{pmatrix} &    
  |A|_2 = 8.3940402 &    
  |A|_1 = 11 &    
  |A|_{inf} = 10 &    
  |A|_{fro} = 9
  
   \end{matrix}
  \)  
 </p>


<h3 style="font-weight: normal"><em>Найдём число обусловленности матрицы A по 2-й норме</em>: функция <em>сond()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 3 \\
  2 & 7 & 1 \\
  0 & 4 & 1 
  \end{pmatrix} &
    
  с = 8.0199286
   \end{matrix}
  \)  
 </p>


 
<h2>Функции для решения систем линейных уравненений</h2>
<h3 style="font-weight: normal"><em>Найдём собственные значения и собственные вектора матрицы A</em>: функция <em>spec()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	


<h3 style="font-weight: normal"><em>Найдём обратную матрицу к A</em>: функция <em>inv()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
    \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 3 \\
  2 & 7 & 1 \\
  0 & 4 & 1 
  \end{pmatrix}&
  
  A^{-1} = \begin{pmatrix}
   0.1111111 &  0.4444444 & -0.7777778\\
  -0.0740741 &  0.037037  &  0.1851852\\
   0.2962963 & -0.1481481 &  0.2592593
  \end{pmatrix} \\
  
  A\cdot A^{-1} = E

  \end{matrix}
  \)  
 </p>

<p>Если появляется ошибка <em>Задача вырождена</em>, значит определитель исходной матрицы равен или близок к нулю</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
    \begin{matrix}  
  B = \begin{pmatrix}
  1 & 2 & 3 \\
  1 & 4 & 5 \\
  1 & 6 & 7 
  \end{pmatrix}&
  
  det(B) = 0

  \end{matrix}
  \)  
 </p>


<h3 style="font-weight: normal"><em>Решаем СЛАУ</em> \( A\cdot x+b=0\): функция <em>linsolve(A,b)</em> в Scilab</h3>
<p>1) Решим систему линейных алгебраических уравнений привычного вида:</p>
<p class="text-center"> 
\( 
\begin{cases}
  2x_1 + x_2 = 1 \\ 
  x_1 - 2x_2 = 3 
\end{cases}
  \)  
 </p>

<p>Для начала её нужно привести к виду, который принимает Scilab - перенести вектор свободных членов влево:</p>
<p class="text-center"> 
\( 
\begin{cases}
  2x_1 + x_2 -1 = 0 \\ 
  x_1 - 2x_2 - 3 =0 
\end{cases}
  \)  
 </p>

<p>Теперь определим вид матрицы А и вектора b:</p>
<p class="text-center"> 
\( 
    \begin{matrix}  
  A = \begin{pmatrix}
  2 & 1  \\
  1 & -2  
  \end{pmatrix}&
  
  b = \begin{pmatrix}
   -1 \\ -3
  \end{pmatrix} &
  
  A\cdot x+b=0

  \end{matrix}
  \)  
 </p>

<p>Зададим матрицу и вектор-столбец в Scilab и решим его силами полученную СЛАУ:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p>Получим красивый ответ:</p>
<p class="text-center"> 
\(   
  X = \begin{pmatrix}
   1 \\ -1
  \end{pmatrix}
  \)  
 </p>



<p>2) Если СЛАУ имеет <em>бесконечное число решений</em>, Scilab выведет только одно из них.</p>
<p>Решим систему линейных алгебраических уравнений вида:</p>
<p class="text-center"> 
\( 
\begin{cases}
  x_1 - 3x_2 = 1 \\ 
  2x_1 - 6x_2 = 2 
\end{cases}
  \)  
 </p>

<p>Зададим матрицу и вектор-столбец в Scilab:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p>Получим одно из возможных решений:</p>
<p class="text-center"> 
\(   
  X = \begin{pmatrix}
   0.1 \\ -0.3
  \end{pmatrix}
  \)  
 </p>

<p>3) Если возникает ошибка <em>Конфликтующие линейные  ограничения</em>, значит система не имеет решений.</p>
<p>Решим систему линейных алгебраических уравнений вида:</p>
<p class="text-center"> 
\( 
\begin{cases}
  x_1 - x_2 = 1 \\ 
  2x_1 - 2x_2 = -1 
\end{cases}
  \)  
 </p>

<p>Зададим матрицу и вектор-столбец в Scilab:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p>Получим ошибку: ВНИМАНИЕ: Конфликтующие линейные  ограничения.</p>
<p>Чтобы убедиться, что в матрице системы есть ЛНЗ строки или столбцы, потребуется приведение матрицы к ступенчатому виду.</p>

<h3 style="font-weight: normal"><em>Приводим систему линейных уравнений к ступенчатому виду</em>: функция <em>rref(A)</em> в Scilab</h3>
<p>Приведём матрицу к треугольной форме методом Гаусса:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 3 \\
  2 & 7 & 1 \\
  0 & 4 & 1 
  \end{pmatrix} &
    \tilde{} &
   \begin{pmatrix}
  1 & 0 & 0 \\
  0 & 1 & 0 \\
  0 & 0 & 1 
  \end{pmatrix}
   \end{matrix}
  \)  
 </p>

<h2>Функции разложения матрицы</h2>.
<h3 style="font-weight: normal"><em>Треугольное разложение матрицы</em> \(A = L\cdot U\): функция <em>lu()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	
<p>\(L-\) нижне-треугольная матрица, \(U-\) верхне-треугольная матрица:</p>
<p class="text-center"> 
\( 
    \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 & 3 \\
  2 & 7 & 1 \\
  2 & 4 & 1 
  \end{pmatrix}\\
  
  L = \begin{pmatrix}
   0.5 &  0.5 & 1\\
   1 &  0  &  0\\
   1 & 1 &  0
  \end{pmatrix} &
  
  U = \begin{pmatrix}
   2. &  7. &  1. \\
   0.&  -3. &  0. \\
   0. &  0.&   2.5
  \end{pmatrix}

  \end{matrix}
  \)  
 </p>

<h3 style="font-weight: normal"><em>Разложение матрицы на ортогональную и верхне-треугольную</em> \(A = Q\cdot R\): функция <em>qr()</em> в Scilab</h3>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a></b></p>
</div>	
<p>\(Q-\) ортогональная матрица, \(U-\) верхне-треугольная матрица:</p>
<p class="text-center"> 
\( 
    \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 & 3 \\
  2 & 7 & 1 \\
  2 & 4 & 1 
  \end{pmatrix}\\
  
  Q = \begin{pmatrix}
  -0.3333333 &  0.2981424 & -0.8944272\\
  -0.6666667 & -0.745356  &  0.      \\ 
  -0.6666667 &  0.5962848 &  0.4472136
  \end{pmatrix} &
  
  R = \begin{pmatrix}
  -3. & -8.        & -2.3333333\\
   0. & -2.236068 &  0.745356 \\
   0. &  0.       & -2.236068 
  \end{pmatrix}

  \end{matrix}
  \)  
 </p>


<p>Основные функции для работы с матрицами рассмотрены в статье <a href="https://inclab.ru/beginner/odnomernye-i-mnogomernye-massivy-v-skilabe">Массивы в Scilab</a>.</p>



<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/reshenie-slu-oslu-v-scilab'>http://inclab.ru/articles/reshenie-slu-oslu-v-scilab</a><p>]]></description>
			<pubDate>Mon, 27 Jun 2022 21:56:25 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Матрицы и массивы в Scilab: полный гайд]]></title>
			<link>http://inclab.ru/articles/specialnye-matrichnye-funkcii</link>
			<guid>http://inclab.ru/articles/specialnye-matrichnye-funkcii</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Для работы с матрицами и векторами в существуют специальные функции Scilab.
Рассмотрим наиболее часто используемые из них.<p>Основные функции для работы с матрицами рассмотрены в статье <a href="https://inclab.ru/beginner/odnomernye-i-mnogomernye-massivy-v-skilabe">Массивы в Scilab</a>. <br/>
Другие полезные функции рассмотрены в статье <a href="https://inclab.ru/beginner/reshenie-slu-oslu-v-scilab">Функции для решения задач линейной алгебры в Scilab</a></p>

  
  
<p>Ниже остановимся на специальных функциях: поиска минимального и максимального элементов, сортировки, объединения массивов в Scilab и т.д..</p>
<h2>Задание матриц/векторов специального вида</h2>
<h3 style="font-weight: normal"><em>Создаём матрицу из единиц</em>: функция <em>ones(n,m)</em> в Scilab</h3>

<p>Указываем число строк и число столбцов матрицы.</p>
<p>Задаём вектор-строк и вектор-столбец единиц</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  R = \begin{pmatrix}
  1 & 1 & 1 
  \end{pmatrix} &
    
  C = \begin{pmatrix}
  1 \\  1  \\  1 
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>

<p>Задаём матрицу из единиц размерностью m на n</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 1 \\
  1 & 1 \\
  1 & 1 
  \end{pmatrix} &
    
  S = \begin{pmatrix}
  1 & 1 \\
  1 & 1
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>

<p>Задаём матрицу D из единиц, той же размерности, что и матрица A</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 5 & 4 \\
  3 & 2 & 6 
  \end{pmatrix} &
    
  D = \begin{pmatrix}
  1 & 1 & 1\\
  1 & 1 & 1
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>



<h3 style="font-weight: normal"><em>Создаём матрицу из нулей</em>: функция <em>zeros(n,m)</em> в Scilab</h3>

<p>Указываем число строк и число столбцов матрицы.</p>
<p>Задаём вектор-строк и вектор-столбец нулей</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  R = \begin{pmatrix}
  0 & 0 & 0 
  \end{pmatrix} &
    
  C = \begin{pmatrix}
  0 \\  0  \\  0 
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>

<p>Задаём матрицу нулей размерностью m на n</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  0 & 0 \\
  0 & 0 \\
  0 & 0 
  \end{pmatrix} &
    
  S = \begin{pmatrix}
  0 & 0 \\
  0 & 0
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>

<p>Задаём матрицу D из нулей, той же размерности, что и матрица A</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 5 & 4 \\
  3 & 2 & 6 
  \end{pmatrix} &
    
  D = \begin{pmatrix}
  0 & 0 & 0\\
  0 & 0 & 0
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>



<h3 style="font-weight: normal"><em>Создаём единичную матрицу</em>: функция <em>eye(n,m)</em> в Scilab</h3>

<p>Указываем число строк и число столбцов матрицы.</p>
<p>Задаём единичную матрицу нулей размерностью m на n</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 0\\
  0 & 1 & 0\\
  0 & 0 & 1
  \end{pmatrix} &
    
  B = \begin{pmatrix}
  1 & 0 & 0 & 0\\
  0 & 1 & 0 & 0\\
  0 & 0 & 1 & 0
  \end{pmatrix}  &
    
  V = \begin{pmatrix}
  1 \\
  0 \\
  0 
  \end{pmatrix} 
   \end{matrix}
  
  \)  
 </p>

<p>Задаём единичную матрицу D, той же размерности, что и матрица A</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 \\
  4 & 5 
  \end{pmatrix} &
    
  D = \begin{pmatrix}
  1 & 0 \\
  0 & 1 
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>


<h3 style="font-weight: normal"><em>Создаём случайную матрицу/вектор</em>: функция <em>rand(n,m, key)</em> в Scilab</h3>

<p>Указываем число строк и число столбцов матрицы и необязательный параметр key -  это символьная переменная с помощью которой можно задать тип распределения случайной величины (по умолчанию равномерное - 'uniform': гауссовское - 'normal').</p>
<p>Задаём матрицу m на n случайных чисел</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  0.2113249 & 0.3303271\\
  0.7560439 & 0.6653811 \\
  0.0002211 & 0.6283918
  \end{pmatrix} &
    
   
  V = \begin{pmatrix}
  -0.7335813 \\
  0.1034169 \\
  0.8915736 
  \end{pmatrix} 
   \end{matrix}
  
  \)  
 </p>



<h3 style="font-weight: normal"><em>Создаём квадратную матрицу с элемнтами V на k-oй диагонали</em>: функция <em> diag(V[,k]) </em> в Scilab</h3>

<p>Задаём вектор V  и указываем, на какой диагонали его разместить.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
  <span class="image-description text-italic">Задаём главную диагональ</span>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 0 & 0\\
  0 & 2 & 0\\
  0 & 0 & 3
  \end{pmatrix} 
   \end{matrix}
   \)  
 </p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
  <span class="image-description text-italic">Задаём произвольную диагональ: выше или ниже главной</span>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  B = \begin{pmatrix}
  0 & 1 & 0 & 0\\
  0 & 0 & 2 & 0\\
  0 & 0 & 0 & 3 \\
  0 & 0 & 0 & 0
  \end{pmatrix} &
  
    C = \begin{pmatrix}
  0 & 0 & 0 & 0\\
  1 & 0 & 0 & 0\\
  0 & 2 & 0 & 0\\
  0 & 0 & 3 & 0
  \end{pmatrix} 
  
   \end{matrix}
   \)  
 </p>



<h3 style="font-weight: normal"><em>Создаём нижне-треугольную матрицу</em>: функция <em>tril(A[,k])</em> в Scilab</h3>

<p>Указывавем матрицу, из которой будем формировать нижне-треугольную и диагональ, с которой начинать</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 1 & 1\\
  2 & 2 & 2 \\
  3 & 3 & 3
  \end{pmatrix} &
  B_1 = \begin{pmatrix}
  1 & 0 & 0\\
  2 & 2 & 0 \\
  3 & 3 & 3
  \end{pmatrix}     &
  B_2 = \begin{pmatrix}
  1 & 1 & 0\\
  2 & 2 & 2 \\
  3 & 3 & 3
  \end{pmatrix}    &
  B_3 = \begin{pmatrix}
  0 & 0 & 0\\
  2 & 0 & 0 \\
  3 & 3 & 0
  \end{pmatrix} 
   \end{matrix}
   \)  
 </p>



<h3 style="font-weight: normal"><em>Создаём верхне-треугольную матрицу</em>: функции <em>triu(A[,k]) </em> в Scilab</h3>

<p>Указывавем матрицу, из которой будем формировать верхне-треугольную и диагональ, с которой начинать</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 1 & 1\\
  2 & 2 & 2 \\
  3 & 3 & 3
  \end{pmatrix} &
  B_1 = \begin{pmatrix}
  1 & 1 & 1\\
  0 & 2 & 2 \\
  0 & 0 & 3
  \end{pmatrix}     &
  B_2 = \begin{pmatrix}
  0 & 0 & 1\\
  0 & 0 & 0 \\
  0 & 0 & 0
  \end{pmatrix}    &
  B_3 = \begin{pmatrix}
  1 & 1 & 1\\
  2 & 2 & 2 \\
  0 & 3 & 3
  \end{pmatrix} 
   \end{matrix}
   \)  
 </p>


<h3 style="font-weight: normal"><em>Создаём разреженную матрицу</em>: функции \( sparse(V_1, V_2) \) в Scilab</h3>

<p>\( V_1 \) - вектор координат(строка, столбец) ненулевых эелемнтов<br/> \( V_2 \) - вектор значений ненулевых эелемнтов </p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	
<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
   0. &  8.  &  0. &  0. &   0.\\
   0. &  0. &   0. &  0. &   9.\\
   15. &  0. &  0. &  11. &  0.
  \end{pmatrix} 
   \end{matrix}
   \)  
 </p>

<!--p><em>Создаём многомерную матрицу</em>: функции <em> hypermat(V_1, V_2) </em> </p>

<p>\( V_1 \) - вектор размеров гиперматрицы <br/> \( V_2 \) - вектор элементов гиперматрицы (нули по умолчанию)</p>
<p>Создадим многомерный массив A, состоящий из трёх матриц размерностью 2х2, элементы матриц формруются как члены последовательности от 0 до 11</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	
<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
   0. &  8.  &  0. &  0. &   0.\\
   0. &  0. &   0. &  0. &   9.\\
   15. &  0. &  0. &  11. &  0.
  \end{pmatrix} 
   \end{matrix}
   \)  
 </p-->


<h2>Функции преобразования матриц/векторов</h2>
<h3 style="font-weight: normal"><em>Изменяем размер матрицы</em>: функция <em>matrix(A [,n,m])</em> в Scilab</h3>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
<span class="image-description text-italic">Исходная матрица.</span>
</div>

<p class="text-center"> 
\( A = \begin{pmatrix}
  1 & 2 \\
  3 & 4 \\
  5 & 6
  \end{pmatrix} \)  
 </p>
<p>Указываем матрицу, которую меняем, потом число строк и число столбцов новой матрицы.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
<span class="image-description text-italic">Преобразованные матрицы</span>
</div>

<p class="text-center"> 
\( 
  \begin{matrix}  
  B_1 = \begin{pmatrix}
  1 & 5 & 4 \\
  3 & 2 & 6 
  \end{pmatrix} &
  
  B_2 = \begin{pmatrix}
  1 & 2 \\
  3 & 4 \\
  5 & 6
  \end{pmatrix}  &
 
  B_3 = \begin{pmatrix}
  1 & 2 & 3 & 4 & 5 & 6
  \end{pmatrix} &
  
  B_4 = \begin{pmatrix}
  1 \\  3  \\  4 \\ 5 \\ 6 
  \end{pmatrix}  
   \end{matrix}
  
  \)  
 </p>



<h3 style="font-weight: normal"><em>Конкатенация (склейка) матриц/векторов</em>: функция <em>cat(n, A, B) </em> в Scilab</h3>

<p>Склеиваем матрицы по строкам, т.е. друг под другом</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 \\
  3 & 4 
  \end{pmatrix} &
  B = \begin{pmatrix}
  5 & 6 \\
  7 & 8 
  \end{pmatrix}     &
  C = \begin{pmatrix}
  1 & 2 \\
  3 & 4 \\  
  5 & 6 \\
  7 & 8 
  \end{pmatrix}   
   \end{matrix}
   \)  
 </p>

<p>Объединяем вектора (массивы) по строкам, т.е. друг под другом</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 & 3 & 4
   
  \end{pmatrix} &
  B = \begin{pmatrix}
  5 & 6 & 7 & 8
   
  \end{pmatrix}     &
  C = \begin{pmatrix}
 	1 & 2 & 3 & 4\\
	5 & 6 & 7 & 8
  \end{pmatrix}   
   \end{matrix}
   \)  
 </p>

<p>Склеиваем матрицы по столбцам, т.е. друг за другом</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 \\
  3 & 4 
  \end{pmatrix} &
  B = \begin{pmatrix}
  5 & 6 \\
  7 & 8 
  \end{pmatrix}     &
  C = \begin{pmatrix}
  1 & 2 & 5 & 6 \\
  3 & 4 & 7 & 8
  \end{pmatrix}   
   \end{matrix}
   \)  
 </p>

<p>Объединяем вектора (массивы) по столбцам, т.е. друг за другом</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  1 & 2 & 3 & 4
   
  \end{pmatrix} &
  B = \begin{pmatrix}
  5 & 6 & 7 & 8
   
  \end{pmatrix}     &
  C = \begin{pmatrix}
 	1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 	
  \end{pmatrix}   
   \end{matrix}
   \)  
 </p>




<h3 style="font-weight: normal"><em>Сортируем элементы матриц/векторов</em>: функция <em>gsort(A,option,direction) </em> в Scilab</h3>

<p><em>option</em> - символьная строка. Она задаёт тип требуемой сортировки:<br/>
'r' - сортируется каждый столбец A<br/>
'c' - сортируется каждая строка A<br/>
'g' - сортируются все элементы A. Это значение по умолчанию.</p>

<p><em>direction</em> - символьная строка. Она задаёт направление сортировки:<br/>
'i' устанавливает порядок возрастания, <br/>
'd' устанавливает порядок убывания (по умолчанию).</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 \\
  4 & 10 
  \end{pmatrix} &
  
  B_1 = \begin{pmatrix}
  7 & 10 \\
  4 & 2 
  \end{pmatrix}   &
  
  B_2 = \begin{pmatrix}
  7 & 2 \\
  10 & 4 
  \end{pmatrix} &
  
  B_3 = \begin{pmatrix}
  10 & 4 \\
  7 & 2 
  \end{pmatrix} &
  
  B_4 = \begin{pmatrix}
  2 & 7 \\
  4 & 10 
  \end{pmatrix} 
  
   \end{matrix}
   \)  
 </p>


<h2>Функции вычисления различных характеристик матриц/векторов</h2>
<h3 style="font-weight: normal"><em>Определяем размер матриц/векторов</em>: функция <em>size(A,option) </em> в Scilab</h3>

<p><em>option</em> - символьная строка. Она возволяет определить:<br/>
'r' - число строк матрицы A<br/>
'c' - число столбцов матрицы A.</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 & 1\\
  3 & 4 & 10 
  \end{pmatrix} &
  
  m = 2   &    n = 3  
   \end{matrix}
   \)  
 </p>


<h3 style="font-weight: normal"><em>Найдём сумму элементов массива/матрицы</em>: функция <em>sum(A,option) </em>в Scilab</h3>

<p><em>option</em> - символьная строка. Она возволяет определить:<br/>
'r' - поэлементную сумму строк матрицы A. Возвращает строку.<br/>
'c' - поэлементную сумму столбцов матрицы A. Возвращает столбец.</p>
<p>Если <em>option</em> отсутствует, то возвращается сумма всех элементов.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 & 1\\
  3 & 4 & 10 
  \end{pmatrix} &
  
  R = \begin{pmatrix}
  10 & 6 & 11
  \end{pmatrix}&
  
  V = \begin{pmatrix}
  10 \\ 17
  \end{pmatrix} &
  S = 27
  
   \end{matrix}
   \)  
 </p>


<h3 style="font-weight: normal"><em>Найдём произведение элементов массива/матрицы</em>: функция <em>prod(A,option) </em> в Scilab</h3>

<p><em>option</em> - символьная строка. Она возволяет определить:<br/>
'r' - поэлементное произведение строк матрицы A. Возвращает строку.<br/>
'c' - поэлементное произведение столбцов матрицы A. Возвращает столбец.</p>
<p>Если <em>option</em> отсутствует, то возвращается произведение всех элементов.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 & 1\\
  3 & 4 & 10 
  \end{pmatrix} &
  
  R = \begin{pmatrix}
  21 & 8 & 10
  \end{pmatrix}&
  
  V = \begin{pmatrix}
  14 \\ 120
  \end{pmatrix} &
  P = 1680
  
   \end{matrix}
   \)  
 </p>


<h3 style="font-weight: normal"><em>Найдём наибольший элемент массива/матрицы</em>: функция <em>max(A,option) </em> в Scilab</h3>

<p><em>option</em> - символьная строка. Она возволяет определить:<br/>
'r' - наибольший элемент в каждом столбце матрицы A. Возвращает строку.<br/>
'c' - наибольший элемент в каждой строке матрицы A. Возвращает столбец.</p>
<p>Если <em>option</em> отсутствует, то возвращается наибольший элемент во всей матрице.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 & 1\\
  3 & 4 & 10 
  \end{pmatrix} &
  
  R = \begin{pmatrix}
  7 & 4 & 10
  \end{pmatrix}&
  
  V = \begin{pmatrix}
  7 \\ 10
  \end{pmatrix} &
  M = 10
  
   \end{matrix}
   \)  
 </p>


<h3 style="font-weight: normal"><em>Найдём наименьший элемент массива/матрицы</em>: функция <em>min(A,option) </em> в Scilab</h3>
<p><em>option</em> - символьная строка. Она возволяет определить:<br/>
'r' - наименьший элемент в каждом столбце матрицы A. Возвращает строку.<br/>
'c' - наименьший элемент в каждой строке матрицы A. Возвращает столбец.</p>
<p>Если <em>option</em> отсутствует, то возвращается наименьший элемент во всей матрице.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 & 1\\
  3 & 4 & 10 
  \end{pmatrix} &
  
  R = \begin{pmatrix}
  3 & 2 & 1
  \end{pmatrix}&
  
  V = \begin{pmatrix}
  1 \\ 3
  \end{pmatrix} &
  M = 1
  
   \end{matrix}
   \)  
 </p>

<h3 style="font-weight: normal"><em>Найдём среднее значение массива/матрицы</em>: функция <em>mean(A,option) </em> в Scilab</h3>
<p><em>option</em> - символьная строка. Она возволяет определить:<br/>
'r' - среднее значение в каждом столбце матрицы A. Возвращает строку.<br/>
'c' - среднее значение в каждой строке матрицы A. Возвращает столбец.</p>
<p>Если <em>option</em> отсутствует, то возвращается среднее значение всей матрицы.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a></b></p>
</div>	

<p class="text-center"> 
\( 
  \begin{matrix}  
  A = \begin{pmatrix}
  7 & 2 & 1\\
  3 & 4 & 10 
  \end{pmatrix} &
  
  R = \begin{pmatrix}
  5 & 3 & 5.5
  \end{pmatrix}&
  
  V = \begin{pmatrix}
  3.3333 \\ 5.6666
  \end{pmatrix} &
  M = 4.5
  
   \end{matrix}
   \)  
 </p>

<p>Основные функции для работы с матрицами рассмотрены в статье <a href="https://inclab.ru/beginner/odnomernye-i-mnogomernye-massivy-v-skilabe">Массивы в Scilab</a>.</p>



<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/specialnye-matrichnye-funkcii'>http://inclab.ru/articles/specialnye-matrichnye-funkcii</a><p>]]></description>
			<pubDate>Mon, 27 Jun 2022 21:50:51 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Линии, многоугольники, эллипсы, сектора в Scilab]]></title>
			<link>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</link>
			<guid>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Примеры того, как нарисовать сложные фигуры в Scilab<p>Рассмотрим, как в Scilab строить эллипсы, прямоугольники и произвольные геометрические фигуры.</p>

<h2>Прямая линия</h2>
<p>Начнём с простого примера построения линии.</p>
<p>Прежде всего, сделаем заготовку графической области, на которой будем рисовать</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Неизменная часть для всех рисуночков</span>
</div>	 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/k4uqpw/kvadratnaya-oblast-s-setkoy-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/k4uqpw/kvadratnaya-oblast-s-setkoy-v-scilab.jpg" itemprop="contentUrl" alt="Квадратная область с сеткой в Scilab" title="Квадратная область с сеткой в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Квадратная область с сеткой в Scilab</span>
</div> 

<p>Для того, чтобы нарисовать прямую нам понадобятся две точки и функция \(plot() \). <br/>Итак, для линии, идущей из точки (-1.5, 0) в (1, 1.5) зададим два массива \(х-ов \) и \(у-ков \) соответственно:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Задание вектор-строк координат \(х-ов \) и \(у-ков \)</span>
</div>

<p>А далее просто построим наш график по заданным точкам (которых всего две):</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Построение прямой по 2м точкам</span>
</div>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Немного подправим цвет и жирность прямой</span>
</div>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Добавим соединительные пипульки и увеличим их размер</span>
</div>

<p>В итоге получим зелёную полужирную прямую с кругляшами на концах:</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/1clu3zc/pryamaya-liniya-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/1clu3zc/pryamaya-liniya-v-scilab.jpg" itemprop="contentUrl" alt="Прямая линия в Scilab" title="Прямая линия в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Прямая линия в Scilab</span>
</div> 

<h2>Ломаная линия</h2>
<p>Эту линию, конечно, можно продолжить, просто добавив новые элементы в массивы  \(xpts \), \(ypts \):</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Рисуем произвольную ломаную в Scilab</span>
</div>	 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/4ve1cy/lomanaya-liniya-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/4ve1cy/lomanaya-liniya-v-scilab.jpg" itemprop="contentUrl" alt="Ломаная линия в Scilab" title="Ломаная линия в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Ломаная линия в Scilab</span>
</div> 


<h2>Произвольный многоугольник</h2>
<p>Из линии можно сделать многоуголиник, если в массивы  координат последними элементами добавить их начальные значения: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Фигура по точкам в Scilab</span>
</div>	 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/ur9qxb/nepravilnyy-mnogougolnik-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/ur9qxb/nepravilnyy-mnogougolnik-v-scilab.jpg" itemprop="contentUrl" alt="Неправильный многоугольник в Scilab" title="Неправильный многоугольник в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Неправильный многоугольник в Scilab</span>
</div> 

<p>Этот многоугольник можно закрасить, используя способ 1 <b>polyline_style</b>: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Закрашиваем многоугольник в Scilab</span>
</div>	 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/r5b5wo/zakrashennyy-mnogougolnik-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/r5b5wo/zakrashennyy-mnogougolnik-v-scilab.jpg" itemprop="contentUrl" alt="Закрашенный многоугольник в Scilab" title="Закрашенный многоугольник в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Закрашенный многоугольник в Scilab</span>
</div> 

<p>Если же требуется более тонкая настрока цветов, то нуно прибегнуть к способу 2 и вместо <b>polyline_style</b> испольщовать <b>fill_mode</b> и <b>closed</b>. При этом, замыкать ломаную вручную необязательно: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Закрашиваем и замыкаем многоугольник в Scilab</span>
</div>	 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/d8dpvx/zakrashennyy-mnogougolnik-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/d8dpvx/zakrashennyy-mnogougolnik-v-scilab.jpg" itemprop="contentUrl" alt="Закрашенный многоугольник в Scilab" title="Закрашенный многоугольник в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Закрашенный многоугольник в Scilab</span>
</div> 

<h2>Правильный n-угольник</h2>
<p>Теперь, когда мы натренеровались строить и настравивать отображение фигур в Scilab, построим правильный многоугольник, вписанный в единичную окружность. </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Зададим массивы для ординат и абсцисс</span>
</div>	 

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Зададим количество углов и сразу посчитаем градус одного угла</span>
</div>
<p>Осталось в цикле вычислисть все \(х-ы\) и \(у-ки\).<br/> 
  Для этого, мы будем \(angles\)-раз крутить вектор, который прикреплён в начале координат, каждый раз увеличивая угол поворота на \(degreeStep\).</p> 
<p>Следовательно, интересующие нас координаты - это \(cos() \) и \(sin()\) текущего угла.<br/> 
  А чтобы начинать движение из точки (0, 1), нужно прибавить \( \pi/2 \) к текущему углу:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Цикл для вычисления координат вершин правильного многоугольника</span>
</div>

<p>Нарисуем правильный пятиугольник в Scilab, замкнув ломаную и изменим толщину линий и их цвет на графике</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
</div>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/1q84tjc/pravilnyy-mnogougolnik-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/1q84tjc/pravilnyy-mnogougolnik-v-scilab.jpg" itemprop="contentUrl" alt="Правильный многоугольник в Scilab" title="Правильный многоугольник в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Правильный многоугольник в Scilab</span>
</div> 


<p>Эту задачу можно решить и другим способом - с помощью \(xpoly()\)</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
  <span class="image-description text-italic">Рисуем правильный многоугольник в Scilab</span>
</div>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/103u9vv/pravilnyy-mnogougolnik-s-pomoschyu-xpoly.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/103u9vv/pravilnyy-mnogougolnik-s-pomoschyu-xpoly.jpg" itemprop="contentUrl" alt="Правильный многоугольник с помощью xpoly()" title="Правильный многоугольник с помощью xpoly()"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Правильный многоугольник с помощью xpoly()</span>
</div> 

<p>Для того, чтобы нарисовать закрашенный многоугольник, нужно использовать функцию \(xfpoly()\)</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
  <span class="image-description text-italic">Рисуем правильный многоугольник в Scilab</span>
</div>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/17ffpnm/pravilnyy-mnogougolnik-s-pomoschyu-xfpoly.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/17ffpnm/pravilnyy-mnogougolnik-s-pomoschyu-xfpoly.jpg" itemprop="contentUrl" alt="Правильный многоугольник с помощью xfpoly()" title="Правильный многоугольник с помощью xfpoly()"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Правильный многоугольник с помощью xfpoly()</span>
</div> 

<h2>Эллипс</h2>
<p>Для построения эллипса нужно задать 6 значений: </p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/1hocvdb/znacheniya-matricy-ehllipsa.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/1hocvdb/znacheniya-matricy-ehllipsa.jpg" itemprop="contentUrl" alt="Значения матрицы эллипса" title="Значения матрицы эллипса"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Значения матрицы эллипса</span>
</div> 
<p>Координаты <b>(xLeftTop, yLeftTop)</b> верхнего левого угла прямоугольника, в который будет вписан эллипс;</p>
<p>Ширину <b>elWidth</b> и Высоту <b>elWidth</b> прямоугольника, в который будет вписан эллипс;</p>
<p>Угол <b>angleStart</b>, откуда будет стартовать дуга эллипса и Угол <b>angleEnd</b>, где дуга остановится.</p>

<p>Для того, чтобы построить изображённый выше эллипс, зададим следующие значения:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Задаём параметры эллипса</span>
</div>	 

<p>Сам эллипс по заданным параметрам строится с помощью функции \(xarcs()\):</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Задаём параметры эллипса</span>
</div>	


<h2>Сектор</h2>
<p>Из эллипса можно строить произвольные сектора, располагая их в желаемом месте на координатной сетке. </p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/1dg57m6/proizvolnye-sektora.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/1dg57m6/proizvolnye-sektora.jpg" itemprop="contentUrl" alt="Произвольные сектора" title="Произвольные сектора"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Произвольные сектора</span>
</div> 


<p>Построим два сектора на основе эллипса с заданными параметрами: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Рисуем сектора в Scilab с помощью функции xarcs()</span>
</div>	


<h2>Звезда Сименса</h2>
<p>В заключении построим Звезду Сименса  изображение, применяемое для проверки остроты зрения (<a href="https://ru.wikipedia.org/wiki/%D0%97%D0%B2%D0%B5%D0%B7%D0%B4%D0%B0_%D0%A1%D0%B8%D0%BC%D0%B5%D0%BD%D1%81%D0%B0" target="_blank">wiki</a>). </p>

  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/risuem-geometricheskie-obekty-v-scilab/1phex9o/zvezda-simensa-s-50-luchami.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/risuem-geometricheskie-obekty-v-scilab/1phex9o/zvezda-simensa-s-50-luchami.jpg" itemprop="contentUrl" alt="Звезда Сименса с 50 лучами" title="Звезда Сименса с 50 лучами"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Звезда Сименса с 50 лучами</span>
</div> 

  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a></b></p>
<span class="image-description text-italic">Рисуем закрашенные сектора в цикле в Scilab</span>
</div>	











<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab'>http://inclab.ru/articles/risuem-geometricheskie-obekty-v-scilab</a><p>]]></description>
			<pubDate>Fri, 24 Jun 2022 00:38:48 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Поэтапно создаём нейронку в Scilab]]></title>
			<link>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</link>
			<guid>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Рассмотрим поэтапно прямое распространение импульса на примере трёхслойной нейронной сети в Scilab<p>Ранее был рассмотрен вопрос <a href="https://inclab.ru/profi/nastroyka-lineynogo-klassifikatora-scilab">настройки линейного классификатора</a>, как заготовки для понимания принципов машинного обучения.</p>
<p>В даннном материале попробуем углубиться в тему и рассмотрим, как распространяется импульс в искусственной нейронной сети.</p>

<h2>Искусственная нейросеть из 3-х слоёв</h2>
<p>На иллюстрации ниже представлены три слоя нейронки, каждый из которых включает три искусственных нейрона, или узла. Как нетрудно заметить, здесь каждый узел соединен с каждым из узлов предшествующего и последующего слоев.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/prosteyshaya-neyronnaya-set-na-scilab/bk9qb/trehsloynaya-neyroset-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/prosteyshaya-neyronnaya-set-na-scilab/bk9qb/trehsloynaya-neyroset-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Трёхслойная нейросеть. Изображение из (1)" title="Трёхслойная нейросеть. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Трёхслойная нейросеть. Изображение из (1)</span>
</div> 
<p>Каждый нейрон принимает сигнал, неким образом его обрабатывает и передаёт дальше.</p>
<h2>Функция активации</h2>
<p>В качестве правила, по которому происходят метаморфозы сигнала внутри нейрона мы будем использовать логистическую функцию вида:</p>
<p class="text-center"> \( \sigma = \displaystyle\frac{1}{1+e^{-x}}  \quad (1) \)  </p>
<p>Функция (1) называется ещё и сигмоидой, она очень популярна в области искусственного интеллекта благодаря своей гладкости и простоте расчётов.</p>
<p>Кроме того, выбранная функция хороша ещё и тем, что если комбинированный сигнал недостаточно сильный, то сигмоида подавляет выходной сигнал, в противном случае
 функция возбуждает нейрон.</p>
<p>Итак, структура сети определена, функция активации выбрана, осталось определить, каким образом наша сеть будет обучаться.</p>

<h2>Весовые коэффициенты</h2>
<p>Величиной, которую мы будем регулировать на основе тренировочных данных, является сила связи между узлами.</p>
<p>При этом, будем считать, что низкий весовой коэффициент ослабляет сигнал, высокий - усиливает его. Как только сеть научится улучшать свои выходные значения путем уточнения весовых коэффициентов, некоторые веса обнулятся  или станут близкими к нулю, что означает фактический разрыв связи.</p>

<p>Определим для каждого соединения его вес:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/prosteyshaya-neyronnaya-set-na-scilab/12wbseg/zadanie-vesov-v-neyroseti-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/prosteyshaya-neyronnaya-set-na-scilab/12wbseg/zadanie-vesov-v-neyroseti-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Задание весов в нейросети. Изображение из (1)" title="Задание весов в нейросети. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Задание весов в нейросети. Изображение из (1)</span>
</div> 

<p>Посмотрим внимательно на схему распределения весов.<br/>
<p>Заметим, что весовой коэффициет \(  w_{i,j} \) соответствует сигналу, передаваемому от \(  i-го\) узла текущего слоя к \( j-му\) узлу следующего слоя.</p>
<p>Например к 1-му нейрону 2-го слоя подходят три стрелочки: от 1-го, 2-го и 3-го нейронов 1-го слоя, с весами \( w_{1,1}, w_{2,1}, w_{3,1} \) соотвественно.</p>

<p>Согласно общепрянотой терминологии, мы будем называть слои следуюющим образом:</p> 
<ul> 
<li><p>Первый слой узлов будем называть \(входным\);</p></li> 
<li><p>Последний слой - \(выходным\);</p></li> 
<li><p>А все слои между ними - \(скрытыми\). </p></li> 
</ul>   
  
<h2>Прямое распространение сигнала в нейронной сети</h2>
<p>Приступим к пошаговой реализации распространения сигнала в нашей нейросети.</p> 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/prosteyshaya-neyronnaya-set-na-scilab/lumswi/zadanie-vesov-v-neyroseti-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/prosteyshaya-neyronnaya-set-na-scilab/lumswi/zadanie-vesov-v-neyroseti-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Задание весов в нейросети. Изображение из (1)" title="Задание весов в нейросети. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Задание весов в нейросети. Изображение из (1)</span>
</div> 
  
<h3>Входной слой</h3> 
<p>Зададим вектор входных сигналов:</p>
<p class="text-center"> 
\( I = \begin{pmatrix}
  0.9 \\
  0.1 \\
  0.8
  \end{pmatrix} \)  
 </p>

<p>С первым слоем все просто - никаких вычислений.<br/>
Первый слой узлов имеет единственное назначение - представлять входные сигналы. Таким образом, во входных узлах функция активации к входным сигналам не применяется. </p>
<p>Хорошо. что Scilab - матрично-ориентированный язык, поэтому задание вектора входного сигнала будет выглядеть следующим образом:</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
<span class="image-description text-italic">Вектор-столбец в Scilab.</span>
</div>	   
  
<h3>Скрытый слой</h3> 
<p>Следующий на очереди - промежуточный слой. <br/>
Для каждого нейрона этого слоя нужно будет посчитать свой вход, к нему применить функцию активации и подать результат на выход нейрона. </p>
<!--p>Чтобы посчитать, что приходит на вход каждого нейрона скрытого слоя необходимо просуммировать выходы предыдущего слоя, помноженные на соответствующие веса.  </p-->
 <h4>Вход скрытого слоя</h4>
<p>Предположим, весовые коэффициенты для связи между <b>входным и скрытым</b> слоями заданы следующим образом:  </p>
  
<p class="text-center"> \( w_{1,1}=0.9, w_{2,1}=0.3, w_{3,1}=0.4 \)  </p>
<p class="text-center"> \( w_{1,2}=0.2, w_{2,2}=0.8, w_{3,2}=0.2 \)  </p>
<p class="text-center"> \( w_{1,3}=0.1, w_{2,3}=0.5, w_{3,3}=0.5 \)  </p>
<p>Индексы весовых коэффициентов показывают откуда куда идут стрелочки.</p>
  
<p>Соответственно, чтобы вычислить <b>вход 1-го нейрона скрытого</b> слоя \( H_{i}(1) \), необдимо взять сумму весов \( w_{1,1}=0.9, w_{2,1}=0.3, w_{3,1}=0.4 \) (стрелочки идут от 1-го, 2-го и 3-го нейрона входного слоя <b>к 1-му нейрону скрытого</b>), умноженных на соответсвующий выход предыдущего слоя:  </p>
<p class="text-center"> 
\( H_{i}(1) = w_{1,1}\cdot I(1) + w_{2,1}\cdot I(2) + w_{3,1}\cdot I(3) = 0.9\cdot0.9 + 0.3\cdot0.1 + 0.4\cdot0.8=1.16 \)  
 </p>
<p>Аналогично вычислим вход 2-го и 3-го нейронов скрытого слоя \( H_{i}(2), H_{i}(3) \):  </p>
<p class="text-center"> 
\( H_{i}(2) = w_{1,2}\cdot I(1) + w_{2,2}\cdot I(2) + w_{3,2}\cdot I(3) = 0.2\cdot0.9 + 0.8\cdot0.1 + 0.2\cdot0.8=0.42 \)   
 </p>  
<p class="text-center"> 
\( H_{i}(3) = w_{1,3}\cdot I(1) + w_{2,3}\cdot I(2) + w_{3,3}\cdot I(3) = 0.1\cdot0.9 + 0.5\cdot0.1 + 0.6\cdot0.8=0.62 \)   
 </p>   
  
<p>Кажется, имеется некоторая закономерность в производимых действиях 	&#128521;. Действительно, если из весовых коэффициентов сформировать матрицу:</p>
 <p class="text-center"> 
\( W_{IH} = \begin{pmatrix}
	w_{1,1} & w_{2,1} & w_{3,1} \\
	w_{1,2} & w_{2,2} & w_{3,2} \\
	w_{1,3} & w_{2,3} & w_{3,3} \\
  \end{pmatrix} \)  
 </p> 
  
<p>То вход скрытого слоя можно отыскать простым матричным умножением:</p>
<p class="text-center"> 
\( H_{i} = W_{IH}\cdot I \quad (2) \)   
 </p> 
  
<p>Зададим матрицу весов входной-скрытый на Scilab:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>	 
  
<p>А чтобы посчитать вход скрытого слоя напишем функцию согласно (2):</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>	  

  
<p>Отобразим входные сигналы для скрытого слоя на диаграмме.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/prosteyshaya-neyronnaya-set-na-scilab/18toqsv/vhod-skrytogo-sloya-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/prosteyshaya-neyronnaya-set-na-scilab/18toqsv/vhod-skrytogo-sloya-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Вход скрытого слоя. Изображение из (1)" title="Вход скрытого слоя. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Вход скрытого слоя. Изображение из (1)</span>
</div> 
  
<p>Итак, мы сформировали вектор-столбец входных сигналов скрытого слоя:</p>
<p class="text-center"> 
\( H_i = \begin{pmatrix}
  1.16 \\
  0.42 \\
  0.62
  \end{pmatrix} \)  
 </p>  
<p>Пока что все хорошо, но нам еще остается кое-что сделать.</p>     
  
  
<h4>Выход скрытого слоя</h4>
<p>Как вы помните, чтобы отклик слоя на входной сигнал как можно лучше имитировал аналогичный реальный процесс, мы должны применить к узлам функцию активации. Так и поступим:  </p>
<p class="text-center"> 
\( H_{o} = \sigma(H_i) \quad (3) \)   
 </p>     
<p>Применяя сигмоиду ко входу скрытого слоя, получим его выход:</p>
<p class="text-center"> 
\( H_o = \begin{pmatrix}
  0.761 \\
  0.603 \\
  0.650
  \end{pmatrix} \)  
 </p>   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/prosteyshaya-neyronnaya-set-na-scilab/1u60z4b/vhod-i-vyhod-skrytogo-sloya-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/prosteyshaya-neyronnaya-set-na-scilab/1u60z4b/vhod-i-vyhod-skrytogo-sloya-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Вход и выход скрытого слоя. Изображение из (1)" title="Вход и выход скрытого слоя. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Вход и выход скрытого слоя. Изображение из (1)</span>
</div> 
   
<p>В Sciab нет встроенной функции сигмоиды, поэтому напишем свою:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>	
<p>Заметьте, что в функции присутствует "./" - это поэлементное деление в Scilab, так как в качестве параметра мы передаём вектор 	&#128526;</p>  
<p>И применим её ко входу скрытого слоя:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>	  
  
  
<p>Функция \( roundToDecimal(\cdot, \cdot); \) нам нужна, чтобы округлять результат до нужного знака после запятой. Выглядит она предельно просто:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>	  
    

  <h3>Выходной слой</h3> 
<p>Для выходного слоя задача прохождения сигнала (О чудо!) ничем не отличается от предыдущего шага!</p> 
<p>Перелесть проделанных на шаге 2 действий в том, что сколько бы слоёв ни было в нашей сети, <b>вход каждого</b> из них будет вычисляться путём умножения соответствующей матрицы весов и на выход предыдущего слоя, а <b>его выход</b> - путём применениия функции активации к полученному результату &#128079;</p>  
    
<p>Итак, по  аналогии со скрытым слоем, зададим матрицу весовых коэффициентов скрытый-выходной:</p> 
 <p class="text-center"> 
\( W_{HO} = \begin{pmatrix}
	w_{1,1} & w_{2,1} & w_{3,1} \\
	w_{1,2} & w_{2,2} & w_{3,2} \\
	w_{1,3} & w_{2,3} & w_{3,3} \\
  \end{pmatrix} =
\begin{pmatrix}
	0.3 & 0.7 & 0.5 \\
	0.6 & 0.5 & 0.2 \\
	0.8 & 0.1 & 0.9 \\
  \end{pmatrix}   
   \)  
 </p> 
      
<p>И посчитаем вход выходного слоя:</p> 
 <p class="text-center"> 
\( O_i = W_{HO}\cdot I_o = 
   
   \begin{pmatrix}
	0.3 & 0.7 & 0.5 \\
	0.6 & 0.5 & 0.2 \\
	0.8 & 0.1 & 0.9 \\
  \end{pmatrix} \cdot 
\begin{pmatrix}
  0.761 \\
  0.603 \\
  0.650
  \end{pmatrix} =    
   \begin{pmatrix}
  0.975 \\
  0.888 \\
  1.254
  \end{pmatrix} 
   \)  
 </p>   
  
<!--p>Вектор-столбец входных сигналов выходного слоя получился:</p>
<p class="text-center"> 
\( O_i = \begin{pmatrix}
  0.975 \\
  0.888 \\
  1.254
  \end{pmatrix} \)  
 </p-->    
  
<p>Все, что нам остается,  это применить сигмоиду к \( O_i \)  </p>
<p class="text-center"> 
\( O_o = \sigma \begin{pmatrix}
  0.975 \\
  0.888 \\
  1.254
  \end{pmatrix}  =
  \begin{pmatrix}
  0.726 \\
  0.708 \\
  0.778
  \end{pmatrix} \) 
  
 </p>  
  
<p>И, наконец, мы получили сигналы на выходе нейронной сейти:</p>   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/prosteyshaya-neyronnaya-set-na-scilab/ghw0pa/vhod-i-vyhod-vyhodnogo-sloya-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/prosteyshaya-neyronnaya-set-na-scilab/ghw0pa/vhod-i-vyhod-vyhodnogo-sloya-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Вход и выход выходного слоя. Изображение из (1)" title="Вход и выход выходного слоя. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Вход и выход выходного слоя. Изображение из (1)</span>
</div> 
     
<p>Проделаем те же действия в Scilab:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Задание матрицы весов скрытый-выходной в Scilab.</span>
</div>	  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Вычисление входа выходного слоя в Scilab.</span>
</div>	  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Вычисление выхода выходного слоя в Scilab.</span>
</div>	   
 
<p>Итак, нам удалось успешно описать прямое распространение сигналов по нейросети, т.е. определить величину выходных сигналов при заданных величинах входных сигналов. </p>

<h3>Цикл для прямого распределения сигнала в нейронке</h3>   
  
<p>Рассмотренный пошаговый метод, конечно, имеет место быть, но при увеличении числа слоёв и нейронов в слое, нам придётся многократно повторять одни и те же действия. Поэтому облегчим себе жизнь с помощью циклической обработки однотипных действий. </p> 
  
<p>Соберём все собственные функции:</p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Кастомные функции Scilab.</span>
</div>	   
  
<p>Зададим желаемое число нейронов и слоёв в нейросети:</p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Ограничимся 3-мя нейронами и 3-мя слоями, чтобы сверить результаты</span>
</div>	
<p>И сгенерируем заготовку для сети:</p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>  
<p class="text-center"> 
\( 
  neuralNetwork = \begin{pmatrix}
  0 & 0 & 0\\
  0 & 0 & 0\\
  0 & 0 & 0
  \end{pmatrix}   
  \)  
 </p>  
  
  
<p>Первый столбец в матрице сети- это входной вектор \( I \). Зададим первый стобец матрицы, как в разобранном примере:</p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
</div>    
<p class="text-center"> 
\( 
  neuralNetwork = \begin{pmatrix}
  0.9 & 0 & 0\\
  0.1 & 0 & 0\\
  0.8 & 0 & 0
  \end{pmatrix}   
  \)  
 </p>   
  
<p>Далее необходимо задать матрицы весов. Чтобы с ними было удобно работать, объединим матрицы в гипер-структуру - список \(  list();  \) и зададим две матрицы \( W_{IH}, W_{HO} \), как в примере выше: </p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Создаём массив массивов в Scilab.</span>  
</div>  
  
<p> Теперь элемент списка \(  weightMatrixes();  \) - это целиком весовая матрица: </p>     
  
<p class="text-center"> 
\( 
  \begin{matrix}
  weightMatrixes(1) = \begin{pmatrix}
   0.9 &  0.3 &  0.4\\
   0.2 &  0.8 &  0.2\\
   0.1 &  0.5 &  0.6
  \end{pmatrix}   &
   weightMatrixes(2) = \begin{pmatrix}
 	0.3 &  0.7 &  0.5\\
   0.6 &  0.5 &  0.2\\
   0.8 &  0.1 &  0.9
  \end{pmatrix}
  \end{matrix} 
  \)  
 </p>   
  
 <p>Осталось лишь запустить цикл вычисления скрытого и выходного слоёв. <br/>Каждый новый слой (столбец матрицы neuralNetwork) - это результат применения сигмоиды к произведению текущего слоя (столбца) и соответствующей весовой матрицы: </p>     
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p>
  <span class="image-description text-italic">Обновляем столбы матрицы в Scilab.</span>  
</div>   
  
<p>Убедимся, что результат совпадает с посчитанным поэтапно: </p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a></b></p> 
</div>    
<p class="text-center"> 
\( 
  neuralNetwork = \begin{pmatrix}
   0.9 &  0.761 &  0.726\\
   0.1 &  0.603 &  0.708\\
   0.8 &  0.65  &  0.778
  \end{pmatrix}   

  \)  
 </p>    
<p>Отлично! Результат совпал. Можно двигаться дальше.</p>   
  
  
<p>Далее мы приступим к разбору <a href="https://inclab.ru/profi/obuchenie-neyronnoy-seti">метода обратного распределения ошибки и корректировки весов</a> &#129299;</p>
  
<p>Данная статья создана на основе <a id="tarikbook" target="_blank" href="https://books.google.ru/books?id=wynnDwAAQBAJ">чудесной книги</a>(1) с реализацией автором  приведённых примеров на Scilab.</p><p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab'>http://inclab.ru/articles/prosteyshaya-neyronnaya-set-na-scilab</a><p>]]></description>
			<pubDate>Mon, 04 Jul 2022 17:15:53 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Настройка графиков в Scilab полный гайд]]></title>
			<link>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</link>
			<guid>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Рассмотрим, как изменить вид графиков в Scilab.<p>Основы построения графиков рассмотрены в <a href="https://inclab.ru/beginner/postroenie-grafikov-v-scilab" target="_blank">статье</a>, а в <a href="https://inclab.ru/beginner/kak-zadat-tolschinu-linii-na-grafike">статье</a> подробно рассмотрен вопрос настройки толщины и начертания графиков.</p>

<p>Создадим заготовку графика, который будем всячески кастомизировать.</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>

<h2>Название графика и подписи осей</h2>
<p>Чтобы задать название графика в Scilab, запишем:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>

<p>Изменим цвет и размер шрифта у названия графика:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1fc26oa/nastroyka-otobrazheniya-zagolovka-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1fc26oa/nastroyka-otobrazheniya-zagolovka-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Настройка отображения заголовка на графике в Scilab" title="Настройка отображения заголовка на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Настройка отображения заголовка на графике в Scilab</span>
</div> 

<p>Похожим образом зададим подписи горизонтальной и вертикальной осей:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<p>И изменим начертание и размер шрифта у подписей осей:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/ldq7ve/nastroyka-otobrazheniya-podpisey-osey-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/ldq7ve/nastroyka-otobrazheniya-podpisey-osey-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Настройка отображения подписей осей на графике в Scilab" title="Настройка отображения подписей осей на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Настройка отображения подписей осей на графике в Scilab</span>
</div> 


<h2>Положение осей</h2>
<p>Начнем с того, что поменяем расположение горизонтальной и вертикальной осей на графике.</p>
<p>Чтобы переместить ось абсцисс, нужно воспользоваться командой:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<p>Где xyz - принимает значения: "bottom", "top", "middle", "origin".</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1jdv892/varianty-raspolozheniya-osi-h-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1jdv892/varianty-raspolozheniya-osi-h-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Варианты расположения оси х на графике в Scilab" title="Варианты расположения оси х на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Варианты расположения оси х на графике в Scilab</span>
</div> 


<p>Аналогично можно поменять расположение оси ординат, для этого нужно воспользоваться командой:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<p>Где xyz - принимает значения: "left", "right", "middle", "origin".</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/uxyzzu/varianty-raspolozheniya-osi-y-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/uxyzzu/varianty-raspolozheniya-osi-y-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Варианты расположения оси y на графике в Scilab" title="Варианты расположения оси y на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Варианты расположения оси y на графике в Scilab</span>
</div> 



<h2>Настройка сетки</h2>
<p>Добавим на наш график сетку с помощью стандартной команды:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>

<p>Чтобы поменять цвет grid, нужно воспользоваться командой:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<p>Где вектор из трех индексов цветов [xCol, yCol, zCol], используется для рисования сетки в соответствующих направлениях. Чтобы отменить сетку в направлении, используйте -1 в качестве индекса. </p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/11h6kln/raznye-cveta-setki-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/11h6kln/raznye-cveta-setki-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Разные цвета сетки на графике в Scilab" title="Разные цвета сетки на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Разные цвета сетки на графике в Scilab</span>
</div> 

<p>Заодно можно изменить толщину сеткти grid. Для этого нужно воспользоваться командой:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<p>Где вектор [xLineThick, yLineThick, zLineThick] состоит из 2 или 3 положительных десятичных чисел, задающих толщину линий сетки вдоль соответствующих направлений (в 2D или 3D).</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/ro89pm/raznaya-tolschina-setki-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/ro89pm/raznaya-tolschina-setki-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Разная толщина сетки на графике в Scilab" title="Разная толщина сетки на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Разная толщина сетки на графике в Scilab</span>
</div> 

<p>Кроме того, линиям сетки сеткти grid можно задать разное начертание. Для этого нужно воспользоваться командой:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>
<p>Где вектор [xLineStyle, yLineStyle, zLineStyle] состоит из 2 или 3 идентификаторов стилей линий от 1 до 10 (сплошные, штрихи, точки и т. д.), используемые для рисования сетки в соответствующих направлениях (в 2D или 3D).</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1wizxpg/raznyyy-stil-liniy-setki-na-grafike-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1wizxpg/raznyyy-stil-liniy-setki-na-grafike-v-scilab.jpg" itemprop="contentUrl" alt="Разныый стиль линий сетки на графике в Scilab" title="Разныый стиль линий сетки на графике в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Разныый стиль линий сетки на графике в Scilab</span>
</div> 

<h2>Пример настройки plot</h2>
<p>Не только ради развлеения, но и для практической пользы, поиграем с настройками параметров графика в Scilab.</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
  <span class="image-description text-italic">Заготовка графика</span>
</div>

<p>А теперь приступим к изменению параметров графика.</p>
<p>Зададим название графика и подписи осей.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
</div>

<p>Приступим к разукрашиванию.</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
<span class="image-description text-italic">Изменим цвет фона у окна и графика</span>
</div>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
<span class="image-description text-italic">Изменим цвета названия осей и названия графика</span>
</div>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
<span class="image-description text-italic">Добавим сетку на график и изменим стиль её линий</span>
</div>


<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
<span class="image-description text-italic">Изменим цвет тиков на сетке по горизонтали и вертикали</span>
</div>


<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a></b></p>
<span class="image-description text-italic">Изменим цвет графика и его толщину</span>
</div>

<p>В итоге получится вот такой результат:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1ipu7y1/grafik-v-forme-serdca-v-scilab.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-grafikov-v-scilab-polnyy-gayd/1ipu7y1/grafik-v-forme-serdca-v-scilab.jpg" itemprop="contentUrl" alt="График в форме сердца в Scilab" title="График в форме сердца в Scilab"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">График в форме сердца в Scilab</span>
</div> 





<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd'>http://inclab.ru/articles/nastroyka-grafikov-v-scilab-polnyy-gayd</a><p>]]></description>
			<pubDate>Wed, 22 Jun 2022 00:12:14 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Восстановление сигнала по Комплексным коэффициентам Фурье]]></title>
			<link>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</link>
			<guid>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Сгенерируем прямоугольный импульс с заданными характеристиками, построим его спектр и попробуем его восстановить по нескольким гармоникам.<p>Сгенерируем прямоугольный импульс с заданными характеристиками, построим его спектр и попробуем его восстановить по нескольким гармоникам.</p>

<h2>Построение прямоугольного импульса</h2>
<p>Прежде всего, напишем функцию, которая будет генерировать несимметричный прямоугольный импульс с заданными характеристиками, например, такой:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/69pex8/pryamougolnyy-impuls-s-amplitudoy-1-dlinoy-4-i-periodom-12.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/69pex8/pryamougolnyy-impuls-s-amplitudoy-1-dlinoy-4-i-periodom-12.jpg" itemprop="contentUrl" alt="Прямоугольный импульс с амплитудой 1, длиной 4 и периодом 12." title="Прямоугольный импульс с амплитудой 1, длиной 4 и периодом 12."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Прямоугольный импульс с амплитудой 1, длиной 4 и периодом 12.</span>
</div>   

<p>Зададим период и длительность импульса, а также временной промежуток, на котором будем строить импульс:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Задание характеристик импульса</span>
</div>

<p>Далее напишем функцию, которая будет строить импульс на заданном промежутке: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Функция построения прямоугольного импульса в Scilab</span>
</div>
<p>В функции \( imp() \) сначала формируется вектор, заполненный нулями той же размерности, что и временной промежуток.</p>
<p>Чтобы построить прямоугольный импульс, нам нужно на первых 4-х секундах задать его высоту = 1, оставив остальные элементы вектора без изменения (потому что они уже нулевые), а далее повторить эту процедуру с заданным периодом, т.е. через каждые 12 с. </p>
<p>Повторение импульса обеспечивает деление по модулю, которое в Scilab реализовано функцией \( modulo( \cdot, \cdot) \)</p>
  
<p>Осталось  лишь вызвать функцию \( imp() \) с заданными параметрами импульса и немного подкорректировать первый и последний элементы сформированного вектора:</p>  
  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Формирование скорректированного прямоугольного импульса</span>
</div>
  
<p>Построим график нашей функции, чтобы убедиться, что всё идёт по плану:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Строим график прямоугольного импульса Scilab</span>
</div>  

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/1o7naa8/pryamougolnyy-impuls-s-amplitudoy-1-dlinoy-4-i-periodom-12.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/1o7naa8/pryamougolnyy-impuls-s-amplitudoy-1-dlinoy-4-i-periodom-12.jpg" itemprop="contentUrl" alt="Прямоугольный импульс с амплитудой 1, длиной 4 и периодом 12." title="Прямоугольный импульс с амплитудой 1, длиной 4 и периодом 12."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Прямоугольный импульс с амплитудой 1, длиной 4 и периодом 12.</span>
</div>   
<p>Заметьте, что здесь заголовок графика формируется с учетом заданных характеристик, которые переводятся в строку функцией \( string() \).</p>  
  
<h2>Разложение несимметричного импульса в комплексный ряд Фурье</h2>
<p>Для несимметричного импульса с амплитудой 1 комплексные коэффициенты Фурье примут вид:</p>
<p class="text-center">\( c_k = \displaystyle\frac{1}{T} \displaystyle\int_{0}^{\tau} e^{-i\frac{2\pi k t}{T}}dt = \left( \frac{1}{\pi k} sin \left( \frac{\pi k \tau}{T} \right) \right) e^{-i\frac{\pi k \tau}{T}}  \quad     (1) \) </p>  
<p>При этом, на нулевой частоте было деление на 0, поэтому её нужно задать отдельно в виде:</p>  
<p class="text-center">\( c_0 = \displaystyle\frac{\tau}{T}    \) </p>  
<p>Вычислим коэффициенты \( c_k \) разложения несимметричного импульса в Scilab по формуле (1), заодно посчитаем частоты гармоник \( \omega_k \). </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Строим график прямоугольного импульса Scilab</span>
</div>    
  
<h2>Выделяем амплитудный и фазовый спектр</h2>
<p>Вещественные коэффициенты \( A_k  \) и \( \phi_k  \), где </p>
<p class="text-center">\( A_k = |c_k| \quad \phi_k = arg(c_k) \) </p>
<p>несут полную информацию о периодической с известным периодом \( T \) функции.</p>
<p>Набор \( A_k  \) называется амплитудным спектром, а коэффициенты \( \phi_k  \) определяют фазы отдельных гармоник, их совокупность называется фазовым спектром.</p>
<p>Из сформированных комплекснозначных коэффициетов Фурье \( c_k \) выделим амплитудный и фазовый спект в Scilab: для нахождения модуля комплексного числа воспользуемся функцией \( abs() \), а угол  \( \phi_k  \) найдём с помощью функции \( atan(\cdot, \cdot) \).  </p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Строим график прямоугольного импульса Scilab</span>
</div>   
  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/1nz7i43/napominanie-pro-kompleksnye-chisla.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/1nz7i43/napominanie-pro-kompleksnye-chisla.jpg" itemprop="contentUrl" alt="Напоминание про комплексные числа." title="Напоминание про комплексные числа."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Напоминание про комплексные числа.</span>
</div>   
  
<p>Построим графики найденных спектров. Здесь стоит отметить, что \( A_k  \) и \( \phi_k  \) - это дискретные величины. Чтобы построить дискретный график в Scilab воспользуемся функцией \( plot2d3()  \) в совокупности с классическим \( plot()  \), который будет формировать кружочки:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Строим графики спектров прямоугольного импульса Scilab</span>
</div>    
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/18jzn8k/faza-i-amplituda-pryamougolnogo-impulsa.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/18jzn8k/faza-i-amplituda-pryamougolnogo-impulsa.jpg" itemprop="contentUrl" alt="Фаза и амплитуда прямоугольного импульса." title="Фаза и амплитуда прямоугольного импульса."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Фаза и амплитуда прямоугольного импульса.</span>
</div>   
  
<h2>Восстанавливаем несимметричный импульс</h2>
<p>Периодическая функция, представленная в виде комплексного ряда Фурье, может быть восстановлена по найденным коэффициентам (1) согласно формуле:</p>
<p class="text-center">\( x(t) = c_0 + 2 \displaystyle \sum_{k=1}^{+\infty} |c_k| cos(\omega_k t + arg(c_k)) \quad (2) \) </p>
<p>Представим формулу (2) на языке Scilab. Чтобы процесс был более наглядным, выражение под знаком суммы в (2) вынесем в отдельную функцию, аргументами которой будут: модуль комлекных коэффициентов \( |c_k| \) , частоты гармоник \( \omega_k \), временной промежуток - транспонированный вектор \( t \) и аргумент комлекных коэффициентов \( arg(c_k) \):</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Восстанавливаем сигнал по комплексным коэффициентам Фурье</span>
</div>   

<p>Заметьте, что коэффициент \( |c_0| \) представлен как \( С(1) \), так как <b>нумерация элементов массива в Scilab начинается с 1</b>.</p>
  
  
<p>Функция \( summ() \) будет иметь следующий вид:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">выражение под знаком суммы в (2)</span>
</div>  
  
<p>Итак, осталось лишь вывести восстановленный сигнал и посмотреть, насколько он совпадает с оригинальным:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a></b></p>
<span class="image-description text-italic">Выводим восстановленный сигнал на первый график.</span>
</div>  
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/10u48jh/ishodnyy-impuls-i-vosstanovlennyy-po-15-garmonikam.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/10u48jh/ishodnyy-impuls-i-vosstanovlennyy-po-15-garmonikam.jpg" itemprop="contentUrl" alt="Исходный импульс и восстановленный по 15 гармоникам" title="Исходный импульс и восстановленный по 15 гармоникам"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Исходный импульс и восстановленный по 15 гармоникам</span>
</div>   
 <p>На графике можно заметить осцилляции в точках излома импульса.</p> 
 <p>Если взять число гармоник \( N=50\), то картина улучшится, но кардинально не изменится:</p>   
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/1l0qfh3/ishodnyy-impuls-i-vosstanovlennyy-po-50-garmonikam.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/vosstanovlenie-signala-i-ehffekt-gibbsa/1l0qfh3/ishodnyy-impuls-i-vosstanovlennyy-po-50-garmonikam.jpg" itemprop="contentUrl" alt="Исходный импульс и восстановленный по 50 гармоникам" title="Исходный импульс и восстановленный по 50 гармоникам"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Исходный импульс и восстановленный по 50 гармоникам</span>
</div>  
<p>Дело в том, что если функция, которую раскладывают в ряд Фурье, имеет разрывы первого рода, то в точках разрыва ряд сходится к полусумме значений функции слева и справа от точки разрыва. Если оставить в сумме конечное число слагаемых, то есть выполнять приближение функции тригонометрическим полиномом, то в окрестности точки разрыва будут осцилляции. Это называется эффектом Гиббса. </p>

<p></p><p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa'>http://inclab.ru/articles/vosstanovlenie-signala-i-ehffekt-gibbsa</a><p>]]></description>
			<pubDate>Wed, 22 Jun 2022 00:31:20 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Реализация свёртки в Scilab]]></title>
			<link>http://inclab.ru/articles/realizaciya-svertki-v-scilab</link>
			<guid>http://inclab.ru/articles/realizaciya-svertki-v-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" /> Проведём пошаговую операцию свёртки двух сигналов, чтобы детально разобраться в смысле данной математической операции.<p>Свёртка  это математическая операция, применимая к \( f(t) \) и \( g(t) \), которая порождает третью функцию и определяется формулой:</p>
<p class="text-center">\( y(t) = (f * g)(t) = \displaystyle\int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tau \) (1)</p>

<p>Рассмотрим реализацию свёртки двух сигналов на примере. Пусть сигналы \( f(t) \) и \( g(t) \) задаются в следующем виде:</p>
<p class="text-center">
  \begin{matrix}  

  f(t) = \begin{cases} 
  2, \quad 0 \leq t < 1 \\
  -2t+4, \quad 1 \leq t < 2  \\
  0, \quad t<0 \text{ or } t \geq 2 \\ 
   \end{cases} 

&               

  g(t) = \begin{cases} 
  1, \quad  t = 0 \\
  1 - \frac{1}{3}t, \quad 0 < t < 3  \\
  0, \quad t<0 \text{ or } t \geq 3 \\ 
   \end{cases} 

\end{matrix}                
 </p>

<p>Их графики, соответственно будут представлять собой ломаные, как показано ниже</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/1fa12o4/grafiki-signalov-f-t-i-g-t.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/1fa12o4/grafiki-signalov-f-t-i-g-t.jpg" itemprop="contentUrl" alt="Графики сигналов f(t) и g(t)" title="Графики сигналов f(t) и g(t)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Графики сигналов f(t) и g(t)</span>
</div>      

<h2>Пример свёртки двух функций пошагово</h2>
<p>Проведём пошаговую операцию свёртки двух сигналов, чтобы детально разобраться в смысле данной математической операции.</p>
<p>Итак, начнём с того, что в интегральном выражении у функции \( g(t-\tau) \)  по переменной, которой производится интегрирование, стоит знак "-", а значит график  нужно отразить по горизонтальной оси относительно оси ординат, как показано на рисунке ниже:</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/1bb14rd/otrazhennyy-signal-g-t.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/1bb14rd/otrazhennyy-signal-g-t.jpg" itemprop="contentUrl" alt="Отражённый сигнал g(t)" title="Отражённый сигнал g(t)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Отражённый сигнал g(t)</span>
</div> 

<p>Выражение \(  (t-\tau) \) означает, что движение будет происходить оси \(  t \). Причём, если  \(  t<0 \), то график функции  \( g(t) \) будет двигаться влево, при  \(  t \geq 0 \) движение будет происходить вправо.</p>
<p>Далее необходимо вычислить произведение \(  g(t)(t-\tau) \)  для каждого значения  \(  t \)  и посчитать площадь получившейся в результате произведения двух графиков фигуры.</p>
<p>На рисунке ниже показано, какие случаи пересечений нам необходимо просчитать по мере движения графика  по оси  \(  t \) .</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/1n6opiv/grafichekaya-poshagovaya-interpretaciya-svertki-signalov-f-t-i-g-t.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/1n6opiv/grafichekaya-poshagovaya-interpretaciya-svertki-signalov-f-t-i-g-t.jpg" itemprop="contentUrl" alt="Графичекая пошаговая интерпретация свёртки сигналов f(t) и g(t)" title="Графичекая пошаговая интерпретация свёртки сигналов f(t) и g(t)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Графичекая пошаговая интерпретация свёртки сигналов f(t) и g(t)</span>
</div>   
  
  
<p>Остановимся на каждом из 6-ти случаев и произведём расчёты площадей получившихся фигур.</p>
<ol type="a">
  <li>
    <p>При \(  t<0 \)  графики сигналов не пересекаются, а значит и площадь фигуры их пересечения нулевая, то есть, результирующий интеграл примет вид: </p>
<p class="text-center">\(  \displaystyle\int_{-\infty}^{0}f(\tau)g(t-\tau)d\tau=0 \) </p>      
      
 </li>   
    <li>
    <p>На интервале \(  0 \leq t < 1 \)   сигнал \( f(t) \) представляет собой константу: \( f(t)=2 \) , а график сигнала \( g(t) \)  - есть прямая  \(1 - \frac{1}{3}t\). Исходя из вышесказанного, результатом сворачивания двух функций будет функция  \( y(t) \)  вида: </p>
<p class="text-center">\(  y(t) = \displaystyle\int_{0}^{t} 2 \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau = 2t - \frac{t^2}{3} \) </p>      
      
 </li> 
        <li>
    <p>На интервале  \(  1 \leq t < 2 \)  результирующий интеграл можно разбить на 2 интеграла: первый  вида, описанного в пункте b). Второй интеграл будет представлять собой площадь фигуры, имеющей стороны, описываемые  прямыми \(1 - \frac{1}{3}t\)  и  \( -2t+4 \) . В результате, функция \( y(t) \)   примет вид: </p>
<p class="text-center">\(  y(t) = \displaystyle\int_{0}^{1} 2 \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  +  \displaystyle\int_{1}^{t} \left( 4 - 2\tau \right) \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  = \frac{t^3}{9} -\frac{5}{3}t^2 + \frac{13}{3}t - \frac{10}{9} \)</p>      
      
 </li> 
            <li>
    <p>На интервале \(  2 \leq t < 3 \) результатом свёртки будет функция  \( y(t) \): </p>
<p class="text-center">\(  y(t) = \displaystyle\int_{0}^{1} 2 \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  +  \displaystyle\int_{1}^{2} \left( 4 - 2\tau \right) \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  = \frac{34}{9} -t \)</p>      
      
 </li> 
                <li>
    <p>Предпоследним, дающим непустое пересечение графиков, будет интервал  \(  3 \leq t < 4 \), который породит функцию  \( y(t) \): </p>
<p class="text-center">\(  y(t) = \displaystyle\int_{t-3}^{1}2 \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  + \displaystyle\int_{1}^{2}\left( 4 - 2\tau \right) \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  = \frac{1}{3}t^2 -3t + \frac{61}{9} \)</p>      
      
 </li> 
                    <li>
    <p>Результирующей функцией на интервале \(  4 \leq t < 5 \) будет второе слагаемое из предыдущего случая со своими пределами интегрирования: </p>
<p class="text-center">\(  y(t) = \displaystyle\int_{t-3}^{2} \left( 4 - 2\tau \right) \left(1 - \frac{1}{3}(t-\tau)\right)  d\tau  = \frac{1}{9}t^3 + \frac{5}{3}t^2 - \frac{25}{3}t + \frac{125}{9} \)</p>       
      
 </li> 
</ol>    
<p>Таким образом, результатом свёртки игналов \( f(t) \) и \( g(t) \) будет функция \( y(t) \), задаваемая совокупностью уравнений:</p>
<p class="text-center">
  \begin{matrix}  

  y(t) = \begin{cases} 
  0, \quad t<0 \text{ or } t \geq 5 \\
  2t - \frac{t^2}{3}, \quad 0 \leq t < 1  \\
  \frac{t^3}{9} -\frac{5}{3}t^2 + \frac{13}{3}t - \frac{10}{9}, \quad 1 \leq t < 2 \\ 
   \frac{34}{9} -t, \quad 2 \leq t < 3 \\ 
    \frac{1}{3}t^2 -3t + \frac{61}{9}, \quad 3 \leq t < 4 \\ 
   \frac{1}{9}t^3 + \frac{5}{3}t^2 - \frac{25}{3}t + \frac{125}{9}, \quad 4 \leq t < 5 \\ 
   \end{cases} 
\end{matrix}                
 </p>
                  
                  
<p>На рисунке ниже приведена функция являющаяся результатом сворачивания двух сигналов на каждом из смысловых промежутков.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/1tymzbb/funkciya-y-t---rezultat-svertki-signalov-f-t-i-g-t.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/1tymzbb/funkciya-y-t---rezultat-svertki-signalov-f-t-i-g-t.jpg" itemprop="contentUrl" alt="Функция y(t) - результат свёртки сигналов  f(t) и g(t) " title="Функция y(t) - результат свёртки сигналов  f(t) и g(t) "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Функция y(t) - результат свёртки сигналов  f(t) и g(t) </span>
</div>   
       
                  
<h2>Реализация свёртки на Scilab</h2>    
                  
<p>Для реализации в численных методах, рассматривается дискретный случай свертки двух функций \( f(j) \) и \( g(j) \)  </p>
                  
<p class="text-center">\( z(k) = \displaystyle\sum_{j=max(1, k+1-L_g)}^{min(k,L_f)} f(j)\cdot g(k+1-j), \quad  k=1,..,L_f+L_g \quad (3) \) </p>
                  
<p>где \( L_f, L_g\) - количество элементов функций \( f(j) \) и \( g(j) \)  соответственно.</p>

<p>Прежде всего, зададим функции \( f(j) \) и \( g(j) \) с помощью условных операторов в Scilab:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Задание сигнала f(t) </span>
</div>	    
                      
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Задание сигнала g(t) </span>
</div>	                  
                  
<p>Далее на пишем функцию, реализующую свёртку, согласно формулы (3)</p>
  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Задание сигнала g(t) </span>
</div>	  
  
  
<p>И посмотрим, сойдётся ли результат, полученный с помощью нашей функции \( myconv() \) с результатом, полученным при использовании встроенной функции \( conv() \) </p>
                  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Вывод графиков двух функций с настройкой толщины в Scilab</span>
</div>	                  
                  
<p>Глядя на изображение ниже, можно с уверенностью сказать, что результаты совпадают :) </p>                  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/gll1o6/rezultat-nalozheniya-vstroennoy-i-samopisnoy-funkcii-svertki.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/gll1o6/rezultat-nalozheniya-vstroennoy-i-samopisnoy-funkcii-svertki.jpg" itemprop="contentUrl" alt="Результат наложения встроенной и самописной функции свёртки " title="Результат наложения встроенной и самописной функции свёртки "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Результат наложения встроенной и самописной функции свёртки </span>
</div>   
       
<p>Вот только масштаб и отсчёты не похожи на наши задынные промежутки. Поэтому, проведём масштабирование результатов.</p>                       
                  
<h2>Корректировка результатов свёртки</h2>                     
<p>Для корректного отображения результирующего графика нам потребуется несколько модифицировать функцию  \( myconv() \). Прежде всего, заведём переменную, отвечающую за сдвиг результата по горизонтальной оси:</p>                       
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Переменная сдвига</span>
</div>	 
  
<p>И изменим функцию \( myconv() \) следующим образом:</p>                       
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Обновлённая функция свёртки</span>
</div>	                  
                  
<p>Посмотрим, как теперь будет выглядеть результат:</p>                       
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Рисум график масштабированной свёртки</span>
</div>	                  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/1neakai/rezultat-modifikacii-svertki.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/1neakai/rezultat-modifikacii-svertki.jpg" itemprop="contentUrl" alt="Результат модификации свёртки " title="Результат модификации свёртки "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Результат модификации свёртки </span>
</div>   
 <p>Стало значительно лучше: мы укладываемся в интервал и стартуем из нуля.</p>                     
                  
<h2>Реализация анимации свёртки двух сигналов</h2>                     
<p>Прежде всего, выведем графики сигналов, которые сворачиваем:</p>                       
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Рисуем графики функций f(t) и отражённой и сдвинутой g(t)</span>
</div>	                   
<p>Чтобы графики выглядели поприличнее, нужно уменьшить шаг дискретизации, например до \( d=0,01 \) и настроить их толщину с помощью \(  gca().children.children.thickness \) </p>                   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-svertki-v-scilab/akir99/grafiki-funkciy-f-t-i-g-t.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-svertki-v-scilab/akir99/grafiki-funkciy-f-t-i-g-t.jpg" itemprop="contentUrl" alt="Графики функций f(t) и g(t)" title="Графики функций f(t) и g(t)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Графики функций f(t) и g(t)</span>
</div>                   
                  
<p>Осталось лишь реализовать анимационный цикл.</p>   
<p>В <a href="https://inclab.ru/profi/osnova-animacii-v-scilab-imitaciya-dvijeniya">статье</a>дано описание основ анимации в Scilab.</p>  
 <p>Здесь на каждом шагу цикла мы рисуем i-ю точку свёртки, а зелёный график рисуем и стираем, что имитирует его движение.</p>   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a></b></p>
<span class="image-description text-italic">Эффект движущегося графика в Scilab</span>
</div>	                   
<p>В результате получим такую анимированную картинку движения графика и построения результирующего интеграла-свёртки:</p>    

<div class="image-container" itemscope="" itemtype="http://schema.org/ImageObject">
<picture><img class="image-in-container" src="http://inclab.ru/files/articles/realizaciya-svertki-v-scilab/51.gif" itemprop="contentUrl" alt="Анимация свёртки" title="Анимация свёртки" /></picture>
<span class="image-description text-italic" itemprop="description">Анимация свёртки</span>
</div>

  
  
  
  
  
  
                  
                  <p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/realizaciya-svertki-v-scilab'>http://inclab.ru/articles/realizaciya-svertki-v-scilab</a><p>]]></description>
			<pubDate>Tue, 21 Jun 2022 19:48:32 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Основной принципа машинного обучения на простом примере Scilab]]></title>
			<link>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</link>
			<guid>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Обучение линейного классификатора на эталонной выборке с целью правильно классифицировать жуков, относя их к гусеницам или божьим коровкам
<p>Рассмотрим задачу классификации данных на примере разделения садовых жуков.</p>
<p>Будем рассматривать гусениц и божьих коровок, разделяя их в зависимости от размера.</p>

<div class="tableWrapper">
<table>
  <tr>
    <td>Гусеницы длинные и узкие</td>
    <td>Божьи коровки короткие и широкие</td>  
  </tr>
  <tr>
    <td><center><img style="width: 100%; max-width: 100px" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/zgk22w/osnovnoy-principa-mashinnogo-obucheniya-na-prostom-primere-scilab.jpg" /></center></td>
    <td><center><img style="width: 100%; max-width: 100px" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/d3wx5/osnovnoy-principa-mashinnogo-obucheniya-na-prostom-primere-scilab.jpg" /></center></td>       
  </tr>    
  <tr>
    <td><small class="small">Image from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=158701">Pixabay</a></small></td>
    <td><small class="small">Image from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=297875">Pixabay</a></small></td>       
  </tr>  
</table>  
</div>

<p>Определим шкалу, где по вертикали будет откладываться длина жука, а по горизонтали  ширина.</p>
<p>Тогда на введённой шкале всех жуков можно условно разделить следующим образом:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1ozgonh/zhuki-v-sisteme-koordinat-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1ozgonh/zhuki-v-sisteme-koordinat-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Жуки в системе координат. Изображение из (1)" title="Жуки в системе координат. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Жуки в системе координат. Изображение из (1)</span>
</div>   

<p>Попробуем разделить наших жуков с помощью прямой. Уравнение прямой имеет вид:</p>
<p class="text-center"> \( y = Ax, \)  </p>

<p>где A  это коэффициент наклона.</p>
<p>Проведём пару разделительных линий:</p>

<div class="tableWrapper">
<table>
  <tr>
    <td style="width:50%"><div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/kh96um/popytka-razdelit-zhukov-1-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/kh96um/popytka-razdelit-zhukov-1-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Попытка разделить жуков 1. Изображение из (1)" title="Попытка разделить жуков 1. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Попытка разделить жуков 1. Изображение из (1)</span>
</div>   </td>
    <td style="width:50%"><div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1mqccpr/popytka-razdelit-zhukov-2-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1mqccpr/popytka-razdelit-zhukov-2-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Попытка разделить жуков 2. Изображение из (1)" title="Попытка разделить жуков 2. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Попытка разделить жуков 2. Изображение из (1)</span>
</div> </td>       
  </tr>    
  <tr>
    <td>Тут мы попали в гусениц. То, что выше линии  гусеницы, то, что ниже линии - гусеницы и божьи коровки. Плохо разделили 	&#129320; </td>
    <td>Тут мы ни в кого не попали, однако, выше линии оказались и гусеницы, и  божьи коровки, а снизу  никого. Совсем не разделили жуков &#129300;</td>       
  </tr>  
</table>  
</div>

<p>Итак, нам надо подобрать коэффициент наклона прямой таким образом, чтобы снизу были божьи коровки, а сверху - гусеницы:</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1t3gvd8/idealnyy-klassifikator-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1t3gvd8/idealnyy-klassifikator-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Идеальный классификатор. Изображение из (1)" title="Идеальный классификатор. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Идеальный классификатор. Изображение из (1)</span>
</div>

<p>Тогда, выбирая некоторого жука на анализ, по его координатам (длине и ширине),  мы поймём, где, относительно разделителя, он находится, а значит, сможем сказать, божья коровка это или гусеница.</p>
<p>Вот как-то, как на графике:</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1juut62/opredelenie-tipa-zhuka-po-ego-polozheniyu-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1juut62/opredelenie-tipa-zhuka-po-ego-polozheniyu-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Определение типа жука по его положению. Изображение из (1)" title="Определение типа жука по его положению. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Определение типа жука по его положению. Изображение из (1)</span>
</div> 
  
<h2>Тренировочные данные</h2> 
<p>Сейчас мы займемся тренировкой (обучением) нашего линейного классификатора и научим его правильно классифицировать жуков, относя их к гусеницам или божьим коровкам.</p>
<p>Первое, что нам понадобится - это эталонные данные, на основе которых мы будет тренировать классификатор. </p>
<p>Чтобы не усложнять себе жизнь, мы ограничимся двумя простыми примерами, приведенными ниже.</p>
<div class="tableWrapper">
<table>
  <tr>
    <th>Пример</th>
    <th>Ширина</th>     
    <th>Длина</th> 
    <th>Жук</th> 
  </tr>      
  <tr>
    <td>1</td>
    <td>3.0</td>     
    <td>1.0</td> 
    <td>Божья коровка</td> 
  </tr>    
  <tr>
    <td>2</td>
    <td>1.0</td>     
    <td>3.0</td> 
    <td>Гусеница</td> 
  </tr>  
</table>  
</div>

<p>Итак, для обучения классификатора у нас в арсенале имеются:</p>
<ul>
  <li>жук, имеющий ширину 3.0 и длину 1.0, который, как нам известно, является божьей коровкой; </li>
  <li>жук, имеющий ширину 1.0 и длину 3.0, которым является гусеницей.</li>
</ul>  

<p>Изобразим их на нашей шкале:</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1cnyjp0/polozhenie-ehtalonnyh-zhukov-na-koordinatnoy-setke-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1cnyjp0/polozhenie-ehtalonnyh-zhukov-na-koordinatnoy-setke-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Положение эталонных жуков на координатной сетке. Изображение из (1)" title="Положение эталонных жуков на координатной сетке. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Положение эталонных жуков на координатной сетке. Изображение из (1)</span>
</div> 
  
<p>И попробуем построить классификатор. То есть, провести прямую \( y=Ax \) с некоторым коэффициентом наклона \(  A \). </p>
<p>Возьмём \( А=0.25\). Тогда уравнение прямой будет иметь вид \( y=0.25x\). Изобразим наш классификатор на графике с жуками и посмотрим, каких результатов мы достигли:</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1w1ntll/klassifikator-s-a-0-25-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1w1ntll/klassifikator-s-a-0-25-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt=" Классификатор с А=0.25. Изображение из (1)" title=" Классификатор с А=0.25. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description"> Классификатор с А=0.25. Изображение из (1)</span>
</div> 

<p>Так себе классификатор, честно говоря.</p>
<p>С таким классификатором мы не можем делать выводы вида: «Если точка данных располагается над линией, то она соответствует гусенице».</p>
<p>А именно к этому мы и стремимся: по графику понять, что за жук перед нами. Если он выше прямой - гусеница,  ниже - коровка.</p>

<h2>Процесс настройки  классификатора</h2>
<p>Приступим к выработке алгоритма, который бы подбирал оптимальный коэффициент наклона прямой.</p>
<h4>Шаг 1</h4>
<p>Возьмём первого эталонного жука - божью коровку: у неё ширина 3 (это х), длина 1 (это у). Подставим ширину жука в наш классификатор:</p>
<p class="text-center"> \( y = 0.25 \cdot 3 = 0.75 \)  </p>  
  
<p>Получили \(у=0.75 \), а по эталону должно было получиться \( y_э = 1 \). Налицо отклонение от эталона.</p>


<h4>Шаг 2</h4> 
<p>Считаем ошибку которая вычисляется, как разница между желаемым значением и фактическим результатом.</p>

<p class="text-center"> \(e = y_э - y = 1 - 0.75 = 0.25 \)  </p>    
<p>Давайте подумаем, каким должно быть подходящее желаемое значение \( y  \). </p>
<p>Если положить его равным 1, как в эталоне, то линия пройдет через точку с координатами (х, у) = (3; 1), соответствующую божьей коровке. Само по себе это неплохо, но это не совсем то, что нам нужно. </p>
<p>Нам желательно, чтобы линия проходила над этой точкой. Почему? Да потому, что мы хотим, чтобы точки данных божьей коровки лежали под линией, а не нанизывались на неё. </p>
   
<p>Поэтому, мы немного приподнимем классификатор, т.е. </p> 
<p class="text-center"><b>отступим от \( y_э = 1 \) на небольшое значение \( D=0.1\) </b> </p>  
  
<p>Тогда ошибка будет вычисляться следующим образом:</p>
<p class="text-center"> \(e = y_э - y = 1.1 - 0.75 = 0.35 \)  </p>     
<p>На графике наши манипуляции с углом наклона прямой будут выглядеть так:</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1cr6sfh/nemnogo-korrektiruem-ugol-naklona-klassifikatora-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/1cr6sfh/nemnogo-korrektiruem-ugol-naklona-klassifikatora-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Немного корректируем угол наклона классификатора. Изображение из (1)" title="Немного корректируем угол наклона классификатора. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Немного корректируем угол наклона классификатора. Изображение из (1)</span>
</div> 
  
<h4>Шаг 3</h4> 
<p>Выясним как связаны \(A\) и \(D\).</p>
<p>Так как брать величину поправки с потолка нехорошо, формализуем поиск этого самого \(D\) - величины, на которую мы хотим изменить наклон классификатора.</p>
<p>Изначально классификатор имел уравнение</p>
<p class="text-center"> \(y=Ax \)  </p>    
<p>Приподняв его, мы произвели изменение угла наклона, получив прямую  </p>
<p class="text-center"> \(y=(A+D)x \)  </p>   
<p>А теперь подставим эти данные в ошибку \( e \): </p>
<p class="text-center"> \(e = y_э - y = (A + D)x - Aх = Aх + Dx - Ax = Dx. \)  </p>
<p>Итак, ошибка  \( e \)  связана с \( D \)  очень простым соотношением. Используем информацию об ошибку для определения величины поправки \( D \):</p>
<p class="text-center"> \( D = \frac{e}{x} \)  </p>
<p>Теперь мы можем использовать ошибку  \( e \) для вычисления величины, на которую следует изменить наклон классификатора. В нашем случае:</p>
<p class="text-center"> \( D = \frac{0.35}{3}=0.1167 \)  </p>

<h4>Шаг 4</h4> 
<p>Корректируем наклон классификатора. Текущее значение \(А=0.25\)  необходимо изменить на величину \( D = 0.1167 \), стало быть, улучшенное уравнение классификатора примет вид: </p>
<p class="text-center"> \( y = (0.25+0.1167)x=0.3667x \)  </p>
<p>Итак, новый классификатор \( у=0,3667х \) получен на основе всего одного эталонного значения.</p>

<p>Проделаем те же манипуляции для второго жука, но уже с подстроенным классификатором \( у=0,3667х \).</p>
<h4>Шаг 1</h4>
<p>Подставим гусеницу \( (x,y) = (1, 3) \)   в классификатор:</p>
<p class="text-center"> \( y = 0.3667 \cdot 1 = 0.3667 \)  </p>  
<h4>Шаг 2</h4> 
<p>Посмотрим на эталон:</p>
<p class="text-center"> \( y_э  = 3  \)  </p> 
<p>Отступим от эталона на \(D=0.1\) и посчитаем ошибку:</p>
<p class="text-center"> \(e = 2.9 - 0.3667 = 2.5333 \)  </p> 
<h4>Шаг 3</h4> 
<p>Вычислим величину \( D  \), на которую нужно изменить наклон классификатора: .</p>
<p class="text-center"> \( D = \frac{2.5333}{1}=2.5333 \)  </p>
<h4>Шаг 4</h4> 
<p>Корректируем наклон классификатора: </p>
<p class="text-center"> \( y = (0.3667 + 2.5333)x=2,9x \)  </p>


<p>Отобразим на графике проделанные манипуляции:</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/i0soqz/process-nastroyki-klassifikatora-po-dvum-ehtalonnym-dannym-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/i0soqz/process-nastroyki-klassifikatora-po-dvum-ehtalonnym-dannym-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Процесс настройки классификатора по двум эталонным данным. Изображение из (1)" title="Процесс настройки классификатора по двум эталонным данным. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Процесс настройки классификатора по двум эталонным данным. Изображение из (1)</span>
</div> 
  

<p>Глядя на график, мы видим, что нам не удалось добиться того наклона прямой, которого мы хотели. </p>
<p>Линия обновляется каждый раз, подстраиваясь под то целевое значение у, которое мы задаем. В результате этого мы отбрасываем весь предыдущий опыт обучения, который могли бы использовать, и учимся лишь на самом последнем примере.</p>
<p>Давайте это исправим.</p>

<h2>Сглаживание поправки</h2>
<p>Воспользуемся идеей, которая играет ключевую роль в машинном обучении.</p>
<p>Вместо того чтобы каждый раз с энтузиазмом заменять \(А \)  новым значением, мы используем лишь некоторую долю поправки \(D \) , а не всю ее целиком. </p>

<!--p>Благодаря этому мы движемся в том направлении, которое подсказывает эталонные данные, но делаем это осторожно, сохраняя некоторую часть предыдущего значения, которое было получено в результате, возможно, многих предыдущих тренировочных циклов. </p>

<p>У такого сглаживания есть еще один очень мощный и полезный побочный эффект. </p>
<p>Если эталонные данные не являются надежными и могут содержать ошибки или шум (а в реальных измерениях обычно присутствуют оба этих фактора), то сглаживание уменьшает их влияние.</p-->

<p>Ну что ж, сделаем перерасчет шагов 1-3 для обоих жуков, на этот раз добавив сглаживание в формулу обновления коэффициента наклона:</p>
<p class="text-center"> \( D = L \frac{e}{х} \) </p>
<p>Фактор сглаживания, обозначенный здесь как \( L\), часто называют коэффициентом скорости обучения. </p>

<p>Выберем  \( L=0,5 \) в качестве разумного начального приближения. Это означает, что мы собираемся использовать поправку вдвое меньшей величины, чем без сглаживания.</p>

<p>Повторим шаги 1-4 для обоих жуков, используя начальное значение \( А=0,25 \).</p>
<p>Тестирование божьей коровки \( (x,y) = (3, 1) \)  дает нам:</p>
<ol>
<li>Вычисленное значение 
  <p class="text-center">\(у = 0.25 \cdot 3 = 0.75 \) </p>
  </li>
<li><p>При целевом значении   \(y_э = 1.1 \) ошибка \( e = 0.35 \)</p></li>
<li>Поправка равна 
  <p class="text-center">\( D = L \frac{e}{х} = 0.5 \frac{0,35}{3} = 0.0583 \)</p>
  </li>
<li>Обновленное значение 
  <p class="text-center">\( А = 0.25 + 0.0583 = 0.3083 \)</p> 
  <p>В итоге на первом жуке уравнение прямой преобразуется к виду</p>
  <p class="text-center">\( y = 0.3083x\) </p>
  </li>
</ol>

<!--p>Проверим, как работает новый классификатор на божьей коровке: при \(х=3.0 \) получим вычисленное значение </p>
  <p class="text-center"> \(у = 0.3083 \cdot 3.0 = 0.9250 \) </p>
<p>Как видим, расположение этой линии относительно оказалось неудачным  она проходит ниже значения 1,1, но этот результат не так уж и плох, если учесть, что это была всего лишь первая попытка. Главное то, что мы движемся в правильном направлении от первоначальной линии.</p-->



<p>Проведём расчеты с новым значением \( А \) для гусеницы \( (x,y) = (1, 3) \).</p>
<ol>
<li>Вычисленное значение 
  <p class="text-center">\(у = 0.3083 \cdot 1 = 0.3083 \) </p>
  </li>
<li><p>При целевом значении   \(y_э = 2.9 \) ошибка \( e = 2.9 - 0.3083 = 2.5917 \)</p></li>
<li>Поправка равна 
  <p class="text-center">\( D = L \frac{e}{х} = 0.5 \frac{2.5917}{1} = 1.2958 \)</p>
  </li>
<li>Теперь обновленное значение
  <p class="text-center">\( А = 0.3083 + 1.2958 = 1.6042 \)</p> 
  <p>В итоге на втором жуке уравнение прямой преобразуется к виду</p>
  <p class="text-center">\( y = 1.6042x\) </p>
  </li>
</ol>
<p>Отобразим на графике начальный, улучшенный и окончательный варианты классификатора, чтобы убедиться в том, что сглаживание обновлений приводит к более удовлетворительному расположению разделительной линии между областями данных божьих коровок и гусениц:</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/7e5p3h/rezultat-nastroyki-klassifikatora-s-koehfficientov-obucheniya-0-5-izobrazhenie-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/7e5p3h/rezultat-nastroyki-klassifikatora-s-koehfficientov-obucheniya-0-5-izobrazhenie-iz-1.jpg" itemprop="contentUrl" alt="Результат настройки классификатора с коэффициентов обучения=0.5. Изображение из (1)" title="Результат настройки классификатора с коэффициентов обучения=0.5. Изображение из (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Результат настройки классификатора с коэффициентов обучения=0.5. Изображение из (1)</span>
</div> 
  
<p>Это действительно отличный результат!</p>
<p>Всего лишь с двумя простыми тренировочными данными и относительно простым методом обновления мы, используя сглаживание поправки на основе скорости обучения, смогли очень быстро получить хорошую разделительную линию \( у=Ах \).</p>

<p>Теперь подав на вход данного классификатора некоторого жука \( (x,y) \), мы сможем определить, гусеница он или божья коровка, лишь взглянув на график.
Стоит отметить, что классификатор будет тем лучше настроен, чем больше эталонных данных он обработает.</p>

<h2>Реализация на Scilab настройки линейного классификатора по эталонной выборке</h2>

<p>Для начала, создадим массив с жуками</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">Матрица выборки в Scilab.</span>
</div>	 

<p>Далее, чтобы не привязываться к размерностям и без опаски добавлять\удалять элементы выборки, узнаем число строк в матрице:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">узнаем размер выборки.</span>
</div>	
<p>Пусть тренировочная выборка составляет 40% от всей выборки - на ней будем настраивать классификатор,  на остальных 60% будем проверять классификатор:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">обучающая и эксериментальная выборки</span>
</div>	

<p>Зададим  начальный коэффициент классификатора \( A \), скорость обучения \( L \), величину поправки \( d \): </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">обучающая и эксериментальная выборки</span>
</div>	

<p>Проведём в цикле обучение на тренировочной выборке:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">обучающая и эксериментальная выборки</span>
</div>	

<p>Функция проверки "божья ли коровка попалась" имеет вид:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">проверяем жука на коровкость</span>
</div>	
<p>Чтобы посмотреть, как прошла тренировка классификатора, нарисуем жуков, покрасив божьих коровок красным, на которых тренировались и сам классификатор:</p>  
 <div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">Вывод тренировочной выборки и классификатора</span>
</div> 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/vmh3f3/rezultat-nastroyki-klassifkatora-i-dannye-iz-obuchayuschey-vyborki.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/vmh3f3/rezultat-nastroyki-klassifkatora-i-dannye-iz-obuchayuschey-vyborki.jpg" itemprop="contentUrl" alt="Результат настройки классифкатора и данные из обучающей выборки." title="Результат настройки классифкатора и данные из обучающей выборки."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Результат настройки классифкатора и данные из обучающей выборки.</span>
</div> 
   
<p>А теперь посмотрим, как классификатор разделяет оставшихся жуков:</p>  
 <div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a></b></p>
<span class="image-description text-italic">Разделение классификатором экспериментальной выборки</span>
</div> 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/nastroyka-lineynogo-klassifikatora-scilab/kvaidf/rezultat-nastroyki-klassifkatora-i-dannye-iz-ehksperimentalnoy-vyborki.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/nastroyka-lineynogo-klassifikatora-scilab/kvaidf/rezultat-nastroyki-klassifkatora-i-dannye-iz-ehksperimentalnoy-vyborki.jpg" itemprop="contentUrl" alt="Результат настройки классифкатора и данные из экспериментальной выборки." title="Результат настройки классифкатора и данные из экспериментальной выборки."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Результат настройки классифкатора и данные из экспериментальной выборки.</span>
</div> 
   
 
  
<p>Прекрасно справляется. В конец выборки можно подобавлять значения и посмотреть, как справляется классификатор. А также, рекомендуется поизменять размер тренировочной выборки и параметры \( d \) и \( L \) .</p>

<p>Данная статья создана на основе <a id="tarikbook" target="_blank" href="https://books.google.ru/books?id=wynnDwAAQBAJ">чудесной книги</a>(1) с реализацией автором  приведённых примеров на Scilab.</p>
<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab'>http://inclab.ru/articles/nastroyka-lineynogo-klassifikatora-scilab</a><p>]]></description>
			<pubDate>Fri, 27 May 2022 20:58:33 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Создаём движущийся маятник в Scilab]]></title>
			<link>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</link>
			<guid>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Стабилизация программной позиции маятника путём линеаризации уравнений в отклонениях
<p>На примере простой механической системы посмотрим, как "оживить" картинки в Scilab без дополнительных плагинов и без использования <em>comet()</em>.</p>
<p>Будем стабилизировать простой математический маятник.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/9ux9bc/risunok-matematicheskiy-mayatnik.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/9ux9bc/risunok-matematicheskiy-mayatnik.jpg" itemprop="contentUrl" alt="Рисунок. Математический маятник." title="Рисунок. Математический маятник."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок. Математический маятник.</span>
</div>


<p>Уравнения которого имеют вид.</p>
<p class="text-center">\( \ddot{\theta} + b\dot{\theta} + asin\theta = cT \)</p>
<p>Стабилизировать маятник будем в программной  позиции \( \theta = \delta=const \) с помощью вращающего момента:  \( T = u \)</p>
<p class="text-center">\( \ddot{\theta} + b\dot{\theta} + asin\theta = cu \) (1)</p>

<h2>Найдём программное управление \( u^p \)</h2>
<p>Программное управление \( u^p \) - это управление, которое обеспечивает программную позицию, т.е. отклоняет маятник на угол \( \delta \). Подставим \( \theta = \delta \)  в (1):</p>
<p class="text-center">\( \ddot{\delta} + b\dot{\delta} + asin\delta = cu^p \)</p>
<p>Так как угол \( \delta \) - это постояннная величина, ведь мы хотим, чтобы маятник остановился в таком положении, её производные будут равны 0, следовательно:</p>
<p class="text-center">\( 0 + 0 + asin\delta = cu^p \) </p>

<p>Откуда можно выразить искомое программное управление \( u^p \):</p>
<p class="text-center">\( u^p =  \frac{a}{c}sin\delta\) (2) </p>

<h2>Перейдём к системе д.у.</h2>
<p>Подробно переход к системе ДУ рассматривается в <a href="https://inclab.ru/beginner/reshenie-differencialnih-uravnenij-v-scilab">этом материале</a>. 

<p>Введём фазовые координаты:</p>
<p class="text-center">\( x_1 = \theta, x_2 = \dot{\theta} \) </p>  
  
<p>Тогда исходное уравнение (1) второго порядка сведётся к системе из двух дифференциальных уравнений первого порядка:</p>
<p class="text-center"> 
  \begin{cases} \dot{x_1} = x_2 \\ \dot{x_2} = cu - bx_2 - asinx_1  \quad (3)\end{cases} 
 </p>

<h2>Программная позиция для системы </h2>  
<p>Наша задача - обеспечить скорейшую остановку маятника в заданной позиции, т.е. перевести маятник в позицию \( \theta = \delta \), где скорость=0. Запишем это условие для фазовых координат</p>
<p class="text-center">\( x_1 = \delta, x_2 = \dot{\delta} = 0 \) </p>    
<p>Итак, для системы (3) нас интересует позиция:</p>
<p class="text-center"> 
  \begin{cases} \dot{x_1} = \delta \\ \dot{x_2} = 0 \quad (4) \end{cases} 
 </p>  
<p>Для того, чтобы к системе (3) можно было применят теоремы об асимтотической устойчивости нулевого положения равновесия, нам неоходимо перенести систему коордиинат в точку, где позиция \( (\delta, 0) \) - это нуль.</p>  
  
<h2>Переход к системе в отклонениях </h2>  
<p>Введём отклонения от программной позиции (4) в системе (3):</p>
<p class="text-center"> 
  \begin{cases} y_1 = x_1 - \delta \\ y_2 =x_2 - 0  \end{cases} (5)
  
  \begin{cases} x_1 = y_1 + \delta \\ x_2 =y_2   \end{cases} 
 </p>
  
<p>Подставим (5) в (3), тогда система в отклонениях примет вид: </p>  
<p class="text-center"> 
  \begin{cases} \dot{y_1} = y_2 \\ \dot{y_2} = cu - by_2 - asin\left( y_1 + \delta \right)  \end{cases}
 </p>  



<h2>Корректировка управляющего воздействия</h2>
<p>Как правило, для эффективного управления динамическими системами одного программного управления \( u^p \) бывает недостаточно из-за неточностей в измерениях и влияния внешних источников, поэтому мы введём добавочное стабилизирующее управление \( u^{st}\) :</p>
<p class="text-center">\( u = u^p + u^{st} \)</p>
  
<p>Тогда системе в отклонениях получим: </p>
<p class="text-center"> 
  \begin{cases} \dot{y_1} = y_2 \\ \dot{y_2} = c\left( u^p + u^{st} \right) - by_2 - asin\left( y_1 + \delta \right)   \end{cases}, или
  \begin{cases} \dot{y_1} = y_2 \\ \dot{y_2} = c \cdot \frac{a}{c} sin\delta\  + c \cdot  u^{st} - by_2 - asin\left( y_1 + \delta \right)   \end{cases}, что приводит к
  \begin{cases} \dot{y_1} = y_2 \\ \dot{y_2} = asin\delta\  + cu^{st} - by_2 - asin\left( y_1 + \delta \right) \quad (6)  \end{cases}
   </p>  
  
<h2>Линеаризация системы в отклонениях</h2>  
<p>Так как эффективнее всего теоремы об устойчивости работают для линейных систем, начнём с линеаризации системы (6).</p>  
<p>Разложжим \( sin\left( y_1 + \delta \right) \) в окрестности нуля:</p>  
 
<p class="text-center">\( sin\left( y_1 + \delta \right) \sim  y_1cos(\delta) + sin\delta \)</p>  
<p>Подставляя данное разложение в (6), получим:</p>   
 <p class="text-center"> 
  \begin{cases} \dot{y_1} = y_2 \\ \dot{y_2} = asin\delta\  + cu^{st} - by_2 - ay_1cos(\delta) - asin\delta  \end{cases}
   </p>   
<p>Таким образом, система (6) примет вид:  </p>
 <p class="text-center"> 
  \begin{cases} \dot{y_1} = y_2 \\ \dot{y_2} = - acos(\delta)y_1  - by_2   + cu^{st}  \quad (7) \end{cases}
   </p>    
 
<p>Запишем систему (7) в векторно-матричном виде, чтобы с ней было бы удобнее работать:  </p>

 <p class="text-center"> 
    \begin{matrix}
 \dot y= {  \begin{pmatrix} 0 & 1 \\  - acos(\delta) & -b \end{pmatrix} } y +  {  \begin{pmatrix} 0 \\  c \end{pmatrix} } u^{st} \quad (8) 
   \end{matrix}   
   </p> 
  
  
<h2>Найдём стабилизирующее управление \(u^{st} \) </h2>   
<p>Прежде всего, сделаем из системы (8) однородную систему. Для этого выберем \(u^{st} \) вида: </p>
<p class="text-center">\( u^{st}= -Ky, \quad  K = (k_1, k_2) \quad (9) \)</p>
 <p>и подставив (9) в (8), получим чудесную линейную однородную систему дифуров: </p> 
  <p class="text-center"> 
    \begin{matrix}
 \dot y= {  \begin{pmatrix} 0 & 1 \\  - acos(\delta)-сk_1 & -b-ck_2 \end{pmatrix} } y  \quad (10) 
   \end{matrix}   
   </p>  
<p>Стабилизиирующее управление \(u^{st} \) - это управление, которое стабилизирует систему. То есть обеспечивает асимтотическую устойчивость нулевого положения равновесия этой системы.</p>
<p>В обычных условиях, система (10) сосвем не обязательно будет ас. устойчивой, но чтобы победить эту несправедливость мы и ввели управление \(u^{st} \) в виде \( u^{st}= -Ky \), подрегулировав значения \(k_j \) которого, мы добьёмся того, чтобы корни характеристического уравнения системы (10) были бы "левыми".</p>  
<p>Значения \(k_j \), кстати, называются коэфффицентами усиления.</p>
  
<p>Итак, нам предстоит найти условия на основе \(k_j \), при которых собственные значения матрицы </p>  
  <p class="text-center"> 
    \begin{matrix}
 {  \begin{pmatrix} 0 & 1 \\  - acos(\delta)-сk_1 & -b-ck_2 \end{pmatrix} }  \quad (11) 
   \end{matrix}   
   </p>     

<p>были бы расположены в левой полуплоскости комплекной плоскости.</p>  
  
<h3>Условия гурвицевости матрицы (11)</h3>     
 <p>Чтобы не утруждаться поиском с.з. и с.в. матрицы (11), воспользуемся критерием асисмтотической устойчивости вида:</p>   
  <p class="text-center"> 
  \begin{cases} trA < 0 \\ |A| > 0 \end{cases} 
</p>    
 <p>Откуда получим условия на \(k_1 \) и \(k_2 \) :</p>   
  <p class="text-center"> 
  \begin{cases} k_2 > -\frac{b}{c} < 0 \\ k_1 > \frac{a}{c}cos(\delta)  \end{cases} 
</p>      

 <p>Итак, выбирая стабилизирующее упарвление в виде:</p>   
<p class="text-center">\(u^{st} = -k_1y_1 - k_2y_2 \) </p>   
<p>мы добьёмся стабилизации линейной системы в отклонениях (7), что, в свою очередь будет значить схождение моделируемого движения маятника к программной позиции при решении задачи стабилизации положения равновесия, где управление будет складываться из программного и стабилизирующего управлений</p>      
 <p class="text-center">\(u = u^p + u^{st} \) </p>     
    
<h2>Программная реализация</h2>
<p>Приступим, наконец, к моделированию процесса стабилизации математического маятника в Scilab. Для этого нам понадобятся:</p>
<ul>
<li>Система (3)</li>
<li>Управление (2)</li>
<li>Управление (12)</li>
<li>Замена (5)</li>
</ul>
<p>Сначала зададим параметры, фигурирующие в системе:</p>    
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">Параметры математического маятника.</span>
</div>	    
    
<p>Далее зададим программное положение \(\delta \) и пaраметры стабилизирующего управления \(k_j \):</p>    
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">Программная позиция и коэффициенты усиления</span>
</div>	

<p>Зададим начальные условия, шаг дискретизации и отрезок интегрирования для решения системы ОДУ в Scilab:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">параметры для решения системы дифуров в Scilab.</span>
</div>	    
    
<p>И, наконец, запишем функцию, которая отвечает за формирование системы дифуров, описывающих движение маятника с найденным управлением:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic"> функциия системы ОДУ в Scilab.</span>
</div>	
<p>Этого, в принципе, достаточно, чтобы получить статическую графическую интерпретацию решения нашей задачи.</p>  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">вывод графиков с настройкой толщины в Scilab.</span>
</div>	   
    
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/19wcedp/koordinata-i-skorost-mayatnika-pod-deystviem-upravleniya-k1-k2-0-1-10.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/19wcedp/koordinata-i-skorost-mayatnika-pod-deystviem-upravleniya-k1-k2-0-1-10.jpg" itemprop="contentUrl" alt="Координата и скорость маятника под действием управления, (к1, к2) = (0.1, 10)" title="Координата и скорость маятника под действием управления, (к1, к2) = (0.1, 10)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Координата и скорость маятника под действием управления, (к1, к2) = (0.1, 10)</span>
</div>    
<p>При этом, подправляя коэффициеты усиления, можно регулировать скорость сходимости.</p>    
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/1p5jak9/koordinata-i-skorost-mayatnika-pod-deystviem-upravleniya-k1-k2-0-1-50.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/1p5jak9/koordinata-i-skorost-mayatnika-pod-deystviem-upravleniya-k1-k2-0-1-50.jpg" itemprop="contentUrl" alt="Координата и скорость маятника под действием управления, (к1, к2) = (0.1, 50)" title="Координата и скорость маятника под действием управления, (к1, к2) = (0.1, 50)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Координата и скорость маятника под действием управления, (к1, к2) = (0.1, 50)</span>
</div>    
<p>При этом, без управления маятник  будет бултыхаться довольно долго и остановится в устойчивом положении равновесия (0,0):</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">отключим управление в функции системы ОДУ</span>
</div>	    
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/indiic/koordinata-i-skorost-mayatnika-bez-upravlyayuschego-vozdeysvtiya.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/indiic/koordinata-i-skorost-mayatnika-bez-upravlyayuschego-vozdeysvtiya.jpg" itemprop="contentUrl" alt="Координата и скорость маятника без управляющего воздейсвтия" title="Координата и скорость маятника без управляющего воздейсвтия"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Координата и скорость маятника без управляющего воздейсвтия</span>
</div>      


<h2>Создание анимации движения в Scilab</h2>
<p>Пойдём дальше и приступим к реализации движущегося объекта.</p>
    
<p>Для начала, повернём сетку координат на 90 градусов, чтобы маятник смотрела вниз :)</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">новые координаты.</span>
</div>	

<p>Добавим звёздочки на координатную сетку - начальное положение и программную позицию маятника</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">начальное и конечное положения маятника</span>
</div>	    
    
<p>И изобразим маятник в исходном положении с помощью ломаной линии с координатами \( (0, 0) - ( L*cos(X_r(1,1)), L*sin(X_r(1,1)) )  \):</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">рисуем прямую в Scilab.</span>
</div>	

<p>Далее отредактируем параметры элемента <em>xpoly()</em>. Наличие соединений <em>mark</em> имитирует груз на конце стержня маятника, <em>mark_style = 9</em> говорит, что это кружочек, а <em>mark_offset = 1</em> отвечает за смещение кружочка относительно линии:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">рисуем прямую в Scilab.</span>
</div>	

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/nm17jb/pryamaya-s-kruzhochkom.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/animaciya-stabilizacii-mayatnika-v-scilab/nm17jb/pryamaya-s-kruzhochkom.jpg" itemprop="contentUrl" alt="Прямая с кружочком" title="Прямая с кружочком"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Прямая с кружочком</span>
</div>

<p>Приступим к имитации движения маятника. Его траектория - это решени системы ОДУ, т.е. элементы матрицы <em>X_r</em>. В первой строке этой матрицы содержится координата маятника \( X_1 = \theta  \) в момент времени \( i \), а во второй строке - скорость маятника \( X_2 = \dot\theta  \) в этот момент времени. Нам нужна координата для изменения позиции палочки с кружком, причём, центр маятника так и будет оставаться в положении \( (0,0) \), двигаться же будет его не закреплённый конец:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a></b></p>
<span class="image-description text-italic">Анимация движения маятника в Scilab. Рисуется каждая 12 точка - это имитация sleep()</span>
</div>	

<p>Под действием выбранного управления, маятник быстренько стабилизируется и не бултыхается безумно:</p>	
<div class="image-container" itemscope="" itemtype="http://schema.org/ImageObject">
<picture><img class="image-in-container" src="http://inclab.ru/files/articles/animaciya-stabilizacii-mayatnika-v-scilab/pend.gif" itemprop="contentUrl" alt="Стабилизация маятника с управлением" title="Стабилизация маятника с управлением" /></picture>
<span class="image-description text-italic" itemprop="description">Стабилизация маятника с управлением</span>
</div>
  
<p>Если же в теле функции <em>systNelin()</em> исключить найденное управление из процеса стабилизации маятника, получим поведения объекта под действием на него исходных внешних сил:</p>	
<div class="image-container" itemscope="" itemtype="http://schema.org/ImageObject">
<picture><img class="image-in-container" src="http://inclab.ru/files/articles/animaciya-stabilizacii-mayatnika-v-scilab/pend0.gif" itemprop="contentUrl" alt="Стандартное движение маятника" title="Стандартное движение маятника" /></picture>
<span class="image-description text-italic" itemprop="description">Стандартное поведение маятника</span>
</div>

  

<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab'>http://inclab.ru/articles/animaciya-stabilizacii-mayatnika-v-scilab</a><p>]]></description>
			<pubDate>Fri, 27 May 2022 17:26:28 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Марковский случайный процесс с дискретными состояниями и непрерывным временем]]></title>
			<link>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</link>
			<guid>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</guid>
			<description><![CDATA[<img src="http://inclab.ru" />При моделировании информационных систем часто встречаются ситуации, которые указать заранее невозможно.<h2>Непрерывная цепь Маркова</h2> 
<p>При моделировании информационных систем часто встречаются ситуации, которые указать заранее невозможно. Например, любая деталь или агрегат могут выходить из строя в любой, непредсказуемый заранее момент времени. </p>

<p>В данной ситуации не удастся обойтись детерминированной матрицей переходов, как в <a href="https://inclab.ru/profi/realizaciya-markovskoy-cepi">дискретном случае</a> ведь <em>вероятность</em> \(p_{i}\) оказаться в состоянии \(S_i\) будет <em>функцией времени</em>, то есть:</p>
 
<p class="text-center" >
\(p_{i}(t) = p(S_i(t)) \quad i = 1,...,n, \quad t \geq 0 \)
</p> 

<p>Более того, вместо вероятности перехода \(p_{ij}\), мы теперь будем говорить о <em>плотности вероятности</em> перехода \(\lambda_{ij}(t)\) из состояния \(S_i\) в состояние \(S_j\)  в момент времени t:</p>
 
 <p class="text-center" >
   \(
\lambda_{ij}(t) = \displaystyle\lim_{\Delta t \to 0} \frac{p_{ij}(t,\Delta t)}{\Delta t}
   \)
</p> 
<p>которая запросто может становиться больше 1.</p>

<p>Вероятности \(\lambda_{ij}(t)\) будут составлять <em>матрицу плотностей вероятностей переходов</em>:</p>
  
 <p class="text-center" >
    \begin{matrix}
 \Lambda= {  \begin{pmatrix} \lambda_{11}(t) & \lambda_{12}(t) & ... & \lambda_{1n}(t) \\  ... & ... & ... & ... \\ \lambda_{n1}(t) & \lambda_{n2}(t) & ... & \lambda_{nn}(t) \end{pmatrix} \quad  (1)} 
   \end{matrix} 
</p>   

<p><small>Однако, несмотря на то, что всё меняется, некоторые вещи остаются неизменными, но становятся другими :)</small></p>
<p>В случае с непрерывным временем тоже будет иметь место равенство суммы вероятностей 1, которое будем называть <em>нормировочным условием</em>:</p>
 <p class="text-center" >
   \(
\displaystyle\sum_{i=1}^{n} p_{i}(t) = 1, \quad \forall t \geq 0 \quad (2)
   \) 
</p> 

<p>Как же отыскать \(p_{i}(t)\), если они в явном виде нигде не заданы?</p>
<p>Здесь на помощь приходят <em>дифференциальные уравнения Колмагорова</em>, которые и помогут найти исходные \(p_{i}(t)\).</p>
<p>Итак, вероятности состояний \(p_{i}(t)\) - это решение системы дифференциальных уравнений вида:</p>

 <p class="text-center" >
   \(
\displaystyle\frac{dp_{i}(t)}{dt} =  \displaystyle\sum_{j=1}^{n} \lambda_{ji}(t)\cdot p_{j}(t) - \displaystyle\sum_{j=1}^{n} \lambda_{ij}(t)\cdot p_{i}(t)  \quad (3)
   \)
</p> 

<p>Рассмотрим подробнее, что из себя представляет 1-е уравнение системы (3). Для этого заменим все \( i \) на 1 в (3):</p>
 <p class="text-center" >
   \(
\displaystyle\frac{dp_{1}(t)}{dt} =  \displaystyle\sum_{j=1}^{n} \lambda_{j1}(t)\cdot p_{j}(t) - \displaystyle\sum_{j=1}^{n} \lambda_{1j}(t)\cdot p_{1}(t)  \quad 
   \)
</p> 

<p>Теперь стало понятно, что в сумме с <em>плюсом</em> надо пробежаться по <em>1-му столбцу</em> матрицы (1), <em>домножив</em> каждый элемент на соответствующую вероятность \(p_{j}(t)\),<br/>
а в сумме с <em>минусом</em> надо пробежаться по <em>1-ой строке</em> матрицы (1), <em>домножив</em> каждый элемент на вероятность \( p_{1}(t) \).</p>

<p>Если перевести последнее высказывание на язык графов, то получим, что:<br/>
производная вероятности 1-го состояния - это сумма произведений входящих стрелок на интенсивности соответствующих потоков<br/>
минус сумма произведений исходящих стрелок на интенсивность 1-го потока.</p>

<p>Отсюда можно вывести <em>правило составлений уранений Колмагорова:</em></p>
 <ul> 
<li><p>В левой части каждого из них стоит  <em>производная вероятности i-го состояния</em>.</p> </li>
<li><p>В правой части<br/> 
  с плюсом -  суммарная интенсивность всех потоков, приводящих систему в данное состояние: <br/>
  с минусом - суммарная интенсивность всех потоков, выводящих систему из данного состояния.</p>
</li>  
 </ul> 

<h3>Финальные вероятности</h3>
<p>Уравнения Колмогорова дают возможность найти все вероятности состояний как функции времени. Особый интерес представляют вероятности системы <em>в предельном стационарном режиме</em>, т.е. при \( t \to \infty \), которые называются <em>предельными (или финальными) вероятностями </em> состояний.</p>

<p>Финальные вероятности состояний находятся путем решения СЛАУ, которые получаются из дифференциальных уравнений Колмогорова (3), если приравнять производные к нулю, а вероятностные функции состояний \( p_1(t),..., p_n(t) \) в правых частях уравнений заменить соответственно на неизвестные финальные вероятности \( p_1^*(t),..., p_n^*(t) \) и добавить нормировочное условие (2). </p>

 <p class="text-center" >
   \(
   \begin{cases}
0 =  \displaystyle\sum_{j=1}^{n} \lambda_{ji}(t)\cdot p^*_{j} - \displaystyle\sum_{j=1}^{n} \lambda_{ij}(t)\cdot p^*_{i}  \quad \\
   \displaystyle\sum_{i=1}^{n} p^*_{i} = 1
   \end{cases}
   \)
</p> 

<h2>Модель взаимодействия копмонент ПО средств активной защиты</h2> 
<p>Рассмотрим  процесс активной защиты информационной компьютерной системы, в которой функционируют 5 комплексов программ.</p>
<p>Пусть плотности вероятности \(\lambda_{ij}\) описывают интенсивность передачи управления от \(i\)-го компекса ПО к \(j\)-му в процессе решения задач активной защиты КС.</p>
<p>Предположим, что \(\lambda_{ij}\) задаются в виде:</p>
 <p class="text-center" >
   \(
\lambda_{12} = \frac{1}{T_1};  \lambda_{21} = \frac{1-\alpha}{T_2}; \lambda_{23} = \frac{\alpha}{T_2}; \lambda_{34} = \frac{1}{T_3}; 
   \)<br/>
    \(
\lambda_{43} = \frac{1-\beta}{T_4};  \lambda_{45} = \frac{\beta}{T_4}; \lambda_{51} = \frac{1}{T_5}; 
   \)  
</p> 

<p>где \(\alpha\) - вероятность того, что вторжение злоумышленника бедут распознано САЗ,<br/> 
  \(\beta\) - вероятность того, что выявленная уязвимость в КС будет использована для ответных атак.</p>

<p>Через  \( p_i(t) \) зададим вероятность того, что в момент времени \( t\) в КС выполняется \(i\)-й компекс программ.</p>

<p>Пусть взаимодействие комплексов ПО в КС описывается с помощью графа на рис.1 </p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/j9yncv/risunok-1-graf-svyazi-kompleksov-po-v-ks.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/j9yncv/risunok-1-graf-svyazi-kompleksov-po-v-ks.jpg" itemprop="contentUrl" alt="Рисунок 1. Граф связи комплексов ПО в КС." title="Рисунок 1. Граф связи комплексов ПО в КС."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 1. Граф связи комплексов ПО в КС.</span>
</div> 

<p>Тогда соответствующая система ДУ Колмагорова будет иметь вид:</p>
 <p class="text-center" >
   \(
\begin{cases} 
   \dot p_1 = -\lambda_{12}p_1 + \lambda_{21}p_2 + \lambda_{51}p_5 \\ 
   \dot p_2 = \lambda_{12}p_1 - (\lambda_{21} + \lambda_{23})p_2 \\ 
   \dot p_3 = \lambda_{23}p_2 - \lambda_{34}p_3 + \lambda_{43}p_4 \\ 
   \dot p_4 = \lambda_{34}p_3 - (\lambda_{43} + \lambda_{45})p_4 \\ 
   \dot p_5 = \lambda_{45}p_4 - \lambda_{51}p_5  
\end{cases} (4)
   \)  
</p> 

<p>Для того, чтобы с уравнениями Колмагорова было удобнее работать в Scilab, перепишем систему (4) в матричном виде:</p>
 <p class="text-center" >
    \begin{matrix}
 \dot p = {  \begin{pmatrix} 
   -\lambda_{12} & \lambda_{21} & 0 & 0 & \lambda_{51}\\ 
   \lambda_{12} & -(\lambda_{21} + \lambda_{23}) & 0 & 0 & 0\\
   0 & \lambda_{23} & -\lambda_{34} & \lambda_{43} & 0\\
   0 & 0 & \lambda_{34} & - (\lambda_{43} + \lambda_{45}) & 0\\ 
   0 & 0 & 0 & \lambda_{45} & -\lambda_{51}\\
   \end{pmatrix} }p  \quad (5)
   \end{matrix} 
</p> 

<p>Кратко:</p>
 <p class="text-center" >
     \( \dot p = Bp \) 
</p>

<p>Зададим начальные условия для системы (5), т.е. вектор начального состояния (6):</p>
 <p class="text-center" >
     \( p_0  = (1, 0, 0, 0, 0) \quad (6) \) 
</p>


<h3>Решение ДУ Колмагорова в Scilab</h3>
<p>Решим задачу Коши для системы (5), с н.у. (6) в Scilab.</p>
<p>Решение данной задачи почти не отличается от рассмотренных ранее <a href="https://inclab.ru/beginner/reshenie-differencialnih-uravnenij-v-scilab">двумерных систем</a>.</p>
<p>Единственное нововведение - это замена в матрице системы (5) одной из строк на нормировочное условие (2). Это необходимо сделать, т.к. пара уравнений в (5) являются линейно зависимыми.</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami'>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</a></b></p>  
<span class="image-description text-italic">Решение ДУ Колмагорова для марковской цепи.</span>
</div>	 

<p>На рис.2 представлены интегральне кривые системы (5), которые и представляют собой вероятности состояний КС как функции времени.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/18i8oai/risunok-2-reshenie-du-kolmagorova.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/18i8oai/risunok-2-reshenie-du-kolmagorova.jpg" itemprop="contentUrl" alt="Рисунок 2.Решение ДУ Колмагорова." title="Рисунок 2.Решение ДУ Колмагорова."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 2.Решение ДУ Колмагорова.</span>
</div>
   
<h3>Решение СЛАУ Колмагорова в Scilab</h3>
<p>Так как марковский процесс, описывающий взаимодействие компонент ПО САЗ не имеет поглощающих состояний (см. рис.1), то с некоторого момента времени все компоненты КС будут функционировать в стационарном режиме, достигнув финальных вероятностей.</p>

<p>Найдём финальные вероятности \( p_i^* \). Для этого в системе (5) приравняем производные к нулю и решим СЛАУ с условием нормировки (2):</p>
 <p class="text-center" >
   \( 
    \begin{cases} 
 0 = {  \begin{pmatrix} 
   -\lambda_{12} & \lambda_{21} & 0 & 0 & \lambda_{51}\\ 
   \lambda_{12} & -(\lambda_{21} + \lambda_{23}) & 0 & 0 & 0\\
   0 & \lambda_{23} & -\lambda_{34} & \lambda_{43} & 0\\
   0 & 0 & \lambda_{34} & - (\lambda_{43} + \lambda_{45}) & 0\\ 
   0 & 0 & 0 & \lambda_{45} & -\lambda_{51}\\
   \end{pmatrix} }p^*  \\
   1 = p_1^* +p_2^* + p_3^* + p_4^* + p_5^* \quad 
   \end{cases} (7)
   \)
</p> 
<p>Чтобы не запутаться в последовательности линейных преобразований в системе (7), поручим эти действия Scilab.</p>

<p>Прежде всего, приведём матрицу B к ступенчатому виду. Для этого в Scilab имется функция rref:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami'>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</a></b></p>  
<span class="image-description text-italic">Функция приведения матрицы к ступенчатому виду в Scilab.</span>
</div>	 
<p>Убедимся, что <em>rB</em> действительно ступенчатая да ещё и с одной нулевой строкой (вспомните про ЛЗ уравнений в (5) ) :</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/1ax74lh/risunok-3-stupenchatyy-vid-matricy-v.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/1ax74lh/risunok-3-stupenchatyy-vid-matricy-v.jpg" itemprop="contentUrl" alt="Рисунок 3.Ступенчатый вид матрицы В." title="Рисунок 3.Ступенчатый вид матрицы В."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 3.Ступенчатый вид матрицы В.</span>
</div>


<p>Далее нам необходимо заменить последнюю строку матрицы на условие нормировки (2). Это условие выражено 6-м уравнением в системе (7). В нём фигурируют все элементы вектора p с коэффициентами 1. Поэтому последняя строка ступенчатой матрицы превратится в строку единиц.<br/>  
Последнюю строку матрицы в Scilab можно отыскать с помощью символа <em>$</em></p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami'>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</a></b></p>  
<span class="image-description text-italic">Заменим последнюю строку на условие нормировки в матрице В.</span>
</div>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/1gtqh1v/risunok-4-stupenchataya-matrica-so-strokoy-iz-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/1gtqh1v/risunok-4-stupenchataya-matrica-so-strokoy-iz-1.jpg" itemprop="contentUrl" alt="Рисунок 4.Ступенчатая матрица со строкой из 1." title="Рисунок 4.Ступенчатая матрица со строкой из 1."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 4.Ступенчатая матрица со строкой из 1.</span>
</div>

<p>Осталось лишь численно решить систему алгебраических уравнений. <br/> 
В Scilab <em>для решения системы  линейных уравнений</em> припасена функция <em>linsolve(A, b)</em>, которая ищет вектор <em>x</em> в системе уравнений вида:</p>
 <p class="text-center" >
     \( A*x + b = 0 \) 
</p>

<p>В нашем случае первый аргумемнт функции <em>linsolve(*, *)</em> - это матрица <em>rB</em>, а второй аргумент - это вектор <em>f</em>, сформированный из неоднородностей системы (7), перенесённых за знак "=".</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami'>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</a></b></p>  
<span class="image-description text-italic">Численное решенеие системы алгебраических уравнений в Scilab.</span>
</div>	


<p>Нарисуем финальные вероятности \( p_i^* \), чтобы убедиться, что именно к ним сходится решение ДУ Колмагорова:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami'>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</a></b></p>  
<span class="image-description text-italic">нарисуем вероятности p*.</span>
</div>	

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/moslk/risunok-5-vyhod-na-finalnye-veroyatnosti-integralnyh-krivyh.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami/moslk/risunok-5-vyhod-na-finalnye-veroyatnosti-integralnyh-krivyh.jpg" itemprop="contentUrl" alt="Рисунок 5.Выход на финальные вероятности интегральных кривых." title="Рисунок 5.Выход на финальные вероятности интегральных кривых."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 5.Выход на финальные вероятности интегральных кривых.</span>
</div>

<p>Итак, где-то с 90сек. ПО в системе активной защиты КС будет функционировать в установившемся режиме.</p>







<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami'>http://inclab.ru/articles/markovskiy-sluchaynyy-process-s-diskretnymi-sostoyaniyami</a><p>]]></description>
			<pubDate>Thu, 12 May 2022 12:40:00 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Реализация Марковской цепи]]></title>
			<link>http://inclab.ru/articles/realizaciya-markovskoy-cepi</link>
			<guid>http://inclab.ru/articles/realizaciya-markovskoy-cepi</guid>
			<description><![CDATA[<img src="http://inclab.ru" /><h2>Марковский случайный процесс с дискретным состоянием и дискретным временем</h2> 
<p>Предположим, что автоматизированная информационная системы может находиться в следующих <em>n</em> состояниях \( S_1, S_2, . . . , S_n\). При этом переход системы из <em>i</em>-го состояния в <em>j</em>-е характеризуется вероятностью  \(p_{ij}\), где <em>i, j = 1, 2, . . . , n</em>.</p>
<p>Поскольку система может пребывать в одном из состояний, то для каждого момента времени <em>t</em> необходимо задать \(n^2\) вероятностей перехода \(p_{ij}\), которые удобно представить в виде следующей матрицы:</p>
  
 <p class="text-center" >
    \begin{matrix}
 P= {  \begin{pmatrix} p_{11} & p_{12} & ... & p_{1n} \\ p_{21} & p_{22} & ... & p_{2n} \\ ... & ... & ... & ... \\ p_{n1} & p_{n2} & ... & p_{nn} \end{pmatrix}  (1)} 
   \end{matrix} 
</p>   
 <p>Матрица (1) называется <em>матрицей перехода системы</em>.</p>   
<p>В матрице перехода располагаются:<br>
  \(p_{ij} \) - вероятность перехода системы за один шаг из состояния \(S_i\) в состояние \(S_j\);<br/> 
  \(p_{ii}\) - вероятность задержки системы в состоянии \(S_i\).</p> 
<p>Таким образом, в обозначении \(p_{ij} \) первый индекс указывает номер предшествующего состояния, а второй  номер последующего.</p>

<p><em>Переходной вероятностью \(p_{ij} \)</em> называют условную вероятность того, что из состояния \(S_i\), в котором система оказалась в результате некоторого испытания, безразлично какого номера, в итоге следующего испытания система перейдет в состояние \(S_j\).</p>
  
<p>Так как в каждой строке матрицы перехода помещены вероятности событий перехода из одного и того же состояния в любое возможное, то сумма вероятностей этих событий равна 1. Т.е. сумма значений в каждой строке матрицы должна быть равна 1:</p>
  
 <p class="text-center" >
   \(
\displaystyle\sum_{j=1}^{n} p_{ij} = 1, \quad i = \bar{1,n}
   \)
</p> 
  
<p>Марковский случайный процесс с дискретными состояниями и дискретным временем называют <em>марковской цепью</em>.<br/> 
Для такого процесса моменты \( t_1, t_2, ...\), когда система может менять свое состояние, рассматривают как последовательные шаги процесса, а в качестве аргумента, от которого  <em>зависит процесс</em>, выступает не время \( t\), а  <em>номер шага</em> \( 1, 2, ... , k, ... \).</p>
  
<p>Случайный процесс в этом случае характеризуется последовательностью состояний \( S(0), S(1), S(2), ... , S(k), ... \), где<br/> 
\(S(0)\) - начальное состояние системы (перед первым шагом);<br/> 
\(S(1)\) - состояние системы после первого шага; <br/> 
\(S(k)\) - состояние системы после k-го шага.</p></p>
  
<p><em>Вероятностями перехода системы за \( k \) шагов из \(S_i\) состояния в \(S_j\) </em> называются вероятности \( P_{ij}(k) \) того, что в результате  \( k \) шагов  система перейдет из состояния \( S(0) = S_i \) в состояние \( S(k) = S_j \) \( i, j = 1, 2, ... \).</p>
  
<p>Например, \( P_{36}(8) \) - вероятность того, что за <em>8</em> шагов система перейдет из состояния \(S_3\) в \(S_6\).</p>
<p>Заметим, что при \(n = 1 \) вероятности состояний цепи Маркова \( P_{ij}(1) \) совпадают с переходными вероятностями \( p_{ij} \).  </p>
  
<p>Кроме того, как и в случае (1) должно выполняться равенство:</p>
  
 <p class="text-center" >
   \(
\displaystyle\sum_{j=1}^{n} P_{ij}(k) = 1, \quad i = \bar{1,n}, \quad \forall k \quad\quad (2)
   \)
</p>   
  
  
<p><em>Начальным распределением вероятностей</em> Марковской цепи называется распределение вероятностей состояний в начале процесса:</p>
 <p class="text-center" >  
\(
   p_1(0), p_2(0), ... , p_n(0) \quad\quad (3)
  \). 
</p> 
<p>Если для однородной Марковской цепи заданы начальное распределение вероятностей (3) и матрица P переходных вероятностей (1), то <em>вероятности состояний системы</em> \( p_i(k) (i = 1, 2, . . . ,) \) определяются по рекуррентной формуле:</p> 


 <p class="text-center" >
   \(
p_{i}(k) =  \displaystyle\sum_{j=1}^{n} p_{ji} \cdot p_{j}(k-1) = 1  \quad\quad  (4)
   \)
</p>  
  

<p>Итак, у нас имеются:</p> 
<ul>
<li><p>Вектор \( (p_1(0), p_2(0), ... , p_n(0)) \) начального распределения (3). Это вероятности стартовать из каждого из состояний.</p></li>
<li><p>Переходные вероятности \( p_{ij} \). Это вероятности перейти из состояния \(S_i\)  в \(S_j\) за 1 шаг. Из \( p_{ij} \)  составлена матрица перехода (1).</p></li>
<!--li>Вероятностями перехода за \( k \) шагов   \( P_{ij}(1) \) </li-->
<li><p>Вероятности состояний системы \( p_{i}(k) \). Это вероятности оказаться в состояния \(S_i\) через \( k \) шагов.</p></li>
<li><p>Чудесная формула (4), по которой, зная начальное положение системы, можно рассчитать вероятность оказаться в том или ином состоянии через определённое число шагов.</p></li>
</ul>
 
  
<h2>Моделирование АИС с двумя зависимыми внутренними угрозами с помощью цепи Маркова</h2>  
<p>Пусть дана информационная система с двумя зависимыми внутренними угрозами, орграф которой изображен на рис. 1.</p>
<p>В качестве двух зависимых внутренних угроз могут быть следующие.</p>
<ol>
<li><p>Неквалифицированная политика по управлению информационной безопасностью организации;</p></li>
<li><p>Отсутствие должной квалификации персонала по обеспечению деятельности и управлению информационной безопасностью.</p></li>
</ol>  
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-markovskoy-cepi/16rqoy2/risunok-1-graf-perehodov-sostoyaniy-ais-s-dvumya-zavisimymi-vnutrennimi-ugrozami.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-markovskoy-cepi/16rqoy2/risunok-1-graf-perehodov-sostoyaniy-ais-s-dvumya-zavisimymi-vnutrennimi-ugrozami.jpg" itemprop="contentUrl" alt="Рисунок 1. Граф переходов (состояний) АИС с двумя зависимыми внутренними угрозами." title="Рисунок 1. Граф переходов (состояний) АИС с двумя зависимыми внутренними угрозами."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 1. Граф переходов (состояний) АИС с двумя зависимыми внутренними угрозами.</span>
</div>
   
<p>Данная система моделируется Марковской цепью. Она содержит невозвратные состояния, называемые поглощающими. Из поглощающего состояния нельзя перейти
ни в какое другое. На графе поглощающему состоянию соответствует вершина, из которой не выходит ни одна дуга. Поглощающему состоянию соответствует вероятность, равная 1.</p>
  

  
<p>Пусть наша система может находиться в одном из четырех состояний:</p>
<ul>
<li><p>\(S_1\) - состояние, в котором внутренние угрозы ИБ не проявились,</p></li>
<li><p>\(S_2\) - состояние, в котором первая внутренняя угроза ИБ проявилась с вероятность \(p_{12}\),</p></li>
<li><p>\(S_3\) - состояние, в котором вторая внутренняя угроза ИБ проявилась с вероятность \(p_{13}\),</p></li>
<li><p>\(S_4\) - поглощающее состояние, в котором внутренние угрозы ИБ реализовались с вероятностями \(p_{24}\) и \(p_{34}\) соответственно.</p></li>
</ul>  
  

<p>Для данной системы у нас заданы:</p> 
<ul>
<li><p>Вектор начального распределения:</p>
<p class="text-center" >  
  \( (p_1(0), p_2(0), p_3(0) , p_4(0)) = (1, 0, 0, 0) \)
</p>  
<p>То есть, при запуске, мы стартуем всегда из 1-го состояния.</p>  
  </li>
<li><p>Матрица перехода:</p>
 
 <p class="text-center" >
    \begin{matrix}
 P= {  \begin{pmatrix} 0,2 & 0,3 & 0,5 & 0 \\ 0,4 & 0 & 0,3 & 0,3 \\ 0,1 & 0,4 & 0 & 0,5 \\ 0 & 0 & 0 & 1 \end{pmatrix} } 
   \end{matrix} 
</p> 
  </li>
</ul>
 
<p>А выяснить мы хотим вероятности состояний информационной системы через три шага, воспользовавшись формулой (4).</p> 


<p>Приступим к реализации на scilab пошагового моделирования марковского процесса.</p> 
<p>Зададим вектор начального распределения Po  и матрицу вероятностей перехода P.</p> 
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-markovskoy-cepi'>http://inclab.ru/articles/realizaciya-markovskoy-cepi</a></b></p>  
<span class="image-description text-italic">Задание начального вектора и матрицы состояний.</span>
</div>	  
  
  
<p>А далее итерационно воспользуемся формулой (4), бережно сохранив промежуточные результаты в Y.</p> 
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-markovskoy-cepi'>http://inclab.ru/articles/realizaciya-markovskoy-cepi</a></b></p>  
<span class="image-description text-italic">Реализация подсчета вероятности оказаться в каждом из состояний на 3-м шаге.</span>
</div>	  
  
<p>В консоли можно наблюдать за изменением вероятностей оказаться в каждом из 4-х состояний на 1,2 и 3-м шагах:</p>   
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-markovskoy-cepi/4rttvk/risunok-2-izmenenie-veroyatnostey-sostoyaniya-na-kazhdom-shage.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-markovskoy-cepi/4rttvk/risunok-2-izmenenie-veroyatnostey-sostoyaniya-na-kazhdom-shage.jpg" itemprop="contentUrl" alt="Рисунок 2. Изменение вероятностей состояния на каждом шаге." title="Рисунок 2. Изменение вероятностей состояния на каждом шаге."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 2. Изменение вероятностей состояния на каждом шаге.</span>
</div>
     
<p>Если же число шагов увеличить до 10, то можно наблюдать, как система все вероятнее перейдёт в поглошающее 4-е состояние.</p>   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-markovskoy-cepi/g3glc3/risunok-3-s-rostom-chisla-ispytaniy-veroyatnost-okazatsya-v-s4-vozrastaet.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-markovskoy-cepi/g3glc3/risunok-3-s-rostom-chisla-ispytaniy-veroyatnost-okazatsya-v-s4-vozrastaet.jpg" itemprop="contentUrl" alt="Рисунок 3. С ростом числа испытаний, вероятность оказаться в S4 возрастает." title="Рисунок 3. С ростом числа испытаний, вероятность оказаться в S4 возрастает."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 3. С ростом числа испытаний, вероятность оказаться в S4 возрастает.</span>
</div>  
<p>Отдельно стоит отметить, что сумма элементов вектора = 1.</p>   
  
<p>Для пущей наглядности сходимости вероятностей, построим графики зависимости вероятностей Pj от числа шагов.</p> 
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-markovskoy-cepi'>http://inclab.ru/articles/realizaciya-markovskoy-cepi</a></b></p>  
<span class="image-description text-italic">Построение графиков в 2d и 3d вариантах.</span>
</div>	  
  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-markovskoy-cepi/16lz6f5/risunok-3-raspredelenie-veroyatnostey-sostoyaniy-v-zavisimosti-ot-shaga.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-markovskoy-cepi/16lz6f5/risunok-3-raspredelenie-veroyatnostey-sostoyaniy-v-zavisimosti-ot-shaga.jpg" itemprop="contentUrl" alt="Рисунок 3. Распределение вероятностей состояний в зависимости от шага." title="Рисунок 3. Распределение вероятностей состояний в зависимости от шага."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 3. Распределение вероятностей состояний в зависимости от шага.</span>
</div>  

<h2>Серия экспериментов для цепи Маркова, граф которой изображён на рис.1</h2>    
<p>Посмотрим, действительно ли состояние 4 будет являться поглощающим в различных условиях. Для этого сгенерируем 9 случайных векторов состояний и, стартуя каждый раз из 1-го состояния, промоделируем поведение Марковской цепи с заданной матрицей перехода на протяжении 10-ти шагов.</p> 
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-markovskoy-cepi'>http://inclab.ru/articles/realizaciya-markovskoy-cepi</a></b></p>  
<span class="image-description text-italic">Реализация подсчета вероятности оказаться в каждом из состояний на 3-м шаге.</span>
</div>

<p>Ниже моделирование цепи повторяется 9 раз.</p> 
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/realizaciya-markovskoy-cepi'>http://inclab.ru/articles/realizaciya-markovskoy-cepi</a></b></p>  
<span class="image-description text-italic">Серия экспериментов для цепи Маркова.</span>
</div>

<p>В результате проведённых экспериментов, можно удостовериться, что попав в 4-е состояние, выбраться из него уже не удаётся.</p> 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/realizaciya-markovskoy-cepi/13y2wtc/risunok-4-modelirovanie-cepi-markova-dlya-ais-s-2-mya-ugrozami.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/realizaciya-markovskoy-cepi/13y2wtc/risunok-4-modelirovanie-cepi-markova-dlya-ais-s-2-mya-ugrozami.jpg" itemprop="contentUrl" alt="Рисунок 4. Моделирование цепи Маркова для АИС с 2-мя угрозами." title="Рисунок 4. Моделирование цепи Маркова для АИС с 2-мя угрозами."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 4. Моделирование цепи Маркова для АИС с 2-мя угрозами.</span>
</div>  


<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/realizaciya-markovskoy-cepi'>http://inclab.ru/articles/realizaciya-markovskoy-cepi</a><p>]]></description>
			<pubDate>Sun, 08 May 2022 21:02:40 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Динамическая управляемая система с наблюдателес xcos]]></title>
			<link>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</link>
			<guid>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</guid>
			<description><![CDATA[<img src="http://inclab.ru" /><p>Итак, на данный момент читатель последовательно прошёл путь от создания простейшей блок-схемы Xcos, состоящей всего из трёх блоков, до визуального моделирования полноценных управляемых динамических систем, описываемых матричными уравнениями.</p>

<p>В настоящем параграфе будет затронута ещё одна задача математического моделирования &ndash; построение дискретного наблюдателя в системе дифференциальных матричных уравнений.</p>
<p>Данная задача особенно актуальна, так как при моделировании управляющего воздействия динамической системы, как бы удобно ни было управлять состоянием \( x\), его измерение, чаще всего не доступно. Поэтому на практике для управляемых динамических систем строится специальный наблюдатель \( y\), который сам по себе представляет динамическую систему.</p>

<h2>Построение непрерывного наблюдателя</h2>
<p>Построение системы наблюдения происходит так, чтобы на вход наблюдателя подавались значения&nbsp; \( u,y\), а на выходе формировался бы сигнал \( \hat{x} \). При этом, матрицы системы наблюдения должны быть подобраны таким образом, чтобы разность \( x-\hat{x} \) стремилась бы к нулю не зависимо от выбранных начальных условий или самого вида наблюдателя. Отличительной особенностью наблюдателей такого рода, является устойчивость к возмущениям.</p>
<p>Отметим также, что при выборе коэффициентов усиления наблюдателя необходимо поддерживать баланс между скоростью и точностью сходимости моделируемого движения к программному и чрезмерной чувствительностью к начальным отклонениям.</p>
<p>Рассмотрим пример построения линейного наблюдателя для динамической системы, описываемой в пространстве состояний матричными дифференциальными уравнениями вида:</p>


<p class="text-center">  
(1)  \[   
     \begin{cases}
       \dot x = Ax+Bu\\
       \dot y = Cx\\
     \end{cases}
\]
</p>
<p>где \(A, B, C\) - матрицы с постоянными коэффициентами.</p>
<p>Непрерывный наблюдатель в данном случае, строится следующим образом:</p>

<p class="text-center">  
(2) \[  \dot{\hat{x}} = A\hat{x}+Bu+K(y-C\hat{x})\]
</p>

<p>при этом, элементы матрицы усиления \( K \)  выбираются так, чтобы матрица \( H=A-KC \)  была бы устойчивой, то есть, все собственные значения матрицы \( H \) должны иметь отрицательные действительные части.<br/> 
  Построение матрицы \( H \) становится очевидным, если в (1) раскрыть скобки:</p>
<p class="text-center">  
\[  \dot{\hat{x}} = A\hat{x}+Bu+Ky-KC\hat{x} = (A-KC)\hat{x} + Bu + Ky \]
</p>  
  
<p>Далее определнмся, почему требование устойчивости матрицы \( H \) обеспечивает сходимость к нулю разности \( x-\hat{x} \) .</p>

<p>Введём обозначение  \( \widetilde{x} = x-\hat{x} \), тогда \( \dot{\widetilde{x}} = \dot{x}-\dot{\hat{x}} \). Из системы (1) имеем:</p>

<p class="text-center">  
\[  \dot{x} = Ax+Bu, y=Cx \]
</p>

<p>В уравнении (2), раскрывая скобки, получим:</p>

<p class="text-center">  
\[  \dot{\hat{x}} = A\hat{x}+Bu+Ky-KC\hat{x}  \]
</p>
<p>Теперь вычислим \( \dot{\widetilde{x}} \)  :</p>

<p class="text-center">  
\[  \dot{\widetilde{x}} = \dot{x}-\dot{\hat{x}} = Ax+Bu - (A\hat{x}+Bu+Ky-KC\hat{x} ) = A - A\hat{x} - Ky + KC\hat{x}= \]
\[ = A(x-\hat{x}) - KCx + KC\hat{x}=  A(x-\hat{x}) - KC(x-\hat{x}) = (A- KC)\widetilde{x}\]
</p>

<p>Таким образом, приходим к однородной системе матричных дифференциальных уравнений с постоянными коэффициентами вида: </p>
<p class="text-center">  
\[  \dot{\widetilde{x}}  = (A-KC) \widetilde{x}, \quad\quad \text{или} \quad\quad \dot{\widetilde{x}}  = H \widetilde{x} \]
</p>

<p>об устойчивость решения \( \widetilde{x} \)   которой, можно судить по виду корней  соответствующего характеристического уравнения \( \chi (\lambda) = |H-\lambda E| \).</p>
<p>Итак, с обоснованием корректности построения описанного непрерывного наблюдателя покончено, перейдём теперь к реализации блок-схемы Xcos.</p>
<p>Для моделирования системы (24) с непрерывным наблюдателем (25) потребуются блоки <strong>GENSIN</strong><strong>_</strong><strong>f</strong> и <strong>CLOCK</strong><strong>_</strong><strong>c</strong> с палитры &laquo;<strong>Источники сигналов и воздействий</strong>&raquo;, блоки <strong>CS</strong><strong>С</strong><strong>OPE</strong> и <strong>END</strong> с палитры &laquo;<strong>Регистрирующие устройства</strong>&raquo;, и блок <strong>CLSS</strong> с палитры &laquo;<strong>Системы с непрерывным временем</strong>&raquo;.</p>

<p>Моделирование данной системы подразумевает задание матриц \( A, B, C, D \) , которые используются в блоке <strong>CLSS</strong>. В нашем случае все элементы матриц  некоторые случайные константы, поэтому мы можем их задать в контексте с помощью генератора случайных чисел с некоторыми поправками.</p>

  <p>Для начала зададим размерности матрицы в контексте:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
<span class="image-description text-italic">Количество строк и столбцов матриц в контексте Xcos</span>
</div>	
 <p>и сгенерируем матрицу   размерности nxn:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>Для того, чтобы избежать экспоненциальной неустойчивости рассматриваемой системы, изменим матрицу \( A\)  так, чтобы каждый из её элементов, стоящих на главной диагонали, не превышал бы собственного значения с максимальной действительной частью \( \widetilde{\lambda} \).<br/> Введём обозначение \( \widetilde{\lambda} = max_{j}{(Re(\lambda_j))} \) , тогда матрица  \( \widetilde{A}\) будет вычисляться как  \( \widetilde{A} = A- \widetilde{\lambda}E \). В контексте данное равенство реализуется следующим образом:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	


<p>где функция <em>spec(A)</em> &ndash; вычисляет собственные значения матрица , функция <em>real()</em> &ndash; выделяет действительную часть своего аргумента, функция <em>max()</em> вычисляет максимальное из поданных в неё значений, а <em>eye()</em> &ndash; генерирует единичную матрицу совместной размерности.</p>

<p>Далее сгенерируем матрицы совместных размерностей  \( B, C, D \):</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>И вектор-столбец \( x^0 \)  случайных начальных условий: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>Для генерации матрицы усиления воспользуемся встроенной Scilab &ndash; функцией <em>ppol</em><em>(</em><em>A</em><em>,</em><em>B</em><em>,</em><em>v</em><em>),</em> которая по заданным матрицам \( A,B \) и вектору полюсов  \( v \) подбирает элементы матрицы  \( K \) так, чтобы собственные значения матрицы  \(A-BK\) были бы полюсами.<br/> Однако для нашего наблюдателя должно выполняться то же условие, но для уравнения  \( A-KC \), поэтому в контекст необходимо добавить строку:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>где символ &laquo;\( ' \) &raquo; означает транспонирование матрицы, а функция <em>ones</em><em>()</em> возвращает матрицу составленную из единиц того же размера, что и вектор \( x^0 \).</p>
<p>Теперь необходимо собрать все сгенерированные матрицы в систему, что делается с помощью функции <em>syslin</em><em>(dom,A,B,C [,D [,x0] ]), </em>которая генерирует систему вида</p>

<p class="text-center">  
 \[   
     \begin{cases}
       s \cdot x = Ax+Bu\\
       y = Cx + Du\\
  		x(0)=X0\\
     \end{cases} 
\]
</p>

соответственно, в контекст необходимо прописать:
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>После задания в контексте всех необходимых параметров системы, нужно перейти к редактированию внутренних параметров блока <strong>CLSS</strong><strong>, </strong>где необходимо задать правильные матрицы: </p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/a7bnow/risunok-101-vnutrennie-parametry-bloka-clss-pri-modelirovanii-sistemy-1---2.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/a7bnow/risunok-101-vnutrennie-parametry-bloka-clss-pri-modelirovanii-sistemy-1---2.jpg" itemprop="contentUrl" alt="Рисунок 101.Внутренние параметры блока  CLSS при моделировании системы (1)-(2) " title="Рисунок 101.Внутренние параметры блока  CLSS при моделировании системы (1)-(2) "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 101.Внутренние параметры блока  CLSS при моделировании системы (1)-(2) </span>
</div>   


<p>Блок схема, реализующая моделирование системы имеет несложный вид:
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/fqvez4/risunok-102a-blok-shema-sistemy-s-nepreryvnym-nablyudatelem.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/fqvez4/risunok-102a-blok-shema-sistemy-s-nepreryvnym-nablyudatelem.jpg" itemprop="contentUrl" alt="Рисунок 102а.Блок-схема системы с непрерывным наблюдателем " title="Рисунок 102а.Блок-схема системы с непрерывным наблюдателем "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 102а.Блок-схема системы с непрерывным наблюдателем </span>
</div>  
  
  
<p>Результат моделирования представлен на рисунке 102(б):</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/txq4kv/risunok-102b-grafiki-3-h-fazovyh-peremennyh-i-dvumernyy-nablyudatel.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/txq4kv/risunok-102b-grafiki-3-h-fazovyh-peremennyh-i-dvumernyy-nablyudatel.jpg" itemprop="contentUrl" alt="Рисунок 102б. Графики 3-х фазовых переменных и двумерный наблюдатель" title="Рисунок 102б. Графики 3-х фазовых переменных и двумерный наблюдатель"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 102б. Графики 3-х фазовых переменных и двумерный наблюдатель</span>
</div>  

  
<h2>Построение дискретного наблюдателя</h2>
<p>В связи с тем, что в параграфе упоминается наблюдатель дискретный, то вполне предсказуемым шагом является модернизация блок-схемы (рис. 102 а)) таким образом, чтобы использовать в ней дискретный наблюдатель.</p>
<p>Построение дискретного наблюдателя подчиняется тем же правилам, что непрерывного, основанных на получении полюсов в качестве собственных значений матрицы  \(H = A-KC \). </p>
  
 <p>Поэтому алгоритм, прописанный на данный момент в контексте рабочей области, полностью удовлетворяет нашим требованиям. Остаётся только задать шаг дискретизации и дикретизировать полученную систему \( SYST \) . Для этого добавьте в контекст строки:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>где Scilab-функция <em>dscr</em><em>()</em> производит дискретизацию непрерывной системы  \( SYST \)  с указанным шагом , \( dt \)  а встроенная функция <em>abcd</em><em>() </em>возвращает 4 матрицы  \( A,B,C,D \) , использующиеся в поданной на вход дискретной системе и записывает их в соответствующие выходные матрицы  \( Ad, Bd, Cd, Dd \) .<br/> В итоге контекст должен принять вид:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a></b></p>
</div>	

<p>Для внедрения дискретного наблюдателя воспользуемся блоком  <img src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/ro40zf/dinamicheskaya-upravlyaemaya-sistema-s-nablyudateles-xcos.jpg"> с палитры &laquo;<strong>Системы с дискретным временем</strong>&raquo;. Кроме того нам понадобятся блоки <strong>MUX</strong> и <strong>DEMUX</strong> с палитры &laquo;<strong>Маршрутизация сигналов</strong>&raquo; и блок сумматора <strong>BIGSOM</strong><strong>_</strong><strong>f</strong> &nbsp;с палитры &laquo;<strong>Математические операции</strong>&raquo;. Блок-схема реализующая математическое моделирование системы дифференциальных уравнений с дискретным наблюдателем, представлена на рис. 103</p>

 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/2i0qaf/risunok-103-realizaciya-dinamicheskoy-sistemy-s-diskretnym-nablyudatelem-v-xcos.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/2i0qaf/risunok-103-realizaciya-dinamicheskoy-sistemy-s-diskretnym-nablyudatelem-v-xcos.jpg" itemprop="contentUrl" alt="Рисунок 103. Реализация динамической системы с дискретным наблюдателем в Xcos" title="Рисунок 103. Реализация динамической системы с дискретным наблюдателем в Xcos"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 103. Реализация динамической системы с дискретным наблюдателем в Xcos</span>
</div>  

<p>Внутренние параметры блока дискретной линейной системы DLSS представлены на рис. 104 </p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/1hlo96m/risunok-104-vnutrennie-parametry-bloka-dlss-pri-modelirovanii-diskretizirovannoy-sistemy-1---2.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/1hlo96m/risunok-104-vnutrennie-parametry-bloka-dlss-pri-modelirovanii-diskretizirovannoy-sistemy-1---2.jpg" itemprop="contentUrl" alt="Рисунок 104. Внутренние параметры блока  DLSS при моделировании дискретизированной системы (1)-(2)" title="Рисунок 104. Внутренние параметры блока  DLSS при моделировании дискретизированной системы (1)-(2)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 104. Внутренние параметры блока  DLSS при моделировании дискретизированной системы (1)-(2)</span>
</div>  
  
  
<p>Результат моделирования линейной динамической системы с дискретным наблюдателем представлен на рис. 105.  </p>
  
   <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/17cbqhq/risunok-105-fazovye-koordinaty-i-diskretnyynablyudatel-dinamicheskoy-sistemy.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos/17cbqhq/risunok-105-fazovye-koordinaty-i-diskretnyynablyudatel-dinamicheskoy-sistemy.jpg" itemprop="contentUrl" alt="Рисунок 105. Фазовые координаты и дискретныйнаблюдатель динамической системы" title="Рисунок 105. Фазовые координаты и дискретныйнаблюдатель динамической системы"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 105. Фазовые координаты и дискретныйнаблюдатель динамической системы</span>
</div>  
  
  

  
  
  
  
  
  
  
  
  
  
  
  
<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos'>http://inclab.ru/articles/modelirovanie-upravlyaemoy-sistemy-v-scilab-xcos</a><p>]]></description>
			<pubDate>Mon, 10 Jan 2022 18:18:52 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Моделирование динамических систем в матричном виде]]></title>
			<link>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</link>
			<guid>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</guid>
			<description><![CDATA[<img src="http://inclab.ru" /><p>Ранее были рассмотрены несколько подходов к визуальному моделированию динамических систем, а именно:</p>
<ul>
<li><p><a href="http://inclab.ru/xcos/reshenie-differencialnogo-uravneniya-2-oy-stepeni">в виде последовательного интегрирования,</a></p></li>
<li><p><a href="http://inclab.ru/xcos/svedenie-k-sisteme-v-forme-koshi">в виде системы дифференциальных уравнений,</a></p></li>
<li><p><a href="http://inclab.ru/xcos/zamknutaya-sistema-upravleniya-scilab-xcos">и через передаточную функцию \( H(s)\)</a>.</p></li>
</ul>
<p>В данном материале будет рассмотрен подход к построению блок-схемы динамических систем, которые описываются матричными уравнениями. В связи с тем, что Scilab разрабатывается, как <em>матрично-ориентированное программное обеспечение</em>, представление динамических систем именно в матричном, а не покоординатном виде &ndash; есть наиболее оптимальный способ решения поставленных задач, потому что сам инструмент под это заточен, да и использование матриц и векторов позволяет избежать некоторых ошибок, которые бы имели место быть при их реализации с использованием других подходов.</p>

<h2>Немного теории</h2>
<p>В современной теории управления далеко не редкость -&nbsp; представление динамических систем в виде пространства состояний, так как это позволяет избежать ограничений, накладываемых на передаточные функции, использование которых присуще классическому подходу для решения задач управления.&nbsp;</p>
<p>Модель системы, построенная в <em>пространстве состояний</em> предполагает использование <em>ОДУ первого порядка</em>. Если же для описания процесса функционирования рассматриваемой системы требуется использование дифференциальных уравнений порядка выше 1, каждое из таких уравнений сводится в совокупности ОДУ первого порядка, что всегда возможно, как было сделлано с помощью <a href="http://inclab.ru/beginner/reshenie-differencialnih-uravnenij-v-scilab">пользовательских функций Scilab</a> и  <a href="http://inclab.ru/xcos/svedenie-k-sisteme-v-forme-koshi">блоков Xcos</a>.</p>
<p>При этом, переменные, которые используются для составления дифференциальных уравнений, называются фазовыми координатами и полностью описывают динамическую систему и её реакцию на определённые входные данные. Число фазовых переменных равняется порядку ОДУ, описывающему динамическую систему. Кроме того, фазовые переменные &ndash; это как раз те переменные, для которых задаются начальные условия, число которых, как известно, также, совпадает со степенью исходного ОДУ.</p>
<p>Модель пространства состояний формируется из уравнений входа и выхода, где для случая управляемой линейной системы из \(n\)&nbsp;переменных состояния, имеющей&nbsp; \(p\) входов и \(q\) выходов, матричные уравнения имеют вид:</p>

<p class="text-center">  
(1)  \[   
     \begin{cases}
       \dot x(t) = A(t)x(t)+B(t)u(t)\\
       \dot y(t) = C(t)x(t)+D(t)u(t)\\
     \end{cases}
  \quad\quad\text{где} \quad x(t)\in \mathbb{R}^n, y(t)\in \mathbb{R}^q, u(t)\in \mathbb{R}^p
\]
</p>


<p>\(x=(x_1,x_2,...,x_n)^T \) - вектор состояния, элементы которого называются состояниями системы,<br/> 
  \(y=(y_1,y_2,...,y_q)^T \)- вектор выхода, <br /> 
  \(u=(u_1,u_2,...,u_p)^T \)- вектор управления, <br/>
  \( A_{n\times n} \)- матрица системы, <br /> 
  \( B_{n\times p} \)- матрица управления, <br /> 
  
  \( C_{n\times q} \)- матрица выхода, <br /> 
  \( D_{q\times p} \)- матрица прямой связи.</p>
<p>Структурная схема описанной системы представлена на рис. 89.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1yvdgp9/risunok-89-strukturnaya-shema-nepreryvnoy-lineynoy-dinamicheskoy-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1yvdgp9/risunok-89-strukturnaya-shema-nepreryvnoy-lineynoy-dinamicheskoy-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 89. Структурная схема непрерывной линейной динамической системы (1)" title="Рисунок 89. Структурная схема непрерывной линейной динамической системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 89. Структурная схема непрерывной линейной динамической системы (1)</span>
</div>  

  
<h2>Управление грузом на пружине с демпфером</h2>
<p>Разобравшись с терминологией, перейдём к примерам. Рассмотрим груз массы \(m\)&nbsp;с закреплённой пружиной жёсткости \(k\)&nbsp;и демпфером с коэффициентом демпфирования \(c\), движение которого осуществляется при помощи силы&nbsp;\(F\) &nbsp;(см. рис. 90)</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/qlhmx7/risunok-90-peredvigaemyy-gruz-s-pruzhinoy-i-dempferom.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/qlhmx7/risunok-90-peredvigaemyy-gruz-s-pruzhinoy-i-dempferom.jpg" itemprop="contentUrl" alt="Рисунок 90. Передвигаемый груз с пружиной и демпфером" title="Рисунок 90. Передвигаемый груз с пружиной и демпфером"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 90. Передвигаемый груз с пружиной и демпфером</span>
</div>   

<p>Уравнения движения описанного груза имеют вид:</p>
<p class="text-center">  
(2)  \[   
    F-kx-c\frac{dx}{dt}-m\frac{d^2x}{dt^2}=0
\]
</p>

<p>В принципе, уравнения (2) уже достаточно, чтобы собрать его блок-схему с использованием подходов, рассмотренных ранее. Однако наша цель &ndash; матрицы, которые на данном этапе не видны.</p>
<p>Прежде всего, определим, степень рассматриваемого уравнения. Наибольшая производная, фигурирующая в (2) &ndash; второго порядка, стало быть, перед нами ОДУ 2-го порядка.</p>
<p>В <a href="http://inclab.ru/xcos/svedenie-k-sisteme-v-forme-koshi">статье</a> рассматривался способ решения подобного дифференциального уравнения, путём сведения его к системе. Этот подход и лежит в основе представления динамической системы в пространстве состояний. Вспомним, что мы делали:<br/> 1) переписывали уравнения так, чтобы слева от знака равно осталась наивысшая производная,<br/> 2) делали замену и получали систему. <br/>Приступим. Преобразуем (2) к желаемому виду:</p>
<p class="text-center">  
(3)  \[   
    \ddot{x}=\frac{1}{m}\left( -c\dot x-kx+F \right)
\]
</p>


<p>Вопрос, сколько получится ОДУ первой степени из ОДУ 2-й степени? Правильно, два. Вторая степень уравнения, - два уравнения в системе. А как получить эти два уравнения? Правильно, ввести переменные состояния . Вторая степень уравнения &ndash; две переменных состояния. Введём замену:</p>

<p class="text-center">  
(4)\[   
     \begin{cases}
       z_1 = x\\
       z_2 = \dot x\\
     \end{cases}
  \quad\quad \Rightarrow
       \begin{cases}
       \dot z_1 = \dot x\\
       \dot z_2 = \ddot x\\
     \end{cases}
  
\]
</p>

<p>Итак, исходно обыкновенное дифференциальное уравнение второй степени (2), путём замены (4) сводится к системе из двух ОДУ первой степени:</p>


<p class="text-center">  
(5)\[   
      \begin{cases}
       \dot z_1 = z_2\\
       \dot z_2 = \frac{1}{m}\left( -cz_2-kz_1+F \right) \\
     \end{cases}
  \]
</p>

<p>На первый раз, раскроем скобки в (5) и запишем фазовые переменные друг под другом:</p>


<p class="text-center">  
\[   
      \begin{cases}
       \dot z_1 = \quad 0\cdot z_1 + \;\;\;1\cdot z_2 + 0\cdot F\\
       \dot z_2 = -\frac{k}{m}\cdot z_1 -\frac{c}{m}\cdot z_2 + \frac{1}{m}\cdot F  \\
     \end{cases}
  \]
</p>

<p>Запишем систему (5) в матричной форме:</p>

<p class="text-center">  
(6) \[   
\begin{pmatrix}
\dot z_1 \\
\dot z_2
\end{pmatrix} = 
\begin{pmatrix}
0 & 1 \\
-\frac{k}{m} & -\frac{c}{m}
\end{pmatrix}  

\begin{pmatrix}
 z_1 \\
 z_2
\end{pmatrix}  +
  \begin{pmatrix}
 0 \\
 \frac{1}{m}
\end{pmatrix}  F
    \]
</p>
<p>Теперь, мы с лёгкостью можем определить матрицу состояний: </p>

<p class="text-center">  
\[ A_{2\times 2}=   
\begin{pmatrix}
0 & 1 \\
-\frac{k}{m} & -\frac{c}{m}
\end{pmatrix}  
    \]
</p>
 
<p>и матрицу управления: </p>

<p class="text-center">  
 \[  B_{2\times 1}= 
  \begin{pmatrix}
 0 \\
 \frac{1}{m}
\end{pmatrix}  
    \]
</p>

<p>Для определения выходного вектора \( y \) и матриц \( C,D \) , нужно обозначить величину, измеряемую на выходе. Допустим, мы хотим измерять положение груза, следовательно, выходное уравнение будет иметь вид: </p>
<p class="text-center">  
\( y=z_1 \)
</p>

<p>соответственно, в матричной форме: </p>
<p class="text-center">  
\[   
\begin{pmatrix}
 y_1 \\
 y_2
\end{pmatrix} = 
  \underbrace{
\begin{pmatrix}
1 & 0 \\
0 & 0
\end{pmatrix}  
}_\text{C}
\begin{pmatrix}
 z_1 \\
 z_2
\end{pmatrix}  +
  \underbrace{
  \begin{pmatrix}
 0 \\
 0
\end{pmatrix}
  }_\text{D} F
    \]
</p>

<p>В итоге, получим следующую динамическую модель движущегося груза в пространстве состояний:</p>


<p class="text-center">  
(7) \[   
 \begin{cases}  
  	\dot z =
\begin{pmatrix}
0 & 1 \\
-\frac{k}{m} & -\frac{c}{m}
\end{pmatrix} z + 

  \begin{pmatrix}
 0 \\
 \frac{1}{m}
\end{pmatrix}  F \\
  
  y=
    \begin{pmatrix}
 1 & 0
\end{pmatrix}  z
   \end{cases}
    \]
 
</p>


<p>Последний штрих, перед тем, как перейти к визуальному моделированию  указать начальные условия для системы (7). Напомним, число н.у.=числу переменных состояния=порядку исходного ДУ. Мы рассматриваем уравнение второго порядка, следовательно, необходимо задать два начальных условия  для каждой из фазовых переменных:  \( z_{1}^{0}=0, z_{2}^{0}=0 \)</p>

<h2>Перейдём к построению блок-схемы тележки с демпфером в Xcos </h2>

<ol>
<li><p>Для задания динамической системы в формате (7) используется блок <img class="image-seftcontainer" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/25plpl/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide.jpg" alt="Моделирование динамических систем в матричном виде" title="Моделирование динамических систем в матричном виде"/>
 с вкладки &laquo;<strong>Системы с непрерывным временем</strong>&raquo;. Во внутренних параметрах данного блока нужно в Scilab- формате задания матриц и векторов, записать соответствующие матрицы. Мы не будем прибегать к непосредственной записи матриц в блоке, а зададим их в контексте, чтобы в дальнейшем в параметрах блока <strong>CLSS</strong> использовать только соответствующие переменные.</p></li>
  
<li><p>Откройте на редактирование контекст рабочей области и задайте матрицы и вектора, используемые в системе (7), особое внимание стоит уделить форме задания строки \(C\):</p>
  
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a></b></p>
<span class="image-description text-italic">Векторно-матричные элементы системы (7) в контексте Xcos</span>
</div>	  
 </li>

<li><p>Далее в контексте необходимо задать начальные условия \( z_{1}^{0}=0, z_{2}^{0}=0 \)  в виде вектор-строки:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a></b></p>
<span class="image-description text-italic">Задание начальных условий в контексте Xcos</span>
</div>
 </li>

<li><p>И указать параметры системы: </p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a></b></p>
<span class="image-description text-italic">Задаём переменные в контексте Xcos</span>
</div>
 </li>

<li><p>После чего, необходимо сохранить контекст и заполнить поля внутренних параметрах блока <strong>CLSS</strong><strong> , как показано на рис. 91. </strong></p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1tt8uf6/risunok-91-zadanie-vnutrennih-parametrov-bloka-clss-s-pomoschyu-peremennyh-iz-konteksta.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1tt8uf6/risunok-91-zadanie-vnutrennih-parametrov-bloka-clss-s-pomoschyu-peremennyh-iz-konteksta.jpg" itemprop="contentUrl" alt="Рисунок 91. Задание внутренних параметров блока CLSS с  помощью переменных из контекста" title="Рисунок 91. Задание внутренних параметров блока CLSS с  помощью переменных из контекста"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 91. Задание внутренних параметров блока CLSS с  помощью переменных из контекста</span>
</div>  

 </li>


<li><p>Для дальнейшего построения блок-схемы потребуются 4 блока: <strong>CLOCK</strong><strong>_</strong><strong>c</strong><strong>, </strong><strong>END</strong><strong>, </strong><strong>CSCOPE</strong> и блок <img class="image-seftcontainer" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1ec31rr/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide.jpg" alt="Моделирование динамических систем в матричном виде" title="Моделирование динамических систем в матричном виде"/>
<strong>, </strong>который находится на палитре<strong> &laquo;Источники сигналов и воздействий&raquo;. </strong>Блоки необходимо связать между собой соединительными линиями, как показано на рис. 92, настроить параметры осциллографа и запустить моделирование на 22с.<strong>&nbsp; </strong></p>
  
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1piv9vp/risunok-92-blok-shema-sistemy-7.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1piv9vp/risunok-92-blok-shema-sistemy-7.jpg" itemprop="contentUrl" alt="Рисунок 92.  Блок-схема системы (7)" title="Рисунок 92.  Блок-схема системы (7)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 92.  Блок-схема системы (7)</span>
</div>  

  </li>
</ol>


<p>В результате моделирования на экране появится график затухающих синусоидальных колебаний, соответствующий переменной  \(z_1\), то есть, координате  передвигаемого груза (рис. 93). </p>


  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/xkpvav/risunok-93-traektoriya-vyhoda-koordinata-gruza-sistemy-7.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/xkpvav/risunok-93-traektoriya-vyhoda-koordinata-gruza-sistemy-7.jpg" itemprop="contentUrl" alt="Рисунок 93. Траектория выхода (координата груза) системы (7)" title="Рисунок 93. Траектория выхода (координата груза) системы (7)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 93. Траектория выхода (координата груза) системы (7)</span>
</div>  


<p>Блок <strong>STEP</strong><strong>_</strong><strong>FUNCTION</strong> функционирует согласно правилу<strong>:</strong></p>
<p class="text-center">  
 \[  step_f(t)= 
 \begin{cases}  
  	s_0, \quad t < t_0 \\
    s_f, \quad t > t_0 \\
   \end{cases}
    \]
 </p>
<p>где \(t_0, s_0,s_f\) - параметры, которые задаются во <strong>внутренних параметрах блока</strong> <strong>STEP</strong><strong>_</strong><strong>FUNCTION</strong> следующим образом<strong>:</strong></p>
<ul>
<li><p>\(t_0\)- это параметр <strong>Start Time,</strong></p></li>
<li><p>\(s_0\)- это параметр <strong>Initial Value,</strong></p></li>
<li><p>\(s_f\)- это параметр <strong>Final Value</strong>.</p></li>
</ul>
<p>В нашем случае, параметры у блока <strong>STEP</strong><strong>_</strong><strong>FUNCTION</strong> остались выставленные по умолчанию, поэтому, он на протяжении 1сек. подаёт на <strong>выход</strong> значение<strong> &laquo;0&raquo;, </strong>а в последующие моменты времени &ndash; значение<strong> &laquo;1&raquo;, </strong>что прослеживается на графике (рис. 93).</p>


<h2>Выводим график скорости груза</h2>
<p>После запуска моделирования возникает справедливый вопрос, а почему переменная только одна и как же вывести фазовый портрет системы?</p>
<p>Прежде всего, отметим, что на выход блока <strong>CLSS </strong>подаётся переменная \(y\),&nbsp; которая формируется, как выход системы (7). Обратимся к системе (7) и её уравнению выхода</p>

<p class="text-center">  
\[   
\begin{pmatrix}
 y_1 \\
 y_2
\end{pmatrix} = 
  \underbrace{
\begin{pmatrix}
1 & 0 \\
0 & 0
\end{pmatrix}  
}_\text{C}
\begin{pmatrix}
 z_1 \\
 z_2
\end{pmatrix}  
    \]
</p>

<p>где не обнуляется только фазовая переменная \(z_1\), соответствующая переменной выхода с координатой \(y_1\)&nbsp;. Становится понятно, что, собственно, хотели получить на выходе \(y\)&nbsp;- то и получили &ndash; переменную состояния \(z_1\), которая отвечает за положение груза \(x\). Но мы сами настроили выход таким образом, а значит, его можно изменить.</p>
<p>Если бы нам потребовалось, например, построить график скорости груза, а скорость, -это, как известно &ndash; \(\dot x\) , то и в уравнении выхода нужно было бы обращаться к фазовой переменной \(z_2\), отвечающей за скорость. Следовательно, уравнение выхода в системе (7) для случая вывода скорости грузу, преобразуется к виду 
<p class="text-center">  
\[   
\begin{pmatrix}
 y_1 \\
 y_2
\end{pmatrix} = 
  \underbrace{
\begin{pmatrix}
0 & 0 \\
0 & 1
\end{pmatrix}  
}_\text{C}
\begin{pmatrix}
 z_1 \\
 z_2
\end{pmatrix}  
    \]
</p>  
  
  
<p> или сокращённо: </p>
 <p class="text-center">  
\[   
y=\begin{pmatrix}
0 & 1 
\end{pmatrix}z  
    \]
</p>  
  
  
  
<p>Отредактировав вектор в контексте, запустите моделирование, результатом которого будет график, изображённый на рис. 94.</p>

  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1svfayh/risunok-94-grafik-skorosti-gruza-sistemy-7.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1svfayh/risunok-94-grafik-skorosti-gruza-sistemy-7.jpg" itemprop="contentUrl" alt="Рисунок 94. График скорости груза системы (7)" title="Рисунок 94. График скорости груза системы (7)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 94. График скорости груза системы (7)</span>
</div>  

<h2>Строим траектории фазовых переменных системы в Xcos</h2>
  
<p>Рассмотрим теперь задачу вывода нескольких переменных состояния и построения траектории на фазовой плоскости. </p>
<p>Обратимся к ранее составленным уравнениям выхода. В первом случае матричное уравнение  </p>
 <p class="text-center">  
\[   
\begin{pmatrix}
 y_1 \\
 y_2
\end{pmatrix} = 
  \underbrace{
\begin{pmatrix}
1 & 0 \\
0 & 0
\end{pmatrix}  
}_\text{C}
\begin{pmatrix}
 z_1 \\
 z_2
\end{pmatrix}  
    \]
</p> 
  
<p>подаёт на выход \( y_1 \) фазовую переменную  \( z_1 \), потому что только элемент \( c_{11} \)  матрицы выхода \( C \) не обнуляется. </p>  
<p>Соответственно для вывода фазовой переменной \( z_2 \)  справедливо уравнение  </p> 
<p class="text-center">  
\[   
\begin{pmatrix}
 y_1 \\
 y_2
\end{pmatrix} = 
  \underbrace{
\begin{pmatrix}
0 & 0 \\
0 & 1
\end{pmatrix}  
}_\text{C}
\begin{pmatrix}
 z_1 \\
 z_2
\end{pmatrix}  
    \]
</p>    
  
  
 <p>где ненулевым оказывается элемент \( c_{22} \)  </p>  
 <p>Теперь, если обобщить полученную информацию, можно сделать вывод, что для вывода переменной состояния \( z_k \), в матрице выхода должна стоять &laquo;1&raquo; на месте \( c_{kk} \). Соответственно, для передачи на выход обеих переменных состояния рассматриваемой двумерной системы (7), матрица \( C \) преобразуется в единичную матрицу размера 2х2, при этом, размерность вектора \( y \)&nbsp;становится равной количеству выводимых переменных, т.е. &laquo;2&raquo;.</p>
<p>Таким образом, линейная динамическая система в пространстве состояний, описывающая движение груза с пружиной и демпфером, подающая на выход обе фазовых переменных, примет вид:</p> 
  
  <p class="text-center">  
(8) \[   
 \begin{cases}  
  	\dot z =
\begin{pmatrix}
0 & 1 \\
-\frac{k}{m} & -\frac{c}{m}
\end{pmatrix} z + 

  \begin{pmatrix}
 0 \\
 \frac{1}{m}
\end{pmatrix}  F \\
  
  y=
    \begin{pmatrix}
 1 & 0\\
 0 & 1  
\end{pmatrix}  z
   \end{cases}
    \]
 
</p>
  
<p>Для моделирования системы (8), прежде всего, в контексте нужно изменить строку, где задаётся матрица выхода:</p>
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a></b></p>
<span class="image-description text-italic">Задание единичной матрицы Scilab</span>
</div>  
  
<p>После чего необходимо заменить одномерный <strong>осциллограф</strong> на блок <strong>CMSCOPE</strong>, размерность входа которого нужно исправить на 2. На рис.95а) приведена блок-схема с векторным осциллографом, а на рис. 95 б) &ndash; результат моделирования системы (8).</p>  
  
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/109bh0t/risunok-95a-blok-shema-dinamicheskoy-sistemy-v-xcos.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/109bh0t/risunok-95a-blok-shema-dinamicheskoy-sistemy-v-xcos.jpg" itemprop="contentUrl" alt="Рисунок 95а. Блок-схема динамической системы в Xcos" title="Рисунок 95а. Блок-схема динамической системы в Xcos"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 95а. Блок-схема динамической системы в Xcos</span>
</div>  
  
   <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1tj2szd/risunok-95b-grafiki-fazovyh-koordinat-na-odnoy-sesteme-koordinat-v-xcos.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1tj2szd/risunok-95b-grafiki-fazovyh-koordinat-na-odnoy-sesteme-koordinat-v-xcos.jpg" itemprop="contentUrl" alt="Рисунок 95б. Графики фазовых координат на одной сестеме координат в Xcos" title="Рисунок 95б. Графики фазовых координат на одной сестеме координат в Xcos"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 95б. Графики фазовых координат на одной сестеме координат в Xcos</span>
</div>  
   
<h2>Строим графики динамической системы на разных координатных сетках в Xcos</h2>  
  <p>А что, если в ходе моделирования потребуется построить графики переменных состояния на отдельных системах координат? </p>
  
  
  
 <p>В этом случае потребуется воспользоваться блоком <img class="image-seftcontainer" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/50b2l4/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide.jpg" alt="Моделирование динамических систем в матричном виде" title="Моделирование динамических систем в матричном виде"/>
, который располагается на палитре <strong>«Маршрутизация сигналов»</strong>. Данный
блок разделяет входной поток на отдельные составляющие. В нашем случае на вход блока <strong>DEMUX</strong> попадает вектор \( y \) условной размерности 2, который на выходе превращается в отдельные вектора фазовых выходных переменных \( y_1 \) и \( y_2 \). Использования блока расщепления DEMUX представлено на рис. 96.
  
     <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/13lwhtc/risunok-96-xcos-shema-dinamicheskoy-sistemy-s-vyvodom-treh-sistem-koordinat.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/13lwhtc/risunok-96-xcos-shema-dinamicheskoy-sistemy-s-vyvodom-treh-sistem-koordinat.jpg" itemprop="contentUrl" alt="Рисунок 96. Xcos-схема динамической системы  с выводом трёх систем координат" title="Рисунок 96. Xcos-схема динамической системы  с выводом трёх систем координат"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 96. Xcos-схема динамической системы  с выводом трёх систем координат</span>
</div>  
   
  <p>Результат моделирования и внутренние параметры блока <strong>CMSCOPE</strong> представлены на рис. 97а-б).</p>
    
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1e1nidi/risunok-97a-nastroyki-vnutrennih-parametrov-bloka-cmscope.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1e1nidi/risunok-97a-nastroyki-vnutrennih-parametrov-bloka-cmscope.jpg" itemprop="contentUrl" alt="Рисунок 97а.Настройки внутренних параметров блока  CMSCOPE" title="Рисунок 97а.Настройки внутренних параметров блока  CMSCOPE"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 97а.Настройки внутренних параметров блока  CMSCOPE</span>
</div>  
  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1ujgq5t/risunok-97b-ishodnyy-signal-i-razdelennyy-na-2-komponenty.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/1ujgq5t/risunok-97b-ishodnyy-signal-i-razdelennyy-na-2-komponenty.jpg" itemprop="contentUrl" alt="Рисунок 97б.Исходный сигнал и разделённый на 2 компоненты" title="Рисунок 97б.Исходный сигнал и разделённый на 2 компоненты"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 97б.Исходный сигнал и разделённый на 2 компоненты</span>
</div>  
  
<p>Продолжим модернизировать созданную блок-схему и на следующем шаге откажемся от <strong>осциллографа</strong>, заменив его блоком <strong>TOW</strong><strong>_</strong><strong>c</strong>. Использование блока записи в контекст предпочтительнее, так как последний предоставляет больше возможностей для редактирования и отображения графической информации посредством использования контекста.</p>
<p>Блоки многомерного осциллографа <strong>CMSCOPE</strong> и расщепления можно удалить<strong> &ndash; </strong>они не понадобятся<strong>. </strong></p>
<p>Блок-схема системы с внесёнными изменениями показана на рис. 98.</p>   
    
  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/tg1lvk/risunok-98-vnedrenie-bloka-tow_c-blok-shemu-sistemy.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/tg1lvk/risunok-98-vnedrenie-bloka-tow_c-blok-shemu-sistemy.jpg" itemprop="contentUrl" alt="Рисунок 98.Внедрение блока TOW_c  блок-схему системы " title="Рисунок 98.Внедрение блока TOW_c  блок-схему системы "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 98.Внедрение блока TOW_c  блок-схему системы </span>
</div>     
   
<p>Напомним, что на вход блока <strong>TOW</strong><strong>_</strong><strong>c</strong> подаётся вектор, который в переменную y_var, а потом используется в контексте для построения графиков. Чтобы понять, что за объект формируется в переменной y_var, его можно вывести в консоль с помощью стандартной функции Scilab disp().</p>
<p>Добавьте в контекст строку очистки консоли и вывода переменной:</p>   
   
<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a></b></p>
<span class="image-description text-italic">строки очистки консоли и вывода переменной</span>
</div>     
   
   
<p>Запустите моделирование и перейдите в консоль. В командном окне Scilab Вы обнаружите следующее:</p>   
   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/6e4usz/risunok-99-otobrazhenie-obekta-y_var-v-konsoli.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/6e4usz/risunok-99-otobrazhenie-obekta-y_var-v-konsoli.jpg" itemprop="contentUrl" alt="Рисунок 99.Отображение объекта y_var в консоли " title="Рисунок 99.Отображение объекта y_var в консоли "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 99.Отображение объекта y_var в консоли </span>
</div>     
    
 <p>Итак, рисунок 99 гласит о том, что <em>объект&nbsp; </em>  <em>y_var</em> содержит два атрибута: <em>вектор</em> \( values \), в котором 2 столбца и 220 строк и &nbsp;<em>вектор </em> \( time \) &ndash; временные отсчёты, представляющие собой вектор-столбец с 220 значениями.</p>
   
<p>Если подробнее, то <em>вектор </em>  <em>y_var</em>\(.time\) <em> &ndash; </em>это точки в которых вычисляются значения системы, их 220 потому, что моделирование происходит на протяжении 22сек. со значением \( period=0.1 \). <em>Вектор</em>&nbsp; <em>y_var</em>\(.values\) в <u>первом</u> столбце содержит значения первой фазовой переменной \( z_1 \), поданной на выход системы, т.е. значения координаты \( x \), вычисленные в каждой из 220 моментов времени; а во <u>втором</u> столбце &ndash; значения второй фазовой переменной \( z_2 \), которая соответствует производной \( \dot{x} \), то есть скорости груза, вычисленные в тех же 220 точках.</p>
   <br/>
<p>Для построения покоординатных графиков и фазового портрета нам предстоит обращаться к значениям <em>y_var</em>\(.values\) содержащимся в первом и втором столбцах по-отдельности.</p>
<p>Например, для того, чтобы получить все значения <strong>первого</strong> столбца, соответствующие переменной состояния \(z_1\), необходимо записать: <strong>y</strong><strong>_</strong><strong>var</strong><strong> . </strong><strong>values</strong><strong>(: , 1), </strong>соответственно, чтобы получить значения <strong>вектора скорости</strong>,&nbsp; нужно использовать запись<strong>&nbsp; </strong><strong>y</strong><strong>_</strong><strong>var</strong><strong> . </strong><strong>values</strong><strong>(: , 2).</strong></p>
<p>С помощью скрипта, записанного в контексте, можно получить одно графическое окно с 4-мя системами координат, как на рис. 100</p>
   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/8lzrhi/risunok-99-vyvod-graficheskoy-informacii-pri-pomoschi-konteksta-v-rezultate-modelirovaniya-sistemy.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos/8lzrhi/risunok-99-vyvod-graficheskoy-informacii-pri-pomoschi-konteksta-v-rezultate-modelirovaniya-sistemy.jpg" itemprop="contentUrl" alt="Рисунок 99.Вывод графической информации при помощи контекста в результате моделирования системы  " title="Рисунок 99.Вывод графической информации при помощи контекста в результате моделирования системы  "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 99.Вывод графической информации при помощи контекста в результате моделирования системы  </span>
</div>     
    
   <p>Контекст, реализующий задание матриц системы, представленной в пространстве состояний и строящий графики следующий:</p>
   <div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a></b></p>
<span class="image-description text-italic">Контекст, реализующий задание матриц системы</span>
</div>  
   
  <p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos'>http://inclab.ru/articles/modelirovanie-dinamicheskih-sistem-v-matrichnom-vide-xcos</a><p>]]></description>
			<pubDate>Wed, 13 Oct 2021 22:03:59 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Управление в модели Хищник-Жертва  Scilab Xcos]]></title>
			<link>http://inclab.ru/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab</link>
			<guid>http://inclab.ru/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Обратимся к модели Хищник-Жертва, предложенной Лотки-Волтерра и попытаемся ею поуправлять<p>Обратимся к рассмотренной <a href="http://inclab.ru/xcos/ispolzovanie-simvolnyh-parametrov-i-konteksta-v">в статье</a> модели Хищник-Жертва, предложенной Лотки-Волтерра и попытаемся ею поуправлять, то есть введём управление <em>F</em> в систему, так, что она преобразуется к виду:</p>

<p class="text-center">
(1)\begin{cases} \dot{x}=ax-bxy+F(t)x\\  \dot{y}=dxy-cy\\  \end{cases}  
</p>

<p>Итак, судя по виду системы (1), управлять мы будем численностью жертв \( x \)&nbsp;в каждый момент времени \( t \). Функция \( F(t) \)в данном случае может быть рассмотрена как индикатор смертности жертвы, то есть значение \( F(t) \leq 0 \) свидетельствует об убыли особей-жертв, значение \( F(t) = 0 \) означает, что жертвы смогли избежать гибели в момент времени .</p>
<p>Рассмотрим в качестве управляющего закона следующий:</p>

<p class="text-center">  
(2)  \[   
F(t) = 
     \begin{cases}
       sin(\frac{x}{2}), &\quad \text{если} \; x < x_{min}\\
       \text{u = const,} &\quad \text{если} \; x > x_{max} \\ 
     \end{cases}
\]
</p>
  
  
  
  <p>Систему (2) можно интерпретировать следующим образом: <br/>при достаточно высокой популяции жертв, их смертность примерно одинакова; <br/>при малом же количестве добычи, вероятность ею полакомится снижается.</p>
<p>Отметим, что <a href="http://inclab.ru/xcos/ispolzovanie-simvolnyh-parametrov-i-konteksta-v">в системе без управления</a> присутствует состояние равновесия, где количество жертв равно \( \frac{c}{d} \), поэтому значения \( x_{min}, x_{max} \) выберем на \( \delta% \)&nbsp;меньше и больше стационарного значения соответственно.</p>
  <p></p>
<p>Приступим к построению управляемой системы (13) двух популяций.</p>
  
  
 <ol>
<li><p>Для начала, к <a href="http://inclab.ru/xcos/ispolzovanie-simvolnyh-parametrov-i-konteksta-v">блок-схеме исходной модели</a> :</p>
   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1o1h1yv/blok-shem-modeli-hischnik-zhertva-xcos.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1o1h1yv/blok-shem-modeli-hischnik-zhertva-xcos.jpg" itemprop="contentUrl" alt="Блок-схем модели Хищник-Жертва Xcos" title="Блок-схем модели Хищник-Жертва Xcos"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Блок-схем модели Хищник-Жертва Xcos</span>
</div>     
<p>необходимо добавить: </p>
<ul>
<li><p>заглушку <strong>супер-блока</strong>,</p></li>
<li><p>блок <strong>произведения</strong>,</p></li>
<li><p>блок <strong>TOWS</strong><strong>_</strong><strong>c</strong><strong>.</strong></p></li>
<li><p>Следующим шагом нужно провести соединительные линии и отредактировать первый <strong>сумматор</strong>, как показано на рис. 83.</p></li>
</ul> 
  
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/kf3tbo/risunok-83-vnedrenie-bloka-upravlyayuschego-vozdeystviya-v-blok-shemu-modeli-hischnik-zhertva.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/kf3tbo/risunok-83-vnedrenie-bloka-upravlyayuschego-vozdeystviya-v-blok-shemu-modeli-hischnik-zhertva.jpg" itemprop="contentUrl" alt="Рисунок 83. Внедрение блока управляющего воздействия в блок-схему модели Хищник-Жертва" title="Рисунок 83. Внедрение блока управляющего воздействия в блок-схему модели Хищник-Жертва"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 83. Внедрение блока управляющего воздействия в блок-схему модели Хищник-Жертва</span>
</div>   
   
   </li>

<li><p>Дальнейшие манипуляции подразумевают задание закона управления (2), за который будет отвечать супер-блок. Щёлкните дважды на супер-блоке, чтобы открыть на редактирование его рабочую область.</p></li>
   
<li><p>Согласно построенной блок-схеме с рис. 83, на вход супер-блока подаётся текущая численность жертв \( x \). Это значение необходимо сравнить со значениями \( x_{min}, x_{max} \) и в зависимости от результата подать на выход супер-блока \( sin(\frac{x}{2}) \) или \( u \), соответственно системе (2).</p></li>
<li><p>Сравнение текущего значения численности жертв со значениями \( x_{min}, x_{max} \), инициирующими смену управляющего воздействия, осуществим с помощью блоков индикации смены знака <img class="image-seftcontainer" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/ecj0i5/upravlenie-v-modeli-hischnik-zhertva-scilab-xcos.jpg" alt="Управление в модели Хищник-Жертва  Scilab Xcos" title="Управление в модели Хищник-Жертва  Scilab Xcos"/>
&nbsp;и <img class="image-seftcontainer" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1v8rptr/upravlenie-v-modeli-hischnik-zhertva-scilab-xcos.jpg" alt="Управление в модели Хищник-Жертва  Scilab Xcos" title="Управление в модели Хищник-Жертва  Scilab Xcos"/>
, которые располагаются на палитре &laquo;<strong>Обнаружение перехода через нуль</strong>&raquo; и работают совместно с блоком <img class="image-seftcontainer" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/524axs/upravlenie-v-modeli-hischnik-zhertva-scilab-xcos.jpg" alt="Управление в модели Хищник-Жертва  Scilab Xcos" title="Управление в модели Хищник-Жертва  Scilab Xcos"/>
&nbsp;с палитры &laquo;<strong>Маршрутизация сигналов</strong>&raquo;, который осуществляет выбор управляющего воздействия.</p></li>
<li><p>Чтобы воспользоваться блоками <strong>NEGTOPOS</strong><strong>_</strong><strong>f</strong> и <strong>POSTONEG</strong><strong>_</strong><strong>f</strong>, необходимо привести неравенства из (2) к виду:</p>
   
   
   <p class="text-center">  
(3)  \[   
     \begin{cases}
        x - x_{min} < 0, &\quad \text{(a)}\\
        x - x_{max} > 0, &\quad \text{(b)}\\ 
     \end{cases}
\]
</p>
 </li>

<li><p>Теперь неравенства (3) представляют из себя разность двух элементов, один из которых динамический \( (x) \), а другой &ndash; константный, заданный в контексте (значения \( x_{min}, x_{max} \)). <br /> Откуда следует, что для сборки управления, нам дополнительно понадобятся:</p>
  
<ul>
<li><p>два константных блока <strong>CONST</strong><strong>_</strong><strong>m</strong></p></li>
<li><p>и два сумматора <strong>BIGSOM</strong><strong>_</strong><strong>f</strong><strong>. </strong></p></li>
</ul>  
  
<p>Предварительное расположение блоков для <em>анализа условий выбора</em> того или иного закона численности жертв, должно выглядеть, примерно, как на рис. 84.</p>  
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/fny673/risunok-84-promezhutochnyy-nabor-blokov-dlya-proverki-usloviy-2.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/fny673/risunok-84-promezhutochnyy-nabor-blokov-dlya-proverki-usloviy-2.jpg" itemprop="contentUrl" alt="Рисунок 84. Промежуточный набор блоков для проверки условий (2)" title="Рисунок 84. Промежуточный набор блоков для проверки условий (2)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 84. Промежуточный набор блоков для проверки условий (2)</span>
</div>   

  </li>

<li><p>Рассмотрим построение блок-схемы неравенства \( x-x_{min} < 0 \) (3а). <br/>Данное неравенство выполняется, когда значение левой части становится меньше нуля, то есть переходит на <span style="text-decoration: line-through;">тёмную</span> отрицательную сторону оси координат, будучи до это положительным, тем самым осуществляя движения от &laquo;+&raquo; к &laquo;-&raquo;. <br /> Данному событию соответствует блок, обнаруживающий переход чрез нуль <strong>POSTONEG</strong><strong>_</strong><strong>f</strong><strong>. </strong>Соответствующая реализация первого неравенства на блок-схеме представлена на рис. 85.</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/hm7gwd/risunok-85-realizaciya-usloviya-neravenstva-3a.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/hm7gwd/risunok-85-realizaciya-usloviya-neravenstva-3a.jpg" itemprop="contentUrl" alt="Рисунок 85. Реализация условия неравенства  (3а)." title="Рисунок 85. Реализация условия неравенства  (3а)."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 85. Реализация условия неравенства  (3а).</span>
</div>   
  
  <p>Обратите внимание, что в константном блоке используется значение \( x_{min} < 0 \), которое предварительно задано в контексте и равно \( (1-\delta)\frac{c}{d} \). </p>
    

<li><p>Перейдём к неравенству \( x-x_{max} > 0 \)&nbsp;(3b). <br/>Это неравенство выполняется, когда выражение слева превращается из отрицательного в положительное, то есть осуществляется переход через нуль слева направо, за что отвечает блок <strong>NEGTOPOS</strong><strong>_</strong><strong>f</strong>. <br /> Реализация данного неравенства полностью повторяет установку соединительных линий предыдущего случая и требует задания значения \( (1+\delta)\frac{c}{d} \) &nbsp;в контексте. Блок схема неравенства (3b) представлена на рис. 86.</p>
    
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1sklesm/risunok-86-realizaciya-usloviya-neravenstva-3b.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1sklesm/risunok-86-realizaciya-usloviya-neravenstva-3b.jpg" itemprop="contentUrl" alt="Рисунок 86. Реализация условия неравенства  (3б)." title="Рисунок 86. Реализация условия неравенства  (3б)."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 86. Реализация условия неравенства  (3б).</span>
</div>   
    </li>

<li><p>Далее перейдём к реализации выбора нужного закона управления в зависимости от того, какое неравенство из (3) выполняется. Данный выбор осуществляет блок <strong>SELECT</strong><strong>_</strong><strong>m</strong><strong>, </strong>имеющий два управляющих и два регулярных входа<strong>. <br /> </strong>На <em>управляющие</em> входы селектора <strong>SELECT</strong><strong>_</strong><strong>m</strong> необходимо подать соответствующие <em>красные</em> выходы блоков <strong>POSTONEG</strong><strong>_</strong><strong>f</strong> и <strong>NEGTOPOS</strong><strong>_</strong><strong>f</strong>. <em>Заметьте, что здесь <strong>важен порядок</strong>, так как управляющим входам селектора соответствуют его же регулярные входы. </em>Поэтому выход <em>первого</em> неравенства, реализованного блоком <strong>POSTONEG</strong><strong>_</strong><strong>f</strong><strong>,</strong> &nbsp;нужно соединить с <em>левым</em> управляющим входом селектора, а выход блока <strong>NEGTOPOS</strong><strong>_</strong><strong>f</strong><strong> &ndash; </strong>соединить с правым красным входом блока <strong>SELECT</strong><strong>_</strong><strong>m</strong><strong>.</strong></p></li>
<li><p>До полного сбора блока управления осталось только указать функции управления из системы (2), которые будут использованы при выполнении каждого из условий, поданных на управляющие входы блока <strong>SELECT</strong><strong>_</strong><strong>m</strong><strong>. <br /> </strong>Для задания управляющих воздействий проделаем следующие действия:</p>

<ul>
<li><p>на первый регулярный вход селектора подадим функцию \( sin(\frac{x}{2}) \) что соответствует выполнению первого условия (3 а),</p> </li>
<li><p>а на второй черный вход блока <strong>SELECT</strong><strong>_</strong><strong>m</strong> - константу&nbsp; \( u \), заданную в контексте.</p> </li>
</ul>
<p>Итоговая блок-схема для выбора управляющего воздействия <br /> представлена на рис. 87.</p> 
  
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1rq0dr7/risunok-87-blok-shema-vybora-zakona-upravleniya-2-realizovannaya-otdelnym-super-blokom.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1rq0dr7/risunok-87-blok-shema-vybora-zakona-upravleniya-2-realizovannaya-otdelnym-super-blokom.jpg" itemprop="contentUrl" alt="Рисунок 87. Блок-схема выбора закона управления (2), реализованная отдельным супер-блоком" title="Рисунок 87. Блок-схема выбора закона управления (2), реализованная отдельным супер-блоком"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 87. Блок-схема выбора закона управления (2), реализованная отдельным супер-блоком</span>
</div>    
  
 <p>Ниже приведён скрипт, записанный к контексте рабочей области исходной блок-схемы.</p> 
   
   <div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab'>http://inclab.ru/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab</a></b></p>
<span class="image-description text-italic">Задание контекста в Xcos.</span>
</div>	 
  
  
</li></ol>  
  
 <p>Запустите моделирование на 15сек.. с начальными условиями \( x_0=5, y_0=2 \)  соответствующих блоков интеграторов. Результат моделирования представлен на рис. 88. </p> 
  
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1y1yzbm/risunok-88-model-hischnik-zhertva-s-zadannym-zakonom-upravleniya-verhnyaya-sistema-koordinat-koleban.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab/1y1yzbm/risunok-88-model-hischnik-zhertva-s-zadannym-zakonom-upravleniya-verhnyaya-sistema-koordinat-koleban.jpg" itemprop="contentUrl" alt="Рисунок 88. Модель Хищник-Жертва с заданным законом управления. Верхняя система координат  колебания численности популяций, 
нижняя  закон управления   F(t)" title="Рисунок 88. Модель Хищник-Жертва с заданным законом управления. Верхняя система координат  колебания численности популяций, 
нижняя  закон управления   F(t)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 88. Модель Хищник-Жертва с заданным законом управления. Верхняя система координат  колебания численности популяций, 
нижняя  закон управления   F(t)</span>
</div>    
  
  
<p>Обратите внимание, что популяция жертв (prey) и хищников (predator) стремится к устойчивым положениям равновесия \( x^* = \frac{c}{d}, y^* = \frac{a}{b} \) соответственно, а отклонения от точек  стационарности не превышают заданного значения  \( \delta \).</p> 
  
  
<p>В качестве дополнительного задания и для более подробного изучения динамики системы, читателю предлагается вывести фазовый портрет рассматриваемой системы Хищни-Жертва, убедившись, что траектория сходится к точке устойчивости  \( (x^*, y^*) \), а стартует из начальной точки  \( (x_0, y_0) \); поменять коэффициенты \( a,b,c,d \)  системы в контексте и задать различную степень отклонения \( \delta \), проследив, как меняется взаимодействие популяций.</p>  
  <p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab'>http://inclab.ru/articles/matematicheskaya-model-upravleniya-chislennostyu-populyacii-scilab</a><p>]]></description>
			<pubDate>Fri, 04 Jun 2021 15:12:42 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Использование супер-блоков в Scilab Xcos]]></title>
			<link>http://inclab.ru/articles/ispolzovanie-super-blokov-v-scilab-xcos</link>
			<guid>http://inclab.ru/articles/ispolzovanie-super-blokov-v-scilab-xcos</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Рассмотрим, как можно модернизировать созданную блок-схему для осуществления поставленной задачи.<p>В <a href="http://inclab.ru/xcos/zamknutaya-sistema-upravleniya-scilab-xcos">предыдущем материале</a> мы рассмотрели пример реализации простейшего управляющего элемента в Xcos. Заметим, что частота переключения режимов двухфазного термоконтроллера высока (около 10 сек.), что на практике оказывало бы дополнительную нагрузку на исполнительные механизмы устройства и приводило бы к его быстрой поломке. Поэтому более рациональным было бы указывать не фиксированное значение температуры, а диапазон температур, характерных для комфортного пребывания в помещении.</p>
<p>Рассмотрим, как можно модернизировать созданную блок-схему для осуществления поставленной задачи.</p>
<p>Прежде всего, для большей наглядности созданной схемы, прибегнем к помощи <em>супер-блоков. </em>Чтобы объединить несколько Xcos блоков в один супер-блок нужно:</p>

<ul>
<li><p>выделить нужные блоки с их соединительными линиями (см рис.75 а);</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1u2otpp/ris-75a-preobrazovanie-blokov-v-super-blok-vydelenie-obedinyaemyh-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1u2otpp/ris-75a-preobrazovanie-blokov-v-super-blok-vydelenie-obedinyaemyh-blokov.jpg" itemprop="contentUrl" alt="Рис. 75a. Преобразование блоков в супер-блок/ выделение объединяемых блоков" title="Рис. 75a. Преобразование блоков в супер-блок/ выделение объединяемых блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рис. 75a. Преобразование блоков в супер-блок/ выделение объединяемых блоков</span>
</div>   
  </li>
<li><p>кликнуть правой кнопкой мыши по одному из блоков;</p></li>
<li><p>в выпадающем меню выбрать пункт &laquo;<strong>Selection</strong> <strong>to</strong> <strong>superblock</strong>&raquo;.</p></li>
</ul>
<p>После чего на месте группы блоков появится новый блок (см. рис..75б ).</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/c5icr8/ris-75b-preobrazovanie-blokov-v-super-blok-rezultat-obedineniya-neskolkih-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/c5icr8/ris-75b-preobrazovanie-blokov-v-super-blok-rezultat-obedineniya-neskolkih-blokov.jpg" itemprop="contentUrl" alt="Рис. 75б. Преобразование блоков в супер-блок/ результат объединения нескольких блоков" title="Рис. 75б. Преобразование блоков в супер-блок/ результат объединения нескольких блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рис. 75б. Преобразование блоков в супер-блок/ результат объединения нескольких блоков</span>
</div> 

<p>То же самое необходимо проделать для блока управления, предварительно удалив лишние соединительные линии (см. рис. 76 а-б)</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/15nq7og/ris-75a-vydelenie-obedinyaemyh-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/15nq7og/ris-75a-vydelenie-obedinyaemyh-blokov.jpg" itemprop="contentUrl" alt="Рис. 75а. выделение объединяемых блоков" title="Рис. 75а. выделение объединяемых блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рис. 75а. выделение объединяемых блоков</span>
</div> 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/72kw67/ris-75b-rezultat-obedineniya-neskolkih-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/72kw67/ris-75b-rezultat-obedineniya-neskolkih-blokov.jpg" itemprop="contentUrl" alt="Рис. 75б. результат объединения нескольких блоков" title="Рис. 75б. результат объединения нескольких блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рис. 75б. результат объединения нескольких блоков</span>
</div> 

<p>В результате исходная схема примет удобочитаемый вид, как показано на рис. 77. &nbsp;</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/3pno74/risunok-77-blok-shema-zamknutoy-sistemy-upravleniya-s-ispolzovanie-super-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/3pno74/risunok-77-blok-shema-zamknutoy-sistemy-upravleniya-s-ispolzovanie-super-blokov.jpg" itemprop="contentUrl" alt="Рисунок 77. Блок-схема замкнутой системы управления с использование супер-блоков" title="Рисунок 77. Блок-схема замкнутой системы управления с использование супер-блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 77. Блок-схема замкнутой системы управления с использование супер-блоков</span>
</div> 

<p>После проведения всех манипуляций настоятельно рекомендуется запустить моделирование, дабы убедиться, что ничего не сломалось. Как правило, чего-то всегда ломается. Но процесс отладки полезен потому, что позволяет лучше разобраться в происходящем.</p>
<p>Итак, чтобы найти ошибку, необходимо проанализировать, где она могла бы возникнуть. Вопросы с настройкой осциллографа мы разбирать не будем, так как это тема давно минувших <span style="text-decoration: line-through;">дней</span> параграфов. Обратимся к ново-созданным супер-блокам. Для того, чтобы просмотреть содержимое супер-блока, нужно дважды по нему кликнуть левой кнопкой мыши, после чего, в новом окне откроется блок-схема, входящая в состав данного супер-блока. Обратимся к содержимому зелёного блока (см. рис. 78).</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/13v2qnc/risunok-78-oshibka-voznikayuschaya-pri-sozdanii-super-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/13v2qnc/risunok-78-oshibka-voznikayuschaya-pri-sozdanii-super-blokov.jpg" itemprop="contentUrl" alt="Рисунок 78. Ошибка, возникающая при создании супер-блоков" title="Рисунок 78. Ошибка, возникающая при создании супер-блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 78. Ошибка, возникающая при создании супер-блоков</span>
</div> 

<p>Вот оно! Подозрительный треугольник с восклицательным знаком, сигнализирующий о наличии ошибки. Дело в том, что в данных блоках используются переменные, указанные в контексте исходной рабочей области. Контекст же открытого окна, на проверку, оказывается пустым. Следовательно, для устранения данной ошибки, необходимо перенести используемые переменные из контекста исходного окна в окно редактирования супер-блока.</p>
<p><strong>Важно!</strong> Иногда устранить ошибки, при создании супер-блоков из имеющихся в схеме, не удаётся &ndash; это баг бесплатного программного обеспечения. В этом случае построение схемы нужно начать в новой рабочей области именно с создания супер-блоков <img class="image-seftcontainer" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1tch30o/ispolzovanie-super-blokov-v-scilab-xcos.jpg" alt="Использование супер-блоков в Scilab Xcos" title="Использование супер-блоков в Scilab Xcos"/>
, которые можно найти на палитре &laquo;<strong>Пользовательские функции</strong>&raquo;.</p>
<p>После краткого знакомства с пользовательскими супер-блоками, вернёмся к задаче модификации контроллера, регулирующего температуру в заданных пределах. Для моделирования такого контроллера потребуется блок <img class="image-seftcontainer" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1ezlflq/ispolzovanie-super-blokov-v-scilab-xcos.jpg" alt="Использование супер-блоков в Scilab Xcos" title="Использование супер-блоков в Scilab Xcos"/>
, который располагается на палитре &laquo;<strong>Системы с разрывами</strong>&raquo;. Данный блок имеет один регулярный вход и один регулярный выход и осуществляет переключение между двумя константами. Блок реле остаётся включенным до тех пор, пока на вход не передано пороговое значение, после чего реле выключается и принимает второе значение до тех пор, пока вновь не будет пройдено пороговое значение.</p>
<p>Из описания блока <strong>HYSTHERESIS</strong> следует, что целый блок, реализующий включение и отключение термокнтоллера, можно заменить одним блоком реле, как показано на рис. 79.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1n2fpq3/risunok-79-ispolzovanie-bloka-rele-v-kachestve-upravlyayuschego-ustroystva.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1n2fpq3/risunok-79-ispolzovanie-bloka-rele-v-kachestve-upravlyayuschego-ustroystva.jpg" itemprop="contentUrl" alt="Рисунок 79. Использование блока реле в качестве управляющего устройства" title="Рисунок 79. Использование блока реле в качестве управляющего устройства"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 79. Использование блока реле в качестве управляющего устройства</span>
</div> 

<p>Внутренние параметры блока <strong>HYSTHERESIS</strong> представлены на рис. 80</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/oge82n/risunok-80-vnutrennie-parametry-bloka.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/oge82n/risunok-80-vnutrennie-parametry-bloka.jpg" itemprop="contentUrl" alt="Рисунок 80. Внутренние параметры блока" title="Рисунок 80. Внутренние параметры блока"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 80. Внутренние параметры блока</span>
</div> 



<p>Согласно заданным параметрам, блок <strong>HYSTHERESIS</strong> будет работать следующим образом:<br/> по умолчанию блок считается включенным и остаётся таковым до тех пор, пока значение, подаваемое на его вход не превысит <strong>delta</strong>, при этом на выход блока реле подается значение <strong>output</strong> <strong>when</strong> <strong>on</strong><strong> = 1. </strong><br/>Как только значение, подаваемое на вход блока реле превышает <strong>delta</strong>, блок выключается и подаёт на выход значение <strong>output</strong> <strong>when</strong> <strong>off</strong><strong> = 0 </strong>до тех пор, пока входное значение не упадёт ниже<strong> &ndash;</strong><strong>delta</strong>. Далее процесс повторяется.</p>
<p>Иначе на этот процесс можно взглянуть, обратившись к неравенству, которое решалось <a href="http://inclab.ru/xcos/zamknutaya-sistema-upravleniya-scilab-xcos">в предыдущем случае</a>. Если прежде разность температур сравнивалась с нулём, то сейчас ошибка должна попадать в диапазон значений, иными словами, с помощью блока <strong>HYSTHERESIS</strong> в блок-схеме (см. рис. 81) решается неравенство .</p>

  <p class="text-center">\(  |Tfix-H(s)|<\delta \) (*)</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/gnmmy5/risunok-81-blok-shema-s-upravleniem-releynogo-tipa.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/gnmmy5/risunok-81-blok-shema-s-upravleniem-releynogo-tipa.jpg" itemprop="contentUrl" alt="Рисунок 81. Блок-схема с управлением релейного типа" title="Рисунок 81. Блок-схема с управлением релейного типа"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 81. Блок-схема с управлением релейного типа</span>
</div> 
    
 <p>Запустите моделирование на 100сек. со следующими параметрами \(  delta=3; Tfix=22; K=50; T=30; \tau=5 \), указанными в контексте. Результат моделирования представлен на рис.82.</p>   
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1js0d3q/risunok-82-grafik-regulyacii-temperatura-v-predelah-ot-19-do-25-gr-c.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/ispolzovanie-super-blokov-v-scilab-xcos/1js0d3q/risunok-82-grafik-regulyacii-temperatura-v-predelah-ot-19-do-25-gr-c.jpg" itemprop="contentUrl" alt="Рисунок 82. График регуляции температура в пределах от 19 до 25 гр.Ц." title="Рисунок 82. График регуляции температура в пределах от 19 до 25 гр.Ц."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 82. График регуляции температура в пределах от 19 до 25 гр.Ц.</span>
</div> 
      
    
<p>Судя по графикам, можно сделать следующий вывод: не смотря на то, что частота переключения контроллера сократилась, увеличился разброс значений, выходящих за рамки допустимого диапазона. На практике управляющий элемент такого типа используется в качестве компромиссного решения между частотой смены состояний переключателя и значениями перерегулирования.</p><p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/ispolzovanie-super-blokov-v-scilab-xcos'>http://inclab.ru/articles/ispolzovanie-super-blokov-v-scilab-xcos</a><p>]]></description>
			<pubDate>Fri, 04 Jun 2021 15:04:37 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Замкнутая система управления Scilab Xcos]]></title>
			<link>http://inclab.ru/articles/zamknutaya-sistema-upravleniya-scilab-xcos</link>
			<guid>http://inclab.ru/articles/zamknutaya-sistema-upravleniya-scilab-xcos</guid>
			<description><![CDATA[<img src="http://inclab.ru" />простой вид контроллера  индикатор включения\выключения<p>Системы управления с обратной связью, пожалуй, самые распространённые из динамических систем, моделирование которых требуется в совершенно различных областях науки и техники: от управления манипуляторами в тяжёлой промышленности, до контроля за ростом бактерий&nbsp; в био-лаборатории.</p>
<p>Управление динамическими системами, описывающими процессы, протекающие в реальном времени, происходит при помощи управляющих устройств -&nbsp; контроллеров (или регуляторов), обеспечивающих различные законы управления. В зависимости от режима управления, выделяют оптимальные, ПИД-, нейро-нечеткие и другие регуляторы.</p>
<p>В данном материале мы рассмотрим самый простой вид контроллера &ndash; индикатор включения\выключения, который ещё носит название двухступенчатого контроллера, так как не имеет промежуточных состояний, то есть принимает всего два значения: включен или выключен.</p>
<p>Итак, представим термоконтроллер, который отслеживает температуру и срабатывает на разницу температур в помещении. В терминах управляемых систем, работа данного устройства происходит следующим образом: в определённые моменты времени на вход контроллера подаётся разница температур между текущим и необходимым к поддержанию значением, называемая ошибкой, а на выход контроллера поступает сигнал срабатывания. Управляемой переменной в данном случае является температура, которая дополнительно измеряется датчиком, и информация передаётся обратно в термоконтролер. Разница между заданным значением температуры и замеренной производительностью отопительных приборов возникает из-за неизбежных помех &ndash; утечек тепла, которые влияют на общую температуру помещения. Схема данной замкнутой системы управления представлена на рис.66.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1ql8e1/risunok-66-sistema-upravleniya-s-termodatchikom.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1ql8e1/risunok-66-sistema-upravleniya-s-termodatchikom.jpg" itemprop="contentUrl" alt="Рисунок 66. Система управления с термодатчиком" title="Рисунок 66. Система управления с термодатчиком"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 66. Система управления с термодатчиком</span>
</div> 

<p>Стоит отметить, что большинство управляемых систем с обратной связью обладает некоторой <em>инертностью</em>, то есть система управления не может мгновенно реагировать на внешнее возмущение и требуется некоторое время, пока на выход управляющего объекта будет подано необходимое значение, оказывающее воздействие на значение, снимаемое с выхода объекта управления.</p>
<p>В рассматриваемом примере такое явление возникает, например, при открытии форточки в комнате. Для того, чтобы контроллер включил систему отопления на обогрев, потребуется некоторое время, пока температура в помещении не упадёт до критической отметки. Такого рода <em>задержка</em> в работе управляющего устройства, с одной стороны позволяет системе не реагировать на краткосрочные возмущения, но, с другой стороны, вносит ограничения на быстродействие термоконтроллера.</p>
<p>Другой важной характеристикой управляемой динамической системы является её <em>ёмкость</em>. Ёмкость системы можно рассматривать, как сопротивление внешним изменениям. Причём, чем выше ёмкость системы, тем больше времени потребуется, чтобы вносимый вклад управляющего устройства подействовал на объект управления.</p>
<p>Адаптировать понятие ёмкости на рассматриваемый случай можно как теплоёмкость. Например, чтобы прогреть остывшее за время отсутствия хозяев, помещение, потребуется время не только на нагрев воздуха, но и прогрев стен и пола.</p>
<p>Описанная система управления с контроллером и объектом управления, обладающая обозначенными особенностями, схематически изображена на рис. 67.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1yvi7ca/risunok-67-sistema-upravleniya-temperaturoy-v-pomeschenii.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1yvi7ca/risunok-67-sistema-upravleniya-temperaturoy-v-pomeschenii.jpg" itemprop="contentUrl" alt="Рисунок 67. Система управления температурой в помещении" title="Рисунок 67. Система управления температурой в помещении"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 67. Система управления температурой в помещении</span>
</div> 

<p>Процесс управления температурой в помещении рассматривается, как дифференциально уравнение первого порядка с запаздыванием, передаточная функция которого имеет вид:</p>

<p class="text-center">
\(  H(s)=\frac{K}{T\cdot s+1}e^{-\tau s} \)
</p>

<p>где \( K \) - коэффициент усиления,  \(\tau \) - ёмкость системы,  \( s \)- задержка реагирования системы.</p>


<h2>Построение блок-схемы системы управления в Xcos</h2>

<p>Начнём собирать схему с объекта управления.</p>
<ol>
<li><p>Отапливаемое помещение в нашем случае, можно рассматривать как передаточную функцию <img class="image-seftcontainer" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/6920ry/zamknutaya-sistema-upravleniya-scilab-xcos.jpg" alt="Замкнутая система управления Scilab Xcos" title="Замкнутая система управления Scilab Xcos"/>
 с палитры &laquo;<strong>Системы с непрерывным временем</strong>&raquo; с блоком запаздывания <strong>TIME</strong><strong>_</strong><strong>DELAY</strong> , располагающимся на той же палитре. Добавьте данные блоки на рабочую область.</p></li>
<li><p>Далее в контексте задайте значения переменных \( K=18, T=24, \tau=5, Tfix=12 \), чтобы их можно было использовать в дальнейшем.</p></li>
<li><p>Во внутренних параметрах блока передаточной функции <strong>CLR</strong> укажите значения <strong>Numerator</strong><strong> (числитель) = \( K \)</strong> и <strong>Denominator</strong><strong> (знаменатель) = \( T\cdot s+1 \)</strong> &nbsp;согласно формуле (12).</p></li>
<li><p>Во внутренних параметрах блока задержки <strong>TIME</strong><strong>_</strong><strong>DELAY</strong> укажите значение<strong> <br /> </strong><strong>Delay</strong><strong> = \( \tau \)</strong> .</p></li>
<li><p>Соедините выход блока <strong>CLR</strong> со входом блока <strong>TIME</strong><strong>_</strong><strong>DELAY</strong>. В итоге должна получиться схема, изображённая на рис.68</p>
  
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1ccay6b/risunok-68-realizaciya-obekta-upravleniya-pri-pomoschi-xcos-blokov.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1ccay6b/risunok-68-realizaciya-obekta-upravleniya-pri-pomoschi-xcos-blokov.jpg" itemprop="contentUrl" alt="Рисунок 68. Реализация объекта управления при помощи Xcos блоков" title="Рисунок 68. Реализация объекта управления при помощи Xcos блоков"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 68. Реализация объекта управления при помощи Xcos блоков</span>
</div> 
</li>

<li><p>Сбор схемы термоконтроллера начнём с решения неравенства</p> 
  <p class="text-center">\(  Tfix-H(s)>0 \) (*)</p>
  <p> Левая часть данного неравенства реализуется сумматором <strong>BIGSOM</strong><strong>_</strong><strong>f</strong>, вектор знаков портов которого имеет вид <strong>[1;-1]. </strong>Положительный порт сумматора нужно соединить с константным блоком, в котором установлено значение желаемой температуры . <br /> Далее, на порт сумматора с отрицательным множителем, нужно подать фиксируемую датчиком температуру, то есть, - значение с выхода блока <strong>TIME</strong><strong>_</strong><strong>DELAY</strong><strong>.</strong>&nbsp; Результат представлен на рис. 69.</p>
  <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/q0ao9z/risunok-69-realizaciya-vychisleniya-oshibki-tfix-h-s.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/q0ao9z/risunok-69-realizaciya-vychisleniya-oshibki-tfix-h-s.jpg" itemprop="contentUrl" alt="Рисунок 69. Реализация вычисления ошибки Tfix-H(s) " title="Рисунок 69. Реализация вычисления ошибки Tfix-H(s) "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 69. Реализация вычисления ошибки Tfix-H(s) </span>
</div> 

  </li>
  
<li><p>Знак ошибки, то есть сравнение с нулём выхода блока <strong>BIGSOM</strong><strong>_</strong><strong>f</strong>, будем определять с помощью блока <img class="image-seftcontainer" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/ynwq45/zamknutaya-sistema-upravleniya-scilab-xcos.jpg" alt="Замкнутая система управления Scilab Xcos" title="Замкнутая система управления Scilab Xcos"/>
, который можно найти <strong>на палитре &laquo;Математические операции&raquo;. </strong></p></li>
<li><p>Во внутренних параметрах блока <strong>RELATIONALOP</strong> для параметра <strong>Operator</strong> необходимо указать значение <strong>4</strong>, что соответствует знаку &laquo;больше&raquo;, а значение <strong>Use</strong> <strong>zero</strong> <strong>crossing</strong> =1 (переход через нуль).</p></li>
<li><p>Далее на входы <strong>RELATIONALOP</strong> нужно подать сравниваемые выражения: это выход блока <strong>BIGSOM</strong><strong>_</strong><strong>f</strong> и константный блок со значением 0, как показано <br /> на рис. 70.</p>
 <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1a7xans/risunok-70-formirovanie-neravenstva.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1a7xans/risunok-70-formirovanie-neravenstva.jpg" itemprop="contentUrl" alt="Рисунок 70.  Формирование неравенства  (*)" title="Рисунок 70.  Формирование неравенства  (*)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 70.  Формирование неравенства  (*)</span>
</div> 
 </li> 

<li><p><em>На выход блока сравнения</em> будет подано значение &laquo;1&raquo;, если условие сформированного неравенства выполняется, и &laquo;0&raquo;, если ошибка окажется отрицательной.</p></li>


<li><p>Осталось реализовать сам двухступенчатый контроллер, который можно интерпретировать как блок переключателя <img class="image-seftcontainer" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/fud3uk/zamknutaya-sistema-upravleniya-scilab-xcos.jpg" alt="Замкнутая система управления Scilab Xcos" title="Замкнутая система управления Scilab Xcos"/>
 с палитры &laquo;<strong>Маршрутизация сигналов</strong>&raquo;. На <em>вход</em> блока <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> должен подаваться результат сравнения разницы температур с &laquo;0&raquo;, а на <em>выход</em> <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> -&nbsp; значение <em>&laquo;0&raquo; или &laquo;1&raquo;,</em> в зависимости от знака <em>ошибки</em>.</p>
  </li>
<li><p>Значения переключателя &laquo;0&raquo; и &laquo;1&raquo; реализуем блоками постоянных <strong>CONST</strong><strong>, </strong>и подадим их на первый и третий входы блока <strong>SWITCH</strong><strong>2_</strong><strong>m</strong><strong>. </strong>На данном этапе блок контроллера должен выглядеть, как показано на рис. 71.</p>
   <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/wyereb/risunok-71-vyhodnye-znacheniya-dvuhstupenchatogo-kontrollera.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/wyereb/risunok-71-vyhodnye-znacheniya-dvuhstupenchatogo-kontrollera.jpg" itemprop="contentUrl" alt="Рисунок 71. Выходные значения двухступенчатого контроллера " title="Рисунок 71. Выходные значения двухступенчатого контроллера "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 71. Выходные значения двухступенчатого контроллера </span>
</div> 
   
  </li>

<li><p>Для реализации контроллера осталось соединить выход блока, решающего неравенство <strong>RELATIONALOP</strong> со свободным регулярным входом блока переключателя (см. рис. 72).</p>
  
   <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1ipbgqk/risunok-72-blok-shema-kontrollera-prinimayuschego-znacheniya-0-i-1-v-zavisimosti-ot-znaka-raznicy-te.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/1ipbgqk/risunok-72-blok-shema-kontrollera-prinimayuschego-znacheniya-0-i-1-v-zavisimosti-ot-znaka-raznicy-te.jpg" itemprop="contentUrl" alt="Рисунок 72. Блок-схема контроллера, принимающего значения «0» и «1» в зависимости от знака разницы температур " title="Рисунок 72. Блок-схема контроллера, принимающего значения «0» и «1» в зависимости от знака разницы температур "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 72. Блок-схема контроллера, принимающего значения «0» и «1» в зависимости от знака разницы температур </span>
</div> 

  </li>

<li><p>Напомним, что на средний <em>вход</em> <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> подаётся &laquo;1&raquo;, если текущая температура не превышает желаемой температуры и &laquo;0&raquo;, если текущая температура поднялась выше желаемой. Соответственно, нам нужно включать контроллер, кода ошибка больше нуля и выключать его, когда ошибка отрицательна. Реализовать смену положений выключателя можно с помощью внутренних параметров.</p></li>

<li><p>Во внутренних параметрах блока <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> нас интересует параметр <strong>pass</strong> <strong>first</strong> <strong>input</strong><strong> &ndash; </strong>условие подачи на <em>выход</em> <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> его <em>первого входа</em>, т.е<strong> &laquo;1&raquo;. Параметр </strong><strong>pass</strong> <strong>first</strong> <strong>input</strong> может принимать следующие значения:</p>

<ul>
<li><p>значение &laquo;0&raquo; для проверки условия, что вход \( \geq a \);</p></li>
<li><p>значение &laquo;1&raquo; для проверки условия, что вход \(  >a \);</p></li>
<li><p>значение &laquo;2&raquo; для проверки условия, что вход \( = a \);</p></li>
</ul>
  
<p>В нашем случае, необходимо поставить &laquo;<strong>1</strong>&raquo;, что соответствует условию, что значение, подаваемое на средний вход блока <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> больше параметра . Параметр &nbsp;задаётся в следующей строке - для внутреннего параметра <strong>threshold</strong> и равняется &laquo;<strong>0</strong>&raquo;.</p>
  
<p>Итак, получив на вход контроллера <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> значение &laquo;1&raquo;, соответствующее температуре, ниже желаемой, мы сравниваем её с &laquo;0&raquo; в блоке <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> и на выход контроллера <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> подаётся<strong> &laquo;1&raquo;, </strong>что соответствует режиму<strong> &laquo;вкл&raquo;. </strong>Если же снимаемая температура опускается ниже значения , то на вход блока <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> подаётся<strong> &laquo;0&raquo;, </strong>который сравнивается с<strong> &laquo;0</strong>&raquo; его внутренних параметров и переводит контроллер в состояние<strong> &laquo;выкл&raquo;, </strong>что соответствует выходу блока <strong>SWITCH</strong><strong>2_</strong><strong>m</strong> со значением<strong> &laquo;0&raquo;.</strong></p>
 </li> 
<li><p>Построение схемы управления подходит к концу. Осталось выход управления со входом управляемого объекта и добавить блоки для вывода графической информации, как показано на рис. 73.</p>
   <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/159hhjk/risunok-73-blok-shema-zamknutoy-sistemy-upravleniya-temperaturoy-s-dvuhstupenchatym-kontrollerom.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/159hhjk/risunok-73-blok-shema-zamknutoy-sistemy-upravleniya-temperaturoy-s-dvuhstupenchatym-kontrollerom.jpg" itemprop="contentUrl" alt="Рисунок 73. Блок-схема замкнутой системы управления температурой с двухступенчатым контроллером " title="Рисунок 73. Блок-схема замкнутой системы управления температурой с двухступенчатым контроллером "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 73. Блок-схема замкнутой системы управления температурой с двухступенчатым контроллером </span>
</div> 

  </li>


<li><p>Запустите моделирование на 60сек, удостоверившись, что в блоке задержке стоит корректный размер буфера, а у блока осциллографа правильно настроены параметры осей, размерности входов и буферизации. Результат моделирования представлен на рис. 74.</p>
<p>1-я система координат: черный график  разница температур; зелёный ступенчатый график  выход блока-решателя неравенства, иллюстрирующий переход через нуль; красный - график  у=0</p>
<p>2-я система координат:  режимы контроллера 1-«вкл», 0  «выкл»</p>
<p>3-я система координат: красный график  желаемая температура   , синий график  снимаемая датчиком температура.</p>


   <div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/tjlosg/risunok-74-rezultat-modelirovaniya-zamknutoy-sistemy-upravleniya.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/zamknutaya-sistema-upravleniya-scilab-xcos/tjlosg/risunok-74-rezultat-modelirovaniya-zamknutoy-sistemy-upravleniya.jpg" itemprop="contentUrl" alt="Рисунок 74. Результат моделирования замкнутой системы управления " title="Рисунок 74. Результат моделирования замкнутой системы управления "/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 74. Результат моделирования замкнутой системы управления </span>
</div> 
</li></ol>

<p>Из рис. 74 видно, что первые 5 минут &ndash; время равное задержке, контроллер простаивает и температура остаётся на отметке 0, после чего вычисляется разница температур (1-я система координат), и в работу включается контроллер (2-я система координат), повышающий температуру. Отопительные приборы продолжают работать на обогрев, пока температура в помещении не достигнет значения \( Tfix \), после чего контроллер переходит в состояние &laquo;выкл&raquo;, однако, и при выключенных отопительных элементах, температура помещения растёт некоторое время, из-за инертности система, после чего начинает падать из-за неизбежных теплопотерь (3-я система координат). Падение температуры ниже критической отметки \( Tfix \), обозначающее отрицательность ошибки, вновь инициирует переход контроллера в состояние &laquo;вкл&raquo; и т.д.</p>


<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/zamknutaya-sistema-upravleniya-scilab-xcos'>http://inclab.ru/articles/zamknutaya-sistema-upravleniya-scilab-xcos</a><p>]]></description>
			<pubDate>Fri, 04 Jun 2021 15:01:15 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Строим двумерный и трёхмерный графики на фазовой плоскости в Xcos]]></title>
			<link>http://inclab.ru/articles/postroeniyu-fazovogo-portreta-v-xcos</link>
			<guid>http://inclab.ru/articles/postroeniyu-fazovogo-portreta-v-xcos</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Два подхода к построению фазового портрета на примере аттрактора Рёсслера <p>В представленных ранее примерах, мы рассмотрели вывод графической составляющей моделируемых систем двумя способами: с помощью осциллографов <strong>CMSCOPE</strong> и <strong>CSCOPE</strong> и путём задания <strong>контекста</strong>. Однако в обоих случаях графики строились в системах координат, где на горизонтальной оси откладывались временные отсчеты, а по вертикальной &ndash; значения функции в указанные моменты времени. И, хотя вопрос разложения дифференциальных уравнений на фазовые переменные был затронут в <a href="http://inclab.ru/xcos/svedenie-k-sisteme-v-forme-koshi">статье</a>, не освещенным остался вопрос построения фазового портрета. Этой, столь полезной для анализа поведения решений моделируемых систем дифференциальных уравнений, процедуре и будет посвящён данный материал.</p>
<p>Мы рассмотрим два подхода к построению фазовых траекторий динамической системы на примере аттрактора Рёсслера. Данная система дифференциальных уравнений выбрана не случайно. Дело в том, что при моделировании системы Рёсслера, именно фазовый портрет представляет интерес, построение же интегральных кривых, как функций времени, не даёт полной картины происходящих в системе процессов.</p>
<p>Аттрактор Рёсслера &mdash; это хаотический аттрактор, которым обладает система дифференциальных уравнений Рёсслера вида:</p>

<p class="text-center">
(1)\begin{cases} \dot{x}=-y-z \\ \dot{y}=x+ay \\ \dot{z}=b+z(x-c)  \end{cases}  
</p>
<p class="text-center">\( a>0, b>0,c>0 \)</p>

<p>При значениях параметров \( a=b=0.2 \)&nbsp;и \( 2.6 \leq c \leq 4.2 \)&nbsp;уравнения Рёсслера обладают устойчивым предельным циклом. При этих значениях параметров период и форма предельного цикла совершают последовательность удвоения периода.</p>
<p>Сразу же за точкой \( c=4.2 \)&nbsp;возникает явление хаотического аттрактора. Чётко определённые линии предельных циклов расплываются и заполняют фазовое пространство бесконечным счетным множеством траекторий, обладающим свойствами фрактала. Именно случай бесконечных самоповторяющихся траекторий мы и замоделируем.</p>
<p>Построим блок-схему системы (1), задав параметры в контексте со значениями \( a=b=0.1, с=14 \).</p>
<p>Для построения трёх уравнений системы (1) нам понадобятся блоки <strong>INTEGRAL</strong><strong>_</strong><strong>m</strong><strong>, </strong><strong>BIGSOM</strong><strong>_</strong><strong>f</strong><strong>, </strong><strong>PRODUCT</strong><strong>, </strong><strong>CONST</strong> и <strong>GAINBLK</strong><strong>. </strong></p>

<h2>Двумерный фазовый портрет в Xcos</h2>
<p>В рамках первого подхода к построению фазового портрета, воспользуемся <br /> блоком <strong><img class="image-seftcontainer" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1ezt3o1/stroim-dvumernyy-i-trehmernyy-grafiki-na-fazovoy-ploskosti-v-xcos.jpg" alt="Строим двумерный и трёхмерный графики на фазовой плоскости в Xcos" title="Строим двумерный и трёхмерный графики на фазовой плоскости в Xcos"/>
, </strong>который располагается на палитре <strong>&laquo;Регистрирующие устройства&raquo; </strong>и осуществляет построение графика зависимости \( y(x) \), где \( x \) отвечает за значения по оси абсцисс, а значения \( y(x) \)откладываются на оси ординат.</p>
<p></p>

<p>Приступим к построению блочной диаграммы Xcos.</p>
<p>1. Для начала, добавьте на рабочую область 3 блока интегратора <strong>INTEGRAL</strong><strong>_</strong><strong>m</strong> с нулевыми начальными значениями, 4 блока <strong>BIGSOM</strong><strong>_</strong><strong>f</strong><strong>, </strong>блок умножения переменных <strong>PRODUCT</strong> и блоки для задания коэффициентов <strong>CONST</strong> и <strong>GAINBLK</strong><strong>. </strong></p>
<p>Расположите указанные блоки в порядке использования в уравнениях. В результате должна получиться заготовка, приближенная к изображённой на рис. 57.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1l4jc3v/risunok-57-zagotovka-dlya-sozdaniya-blok-shemy-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1l4jc3v/risunok-57-zagotovka-dlya-sozdaniya-blok-shemy-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 57. Заготовка для создания блок-схемы системы (1)" title="Рисунок 57. Заготовка для создания блок-схемы системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 57. Заготовка для создания блок-схемы системы (1)</span>
</div> 
 <p>2. На построении соединительных линий между блоками Xcos для первых двух уравнений системы Рёсслера не будем подобно останавливаться, так как оно представляется легко осуществимым на основе приобретённого читателем опыта. Результат установления связей для переменных \( y, x \)&nbsp;&nbsp;отображен на рис. 58.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1hjlgo7/risunok-58-pervye-dva-uravneniya-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1hjlgo7/risunok-58-pervye-dva-uravneniya-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 58. Первые два уравнения системы (1)" title="Рисунок 58. Первые два уравнения системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 58. Первые два уравнения системы (1)</span>
</div> 

<p>3. Сбор блок-схемы третьего уравнения системы Рёсслера нужно начать со второго слагаемого, то есть осуществить произведение переменной \( z \)&nbsp;и скобки \( (x-c)\), см. рис. 59.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/12jddbs/risunok-59-blok-shema-chasti-tretego-uravneniya-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/12jddbs/risunok-59-blok-shema-chasti-tretego-uravneniya-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 59. Блок схема части третьего уравнения системы (1)" title="Рисунок 59. Блок схема части третьего уравнения системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 59. Блок схема части третьего уравнения системы (1)</span>
</div> 

<p>4. Осталось только подвести нужные соединительные линии на регулярные входы последнего сумматора и направить его выход на соответствующий интегратор, \( z \).</p>
<p>Результатом данных манипуляций будет схема, блок-изображённая на рис. 60.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/41vipa/risunok-60-blok-shema-sistemy-resslera-treh-dif-uravneniy.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/41vipa/risunok-60-blok-shema-sistemy-resslera-treh-dif-uravneniy.jpg" itemprop="contentUrl" alt="Рисунок 60. Блок-схема системы Рёсслера трёх диф. уравнений" title="Рисунок 60. Блок-схема системы Рёсслера трёх диф. уравнений"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 60. Блок-схема системы Рёсслера трёх диф. уравнений</span>
</div> 

<p>5. Далее, необходимо добавить блоки для осуществления моделирования <strong>CLOCK</strong><strong>_</strong><strong>c</strong><strong>, </strong><strong>END</strong><strong>, </strong>проведя соединительные линии и настроив внутренние параметры блоков для моделирования на протяжении<strong> 300сек</strong>.</p>
<p>Для вывода фазовых траекторий, добавьте блок <strong>CSCOPXY</strong><strong>, </strong>на регулярные входы которого направьте интересующие нас переменные \( y, x \) для вывода графика \( y(x) \), а на управляющий вход &ndash; соединительную линию от индикатора отсчетов <strong>CLOCK</strong><strong>_</strong><strong>c</strong><strong>.</strong>&nbsp;</p>
<p>Обратите внимание, что названия входов блока <strong>CSCOPXY</strong> иллюстрируют построение функции \( y(x) \).</p>
<p>В результате блок-схема, реализующая построение траекторий аттрактора Рёсслера на фазовой плоскости примет вид, такой, как показано на рис. 61.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1bp7ytv/risunok-61-blok-shema-modelirovaniya-sistemy-resslera.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1bp7ytv/risunok-61-blok-shema-modelirovaniya-sistemy-resslera.jpg" itemprop="contentUrl" alt="Рисунок 61. Блок-схема моделирования системы Рёсслера" title="Рисунок 61. Блок-схема моделирования системы Рёсслера"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 61. Блок-схема моделирования системы Рёсслера</span>
</div> 

<p>Запустите моделирование на протяжении 300сек., настройте внутренние параметры блока <strong>CSCOPXY</strong> так, чтобы странный аттрактор хорошо вписывался бы в координатную сетку, как показано на рис. 62.</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1dzh3t/risunok-62-attraktor-resslera-na-fazovoy-ploskosti.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/1dzh3t/risunok-62-attraktor-resslera-na-fazovoy-ploskosti.jpg" itemprop="contentUrl" alt="Рисунок 62. Аттрактор Рёсслера  на фазовой плоскости" title="Рисунок 62. Аттрактор Рёсслера  на фазовой плоскости"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 62. Аттрактор Рёсслера  на фазовой плоскости</span>
</div> 

<p>Итак, результатом моделирования бифуркаций аттрактора Рёсслера будет фазовая траектория \( y(x) \), иллюстрирующая сценарий перехода к хаосу через каскады бифуркаций удвоения периода Фейгенбаума, субгармонические каскады и гомоклинический каскад бифуркаций.</p>


<h2>Построение трёхмерного графика в Xcos</h2>
<p>Для большей наглядности результата моделирования, заменим блок <strong>CSCOPXY</strong> блоком <strong>CSCOPXY</strong><strong>3</strong><strong>D</strong><strong>.</strong></p>
<p>Функциональный блок <img class="image-seftcontainer" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/91l8jj/stroim-dvumernyy-i-trehmernyy-grafiki-na-fazovoy-ploskosti-v-xcos.jpg" alt="Строим двумерный и трёхмерный графики на фазовой плоскости в Xcos" title="Строим двумерный и трёхмерный графики на фазовой плоскости в Xcos"/>
<strong>&nbsp;</strong>располагается на палитре<strong> &laquo;Регистрирующие устройства&raquo; </strong>и служит он для отображения трёхмерной системы координат, что становится понятно из его названия.</p>
<p>Изменённая часть блок-схемы и результат моделирования аттрактора Рёсслера представлены на рис. 63а,б.</p>


<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/crsq6n/risunok-63a-modelirovanie-3d-sistemy-resslera---dobavlenie-bloka-cscopxy3d-v-blok-shemu.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/crsq6n/risunok-63a-modelirovanie-3d-sistemy-resslera---dobavlenie-bloka-cscopxy3d-v-blok-shemu.jpg" itemprop="contentUrl" alt="Рисунок 63a.Моделирование 3D системы Рёсслера - добавление блока CSCOPXY3D в блок-схему" title="Рисунок 63a.Моделирование 3D системы Рёсслера - добавление блока CSCOPXY3D в блок-схему"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 63a.Моделирование 3D системы Рёсслера - добавление блока CSCOPXY3D в блок-схему</span>
</div> 

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/220sjh/risunok-63b-rezultat-ispolzovaniya-xcos-bloka-generacii-trehmernoy-setki-koordinat.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/220sjh/risunok-63b-rezultat-ispolzovaniya-xcos-bloka-generacii-trehmernoy-setki-koordinat.jpg" itemprop="contentUrl" alt="Рисунок 63б.Результат использования Xcos блока генерации трёхмерной сетки координат" title="Рисунок 63б.Результат использования Xcos блока генерации трёхмерной сетки координат"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 63б.Результат использования Xcos блока генерации трёхмерной сетки координат</span>
</div> 


<h2>Построение 3D графика с помощью контекста в Xcos</h2>

<p>Рассмотрим ещё один способ построения фазового портрета систем дифференциальных уравнений, теперь уже с использованием <strong>контекста</strong> и блоков буферизации данных <strong>TOWS_c</strong>.</p>
<p>Добавьте 3 блока буферизации <strong>TOWS_c</strong> &ndash; по одному для каждой переменной моделируемой системы.</p>
<p>&nbsp;Во внутренних параметров каждого из блоков <strong>TOWS_c</strong> укажите число запоминаемых точек = <strong>10000</strong> и задайте ассоциируем имена переменных&nbsp; <strong>x</strong><strong>_</strong><strong>var</strong><strong>, y_var, </strong><strong>z</strong><strong>_</strong><strong>var</strong> в соответствии с сигналами, подающимися на регулярные входы&nbsp; <strong>TOWS_c </strong>(см. рис. 64).</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/gn34ic/risunok-64-bloki-buferizacii-vklyuchennye-blok-shemu-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/gn34ic/risunok-64-bloki-buferizacii-vklyuchennye-blok-shemu-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 64. Блоки буферизации, включенные блок-схему системы (1)" title="Рисунок 64. Блоки буферизации, включенные блок-схему системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 64. Блоки буферизации, включенные блок-схему системы (1)</span>
</div> 

<p>Теперь значения переменных \( x,y,z \) для всех временных отсчетов записываются в одноимённые переменные <strong>x</strong><strong>_</strong><strong>var</strong><strong>, y_var, </strong><strong>z</strong><strong>_</strong><strong>var</strong><strong>. </strong>Эти переменные можно использовать в контексте для построения графиков посредством стандартных Scilab &ndash; функций, например <strong>plot</strong><strong>() </strong>и <strong>param</strong><strong>3</strong><strong>d</strong><strong>(). </strong></p>
<p>Для того, чтобы отобразить две системы координат в одном графическом окне, добавьте в контекст следующие строки:</p>

<div class="image-container">
<p><b>На этом месте располагается листинг, который не может быть правильно отображен в rss-ленте. Перейдите к оригинальной статье: <a href='http://inclab.ru/articles/postroeniyu-fazovogo-portreta-v-xcos'>http://inclab.ru/articles/postroeniyu-fazovogo-portreta-v-xcos</a></b></p>
<span class="image-description text-italic">Графики в контексте Xcos.</span>
</div>	

<p>После запуска моделирования, появится одно графическое окно: на первой координатной сетке будут зависимости \( x(t), y(t), z(t) \), а на второй &ndash; трёхмерный график аттрактора Рёсслера. как на рис. 65.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/postroeniyu-fazovogo-portreta-v-xcos/5z840w/risunok-65-rezultat-ispolzovaniya-blokov-buferizacii-i-konteksta-dlya-vyvoda-grafikov-sistemy-ressle.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/postroeniyu-fazovogo-portreta-v-xcos/5z840w/risunok-65-rezultat-ispolzovaniya-blokov-buferizacii-i-konteksta-dlya-vyvoda-grafikov-sistemy-ressle.jpg" itemprop="contentUrl" alt="Рисунок 65. Результат использования блоков буферизации и контекста для вывода графиков системы Рёсслера (1)" title="Рисунок 65. Результат использования блоков буферизации и контекста для вывода графиков системы Рёсслера (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 65. Результат использования блоков буферизации и контекста для вывода графиков системы Рёсслера (1)</span>
</div> 






<p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/postroeniyu-fazovogo-portreta-v-xcos'>http://inclab.ru/articles/postroeniyu-fazovogo-portreta-v-xcos</a><p>]]></description>
			<pubDate>Thu, 03 Jun 2021 16:59:31 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Математическая модель SIR взаимодействия трёх популяций, её реализация в среде Xcos]]></title>
			<link>http://inclab.ru/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy</link>
			<guid>http://inclab.ru/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Математическая модель SIR взаимодействия трёх популяций, её реализация в среде Xcos <p>Рассмотрим простейшую модель распространения болезни в обществе. Обозначим через \( s(t) \)&nbsp;- долю особей, потенциально подверженных заболеванию, \( i(t) \)&nbsp;- долю уже заболевших (и потенциально заразных) особей, а через \( r(t) \)&nbsp;- число выздоровевших и, следовательно, приобрётших иммунитет к болезни. В данных обозначениях математическая модель течения болезни в трёх&nbsp; взаимодействующих популяциях представима в виде:</p>

<p class="text-center">
(1)\begin{cases} \dot{s}=-as(t)i(t) \\ \dot{i}=as(t)i(t)-bi(t) \\ \dot{r}=bi(t)  \end{cases}  
</p>
<p class="text-center">\( a>0, b>0 \)</p>

<p>Создание блок-схемы, описывающей взаимодействие трёх популяций, как и <a href="http://inclab.ru/xcos/ispolzovanie-simvolnyh-parametrov-i-konteksta-v">в предыдущем случае</a>, начнём с задания положительных коэффициентов \( a=1, b=0.3 \) через контекст. Кроме того, зададим начальные значения \( s_0=0.999, i_0=0.001 \), обозначающие долю особей, восприимчивых и не восприимчивых&nbsp; к болезни соответственно.</p>
<p>Далее добавим на рабочую область три блока интегратора <strong>INTEGRAL</strong><strong>_</strong><strong>m</strong> с настроенными внутренними параметрами, один блок сумматора <strong>BIGSOM</strong><strong>_</strong><strong>f</strong> и два блока усилителя <strong>GAINBLK</strong> с параметрами \( a,b \).</p>
<p>В итоге получим заготовку, изображённую на рис. 51.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/1q6lf7z/risunok-51-ishodnye-bloki-dlya-sozdaniya-blok-shemy-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/1q6lf7z/risunok-51-ishodnye-bloki-dlya-sozdaniya-blok-shemy-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 51. Исходные блоки для создания блок-схемы системы (1)" title="Рисунок 51. Исходные блоки для создания блок-схемы системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 51. Исходные блоки для создания блок-схемы системы (1)</span>
</div> 
   
<p>Далее замоделируем правую часть уравнения \( \dot{s}=-as(t)i(t) \) как произведение двух фазовых переменных, усиленное на величину \( -a \). <br /> </p>
<p>В результате получим схему, изображенную на рис. 52</p>
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/5jiesn/risunok-52-blok-shema-pervogo-uravneniya-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/5jiesn/risunok-52-blok-shema-pervogo-uravneniya-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 52. Блок-схема первого уравнения  системы (1)" title="Рисунок 52. Блок-схема первого уравнения  системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 52. Блок-схема первого уравнения  системы (1)</span>
</div> 
 
<p>Соединительные линии для второго и третьего уравнений проводятся по известным уже принципам умножения фазовых переменных с помощью блока <strong>PRODUCT</strong> и их последующего усиления через блок <strong>GAINBLK</strong><strong>. </strong></p>
<p>Интересным в рассматриваемом примере является второе уравнение \( \dot{i}=as(t)i(t)-bi(t) \)&nbsp;рассматриваемой системы (1). Дело в том, что оба слагаемых, стоящих в правой части данного уравнения, входят в состав первого и третьего уравнений с теми же коэффициентами усиления, но противоположными знаками. Поэтому добавлять дополнительные блоки усилителей не нужно, достаточно распараллелить соответствующие соединительные линии блоков и отредактировать знаки слагаемых блока <strong>BIGSOM</strong><strong>_</strong><strong>f</strong> , как показано на рис. 53.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/4pdxha/risunok-53-blok-shema-dif-uravneniy-sistemy-1.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/4pdxha/risunok-53-blok-shema-dif-uravneniy-sistemy-1.jpg" itemprop="contentUrl" alt="Рисунок 53. Блок-схема диф.уравнений системы (1)" title="Рисунок 53. Блок-схема диф.уравнений системы (1)"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 53. Блок-схема диф.уравнений системы (1)</span>
</div> 

<p>Для вывода графического решения рассматриваемой системы трёх взаимодействующих популяций, воспользуемся приёмом, рассмотренным в <a href="http://inclab.ru/xcos/ispolzovanie-simvolnyh-parametrov-i-konteksta-v">предыдущей статье</a>. Добавим блоки <strong>TOWS_c, </strong><strong>CLOCK</strong><strong>_</strong><strong>c</strong><strong>, </strong><strong>END</strong><strong>, </strong>проведя соединительные линии и настроив их внутренние параметры для моделирования на протяжении<strong> 20сек., </strong>как показано на рис. 54.</p>
 
<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/l6ywt/risunok-54-xcos-model-rasprostraneniya-bolezni-v-obschestve.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/l6ywt/risunok-54-xcos-model-rasprostraneniya-bolezni-v-obschestve.jpg" itemprop="contentUrl" alt="Рисунок 54. Xcos модель распространения болезни в обществе." title="Рисунок 54. Xcos модель распространения болезни в обществе."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 54. Xcos модель распространения болезни в обществе.</span>
</div> 

<p>Далее необходимо установить контекст, как показано на рис. 55. </p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/m4b5af/risunok-55-zadanie-vnutrennih-parametrov-i-konteksta-sir-modeli.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/m4b5af/risunok-55-zadanie-vnutrennih-parametrov-i-konteksta-sir-modeli.jpg" itemprop="contentUrl" alt="Рисунок 55. Задание внутренних параметров и контекста SIR-модели" title="Рисунок 55. Задание внутренних параметров и контекста SIR-модели"/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 55. Задание внутренних параметров и контекста SIR-модели</span>
</div> 


<p>Результаты моделирования представлены на рис. 56. Моделирование проводилось для   с шагом дискретизации 0.1.</p>

<div class="image-container" itemscope itemtype="http://schema.org/ImageObject">
    <picture>
        <source type="image/webp" srcset="/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/epyt4u/risunok-56-graficheskoe-predstavlenie-techeniya-bolezni-opisyvaemogo-sistemoy-1-v-obschestve.webp"/>
        <img class="image-in-container" src="http://inclab.ru/images/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy/epyt4u/risunok-56-graficheskoe-predstavlenie-techeniya-bolezni-opisyvaemogo-sistemoy-1-v-obschestve.jpg" itemprop="contentUrl" alt="Рисунок 56. Графическое представление течения болезни, описываемого системой (1), в обществе." title="Рисунок 56. Графическое представление течения болезни, описываемого системой (1), в обществе."/>
    </picture>
    <span class="image-description text-italic" itemprop="description">Рисунок 56. Графическое представление течения болезни, описываемого системой (1), в обществе.</span>
</div> 

<p>На основе результатов моделирования, можно сделать вывод, что доля переболевших и приобретших иммунитет особей, растёт со временем, в то время, как число потенциально подверженных заболеванию падает. Процент заражённых особей сначала возрастает, достигая своего максимума в точке, называемой «пиком эпидемии», а далее снижается, стремясь к нулю.</p><p>Оригинальный адрес статьи: <a href='http://inclab.ru/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy'>http://inclab.ru/articles/matematicheskaya-model-sir-vzaimodeystviya-treh-populyaciy</a><p>]]></description>
			<pubDate>Thu, 03 Jun 2021 17:00:26 +0400</pubDate>
		</item>
		<item>
			<title><![CDATA[Задание переменных в Xcos на примере системы 2-х ОДУ]]></title>
			<link>http://inclab.ru/articles/ispolzovanie-simvolnyh-parametrov-i-konteksta-v</link>
			<guid>http://inclab.ru/articles/ispolzovanie-simvolnyh-parametrov-i-konteksta-v</guid>
			<description><![CDATA[<img src="http://inclab.ru" />Использование символьных параметров и контекста в xcos на примере визуального моделирования системы Хищник-Жертва<p>Приступая к моделированию некоторой динамической системы, часто бывает нужно не раз использовать один и тот же параметр в разных уравнениях или задавать некоторые коэффициенты как функции некоторой переменной величины. Для того, чтобы не создавать одинаковые функциональные блоки, обременяющих схему и для реализации сложных зависимостей, в Xcos предусмотрены <em>символьные параметры </em>и <em>контекст</em>.</p>
<p><strong>Контекст</strong> &ndash; это код на языке Scilab, который может содержать как простое декларирование переменных, так и создание полноценных самостоятельных Scilab &ndash;функций.</p>
<p><strong>Символьные параметры</strong> &ndash; это непосредственно сами переменные, заданные в контексте, к которым можно обратиться по имени для использования в функциональных блоках при создании блок-схемы.</p>
<p>Рассмотрим использование контекста и символьных параметров на примере создания блок-схемы системы Хищник-Жертва. Данная биологическая система описывает взаимодействие двух вид