0

Ветвящиеся алгоритмы в матлабе

ОСНОВЫ ПРОГРАММИРОВАНИЯ MATLAB

Краткие сведения о программировании в MATLAB[1]

Основные арифметические операции в MATLAB: сложение, вычитание, умножение , деление и возведение в степень. Операции умножения, деления и возведения в степень рассчитаны на работу с матрицами, поэтому при поэлементных операциях они записываются как .*, ./ и .^ (т.е. перед знаком операции ставится точка).

ОСНОВНЫЕ ОПЕРАТОРЫ

1.1. Оператор циклаfor

Оператор предназначен для выполнения заданного числа повторяющихся действий. Самое простое использование оператора for осуществляется следующим образом:

for count = start:step:final
команды MatLab
end

Здесь count – переменная цикла, start – ее начальное значение, final – конечное значение, а step – шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака

% программа построения семейства кривых
x = [0:pi/30:2*pi];
for a = -0.1:0.02:0.1
y = exp(-a*x).*sin(x);
hold on
plot(x, y)
end

Примечание. Редактор М-файлов автоматически предлагает расположить операторы внутри цикла с отступом от левого края. Используйте эту возможность для удобства работы с текстом программы.

Циклы for могут быть вложены друг в друга, при этом переменные вложенных циклов должны быть разными.

Цикл for оказывается полезным при выполнении повторяющихся похожих действий в том случае, когда их число заранее определено. Обойти это ограничение позволяет более гибкий цикл while.

Оператор цикла while

Рассмотрим пример на вычисление суммы, похожий на пример из предыдущего пункта. Требуется найти сумму ряда для заданного x(разложение в ряд ):
.

Сумму можно накапливать до тех пор, пока слагаемые являются не слишком маленькими, скажем больше по модулю Циклом for здесь не обойтись, так как заранее неизвестно число слагаемых. Выход состоит в применении цикла while, который работает, пока выполняется условие цикла:

while
команды MatLab
end

В данном примере условие цикла предусматривает, что текущее слагаемое больше . Для записи этого условия используется знак больше (>). Текст файл-функции mysin, вычисляющей сумму ряда, приведен в следующем листинге.

Листинг файл-функции mysin, вычисляющей синус разложением в ряд

function S = mysin(x)
% Вычисление синуса разложением в ряд
% Использование: y = mysin(x), -pi 1.0e-10
S = S + (-1)^k*x.^(2*k+1)/factorial(2*k+1);
k = k + 1;
end

Обратите внимание, что у цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начала цикла k присвоить нуль, а внутри цикла увеличивать k на единицу.
Условие цикла while может содержать не только знак >. Для задания условия выполнения цикла допустимы также другие операции отношения, приведенные в табл. 1.

Таблица 1. Операции отношения

Обозначение Операция отношения
== Равенство
Больше
= Больше или равно

=

Не равно

Задание более сложных условий производится с применением логических операторов. Например, условие состоит в одновременном выполнении двух неравенств и , и записывается при помощи логического оператора and

and(x >= -1, x = -1) & (x

while (abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10)&(k 1.0e-10), k > y = Rfun(0.2)
результат комплексный
y =
0 + 0.97979589711327i

Файл-функция Rfun только предупреждает о том, что ее значение комплексное, а все вычисления с ней продолжаются. Если же комплексный результат означает ошибку вычислений, то следует прекратить выполнение функции, используя команду error вместо warning.

Оператор ветвления if-elseif-else

В общем случае применение оператора ветвления if-elseif-else выглядит следующим образом:

if условие 1
команды MatLab
elseif условие 2
команды MatLab
elseif условие 3
команды MatLab
. . . . . . . . . . .
elseif условие N
команды MatLab
else
команды MatLab
end

В зависимости от выполнения того или иного из N условий работает соответствующая ветвь программы, если не выполняется ни одно из N условий, то реализуются команды MatLab, размещенные после else. После выполнения любой из ветвей происходит выход из оператора. Ветвей может быть сколько угодно или только две. В случае двух ветвей используется завершающее else, а elseif пропускается. Оператор должен всегда заканчиваться end.
Пример использования оператора if-elseif-else приведен в следующем листинге.

function ifdem(a)
% пример использования оператора if-elseif-else

if (a == 0)
warning(‘а равно нулю’)
elseif a == 1
warning(‘а равно единице’)
elseif a == 2
warning(‘а равно двум’)
elseif a >= 3
warning(‘а, больше или равно трем’)
else
warning(‘а меньше трех, и не равно нулю, единице, двум’)
end

1.5. Оператор ветвленияswitch

Для осуществления множественного выбора или ветвления может применяться оператор switch.Он является альтернативой оператору if-elseif-else. В общем случае применение оператора ветвления switch выглядит следующим образом:

switch switch_выражение
case значение 1
команды MatLab
case значение 2
команды MatLab
. . . . . . . . . . .
case значение N
команды MatLab
case <значение N+1, значение N+2, …>
команды MatLab
. . . . . . . . . . . .
case <значение NM+1, значение NM+2,…>
otherwise
команды MatLab
end

В данном операторе сначала вычисляется значение switch_выражения (это может быть скалярное числовое значение либо строка символов). Затем это значение сравнивается со значениями: значение 1, значение 2, …, значение N, значение N+1, значение N+2, …, значение NM+1, значение NM+2,… (которые также могут быть числовыми либо строковыми). Если найдено совпадение, то выполняются команды MatLab, стоящие после соответствующего ключевого слова case. В противном случае выполняются команды MatLab, расположенные между ключевыми словами otherwise и end.

Строк с ключевым словом case может быть сколько угодно, но строка с ключевым словом otherwise должна быть одна.

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

Применение switch поясняет следующий пример:

function demswitch(x)
a = 10/5 + x
switch a
case -1
warning(‘a = -1’)
case 0
warning(‘a = 0’)
case 1
warning(‘a = 1’)
case <2, 3, 4>
warning(‘a равно 2 или 3 или 4’)
otherwise
warning(‘a не равно -1, 0, 1, 2, 3, 4’)
end

>> x = -4
demswitch(x)
a =
1
warning: a = 1
>> x = 1
demswitch(x)
a =
6
warning: a не равно -1, 0, 1, 2, 3, 4

Читайте также:  Зачем нужны чулки девушке

1.6. Оператор прерывания циклаbreak

При организации циклических вычислений следует заботиться о том, чтобы внутри цикла не возникло ошибок. Например, пусть задан массив x, состоящий из целых чисел, и требуется сформировать новый массив y по правилу y(i) = x(i+1)/x(i). Очевидно, что задача может быть решена при помощи цикла for. Но если один из элементов исходного массива равен нулю, то при делении получится inf, и последующие вычисления могут оказаться бесполезными. Предотвратить эту ситуацию можно выходом из цикла, если текущее значение x(i) равно нулю. Следующий фрагмент программы демонстрирует использование оператора break для прерывания цикла:

for x = 1:20
z = x-8;
if z==0
break
end
y = x/z
end

Как только переменная z принимает значение 0, цикл прерывается.

Оператор break позволяет досрочно прервать выполнение циклов for и while. Вне этих циклов оператор break не работает.

Если оператор break применяется во вложенном цикле, то он осуществляет выход только из внутреннего цикла.

ПОСТРОЕНИЕ ГРАФИКОВ

Простой пример построения двух графиков в одном графическом окне:

x = [0:0.1:7];
f = exp(-x);
subplot(1, 2, 1)
plot(x, f)
g = sin(x);
subplot(1, 2, 2)
plot(x, g)

Пример построения семейства кривых в одном окне

%программа для построения семейства кривых
x = [0:pi/30:2*pi];
for a = -0.1:0.02:0.1
y = exp(-a*x).*sin(x);
hold on
plot(x, y)
end

Требуется составить в системе MATLAB (на М-языке) логическое выражение принадлежности точки заданному интервалу:

Пример выполнения лабораторной работы.

Записать логическое выражение принадлежности точки заданному интервалу: а) хg[-6;6]; б) хе(-10; 10]U[12;20].

Пример выполнения лабораторной работы.

Для выполнения создается М-файл. Ниже приведен текст М-файла.

x=input(‘Введите х=’); y=input(‘Введите у=’); z=input(‘Введите z=’); disp(‘x=’); disp(x); disp(‘y=’); disp(y); disp(‘z=’); disp(z); a=(x-3*y+2*z)/2; b=y-x; c=x+z; if (b

Результаты расчета в командном окне при х=1, у=2, z=3: х=

Поясним, что введение в программу дополнительных переменных, в частности а, Ь, с для обозначения соответственно (x-3*y+2*z) /2, у-х и x+z, использовано для улучшения текста программы и избавления от повторных вычислений выражений (x-3*y+2*z) /2, у-х и x+z. Альтернативный вариант текста М-файла приведен ниже.

Министерство образования Республики Беларусь

"Гомельский государственный технический университет

Кафедра "Информационные технологии"

РЕШЕНИЕ ИНЖЕНЕРНЫХ ЗАДАЧ В СИСТЕМЕ MATLAB

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

Решение инженерных задач в системе matlab: Практическое пособие по курсу "Информатика" для студентов технических специальностей дневного отделения/ Авт.- сост. , , . – Гомель: ГГТУ им. П.О. Сухого, 2004. – 36с.

© Учреждение образования "Гомельский государственный технический университет имени ", 2004

1 Программирование базовых алгоритмов в Matlab

1.1 Обработка М-файлов

М-файл представляет собой программу, состоящую из команд и выражений системы MatLab, хранящуюся на диске в виде файла с типом .m. Создать новый М-файл можно с помощью команд основного меню

после чего на экране появляется окно редактора М-файлов.

Окно содержит сервисно-командную область (три верхние строки) и область ввода и редактирования М-файла. Для удобства отладки строки команд программы пронумерованы. Вид окна редактора М-файлов приведен на рисунке 1.1.

Рисунок 1.1 – Вид окна редактора М-файлов

Последовательность обработки М-файла такова.

1. Создать или отредактировать М-файл

2. Записать файл на диск с именем, содержащим тип .m

3. Запустить программу на выполнение, указав имя М-файла в командной строке окна команд Command Window

4. Если компиляция программы прошла успешно, то результаты выполнения программы будут отражены в командном окне.

5. Если в результате компиляции были найдены ошибки в программе, то необходимо вызвать программу в окно М-файла и повторить последовательность обработки программы, начиная с п.1, исправив ошибки

6. Вывести текст программы на принтер можно с помощью команд

меню команд окна редактора М-файлов

Вывести результаты расчетов по программе можно с помощью команд основного меню рабочего стола Matlab:

File Print (для вывода всей информации командного окна),

File Print Selection (для вывода выделенной области командного окна).

При работе с программой пользователь может разместить окна на экране дисплея так, чтобы был виден текст программы (окно М-файла), результаты расчетов (командное окно) и переменные, размещенные в памяти (окно рабочей области памяти). Пример такого удобного размещения окон приведен на рисунке 1.2.

Рисунок 1.2 – Работа в командном режиме и в режиме создания М-файлов.

1.2 Программирование линейных алгоритмов

1.2.1 Оператор присваивания

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

Общий вид оператора присваивания:

В качестве параметра Имя_переменной может выступать имя простой переменной, структурированной переменной (вектора, матрицы), имя функции. В качестве параметра Выражение применяется арифметическое, логическое или строковое выражение.

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

Ниже приведены примеры правильной записи операторов присваивания.

disp(‘ числа положительные’),

Например, функция findobj(gcf,’Tag’,’edit1’) возвращает дескриптор элемента интерфейса, размещенного в текущем окне и имеющего имя edit1.

Для определения значения свойства элемента используется функция

Например, функция Get(gcf, ‘BackgroundColor’) возвращает цвет фона текущего графического окна.

Для придания свойству элемента определенного значения используется команда

Например, после выполнения набора команд

в поле элемента с именем Text1 активного графического окна будет выведен текст «С новым годом!».

Читайте также:  Веб камера для удаленного наблюдения

4.3 Особенности реализации графического интерфейса с помощью подсистемы GUIDE

4.3.1 Ввод и вывод данных с помощью элементов интерфейса

Для ввода значения переменных рекомендуется использовать такой элемент управления как окно редактируемого текста edit text. Этот элемент при выполнении программы ведет себя как обычный однострочный текстовый редактор, при этом текст, набранный в окне ввода, помещается в свойство String.

Чтобы набранное в окне ввода значение присвоить переменной, нужно с помощью функции findobj определить дескриптор элемента edit text, а затем с помощью функции Get присвоить переменной значение свойства String . При необходимости следует также применить одну из функций преобразования типов.

Ниже приведен фрагмент m-файла, в котором вводится значение числовой переменной x.

h1=findobj(gcf,’tag’,’edit1′); % Определение дескриптора элемента с меткой

x=str2num(get(h1,’string’)); % Функц. get возвращает значение свойства

% string элемента с дескриптором h1,

% а str2num преобразует строку в число.

Для вывода данных рекомендуется использовать такой элемент управления как окно фиксированного текста static text. Текст, отображаемый в поле элемента, помещается в свойство String.

Чтобы вывести значение переменной в поле элемента static text в графическом окне, нужно с помощью функции findobj определить дескриптор элемента static text, а затем с помощью функции Set в свойство String поместить значение переменной. При необходимости следует также применить одну из функций преобразования типов.

В приведенном ниже фрагменте m-файла осуществляется вывод значений переменных x и y.

set(h,’string’, strcat(‘x=’, num2str(x), ‘ y=’, num2str(y)))

Здесь функция num2str преобразует числа в строки, а функция strcat осуществляет конкатенацию строк.

Результатом выполнения указанных команд будет строка в поле элемента

4.3.2 Построение графиков с помощью элемента axes

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

В таблице 4.2 приводятся некоторые дополнительные свойства объекта axes, отсутствующие в таблице 4.1.

Таблица 4.2 – Дополнительные свойства элемента axes

Контур координатных осей:

отображать (on), не отображать (off).

Типы линий для сетки

Типы линий для вывода нескольких графиков

Xgrid, Ygrid, ZGrid

Включить/ выключить координатную сетку по соответствующей оси

XLabel, YLabel, ZLabel

Xcolor, Ycolor, ZColor

Цвета линий координатных осей, маркеров, меток и сетки

Xscale, Yscale, ZScale

Масштаб по осям: линейный(linear),

4.3.3 Порядок разработки графического интерфейса

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

– Создать отдельную папку для разрабатываемого проекта;

– Запустить утилиту GUIDE системы Matlab;

Разместить в графическом окне необходимые элементы интерфейса;

– С помощью редактора Property Inspector установить нужные значения свойств для каждого элемента;

– Создать m-файлы, содержащие программы ответных вызовов, которые будут выполняться при активизации элементов (например, при нажатии на кнопку push button) и сохранить их в созданной папке;

– В свойство Callback элементов, для которых создавались программы обратных вызовов, записать имена соответствующих m-файлов;

– Сохранить полученный проект в созданной папке;

– Запустить созданное приложение на выполнение и проверить правильность его работы.

Для примера рассмотрим реализацию задачи построения графика функции sin(x) на интервале изменения аргумента от xнач. до xкон. с шагом ∆x.


На рисунке 4.2 приводится вид редактируемого поля GUIDE с размещенными на нем элементами интерфейса, а на рисунке 4.3 – графическое окно в процессе выполнения спроектированного приложения.

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

h1=findobj(gcf,’tag’,’edit1′); xn=str2num(get(h1,’string’)); % ввод исходных

h2=findobj(gcf,’tag’,’edit2′); xk=str2num(get(h2,’string’)); % данных

x=xn:dx:xk; y=sin(x); plot(x, y); grid on % построение графика

3 Приемы моделирования в Simulink

3.1 Общие сведения о пакете Simulink

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

Simulink является автономным пакетом MATLAB. Модели, созданные в Simulink, построены на основе внутреннего языка MATLAB, которые могут быть откорректированы в MATLAB, и данные из MATLAB могут быть переданы для обработки в Simulink. Часть входящих в состав пакетов имеет инструменты, встраиваемые в Simulink (например, LTI-Viewer приложения Control System Toolbox – пакета для разработки систем управления). Имеются также дополнительные библиотеки блоков для разных областей применения (например, Power System Blockset – моделирование электротехнических устройств, Digital Signal Processing Blockset – набор блоков для разработки цифровых устройств и т. д.).

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

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

Преимущество Simulink заключается также в том, что он позволяет пополнять библиотеки блоков с помощью подпрограмм написанных как на языке MATLAB, так и на языках С + +, Fortran и Ada.

3.2 Интерфейс пакета Simulink

Для запуска программы необходимо предварительно запустить пакет MATLAB. После открытия основного окна программы MATLAB нужно запустить программу Simulink. Это можно сделать одним из трех способов:

Читайте также:  Где в айфоне найти удаленные файлы

· Нажать кнопку (Simulink)на панели инструментов командного окна MATLAB.

· В командной строке главного окна MATLAB напечатать Simulink и нажать клавишу Enter на клавиатуре.

· Выполнить команду Open… в меню File и открыть файл модели (mdl – файл).

Последний вариант удобно использовать для запуска уже готовой и отлаженной модели, когда требуется лишь провести расчеты и не нужно добавлять новые блоки в модель. Использование первого и второго способов приводит к открытию окна обозревателя разделов библиотеки Simulink (рисунок 4.1).

Рисунок 4.1. Окно обозревателя разделов библиотеки Simulink

Окно обозревателя библиотеки блоков содержит следующие элементы (рисунок 4.1):

– Заголовок, с названием окна – Simulink Library Browser.

– Меню, с командами File, Edit, View, Help.

– Панель инструментов, с ярлыками наиболее часто используемых команд.

– Окно комментария для вывода поясняющего сообщения о выбранном блоке.

– Список разделов библиотеки, реализованный в виде дерева.

– Окно содержимого раздела библиотеки (список вложенных разделов библиотеки или блоков)

– Строка состояния, содержащая подсказку по выполняемому действию.

На рисунке 4.1 выделена основная библиотека Simulink (в левой части окна) и показаны ее разделы (в правой части окна).

Библиотека Simulink содержит следующие основные разделы:

Continuous – линейные блоки.

Discrete – дискретные блоки.

Functions & Tables – функции и таблицы.

Math – блоки математических операций.

Nonlinear – нелинейные блоки.

Signals & Systems – сигналы и системы.

Sinks – регистрирующие устройства.

Sources — источники сигналов и воздействий.

Subsystems – блоки подсистем.

При выборе соответствующего раздела библиотеки в правой части окна отображается его содержимое (рисунок 4.2).

Рисунок 4.2. Окно обозревателя с набором блоков раздела библиотеки Continuous

3.3 Создание и редактирование модели в Simulink

Для создания модели в среде SIMULINK необходимо последовательно выполнить ряд действий.

Создание файла модели. Создать новый файл модели с помощью команды File/New/Model, или используя кнопку на панели инструментов.

Выбор блоков модели. Расположить блоки в окне модели. Для этого необходимо открыть соответствующий раздел библиотеки (Например, Sources – Источники). Далее, указав курсором на требуемый блок и нажав на левую клавишу “мыши” – “перетащить” блок в созданное окно. Клавишу мыши нужно держать нажатой. На рисунке 4.3 показано окно модели, содержащее блоки.

Рисунок 4.3. Окно модели, содержащее блоки

Редактирование блоков модели. Для удаления блока необходимо выбрать блок (указать курсором на его изображение и нажать левую клавишу “мыши”), а затем нажать клавишу Delete на клавиатуре.

Для изменения размеров блока требуется выбрать блок, установить курсор в один из углов блока и, нажав левую клавишу “мыши”, изменить размер блока (курсор при этом превратится в двухстороннюю стрелку).

Для редактирования блока, нужно изменить параметры блока, установленные пакетом “по умолчанию”. Для этого необходимо дважды щелкнуть левой клавишей “мыши”, указав курсором на изображение блока. Откроется окно редактирования параметров данного блока. При задании численных параметров следует иметь в виду, что в качестве десятичного разделителя должна использоваться точка, а не запятая. После внесения изменений нужно закрыть окно кнопкой OK. На рисунке 4.4 в качестве примера показаны блок, моделирующий синусоидальный сигнал с заданной частотой, амплитудой, фазой и смещением, и окно редактирования параметров данного блока.

Рисунок 4.4. Блок, моделирующий синусоидальный сигнал с заданной частотой, амплитудой, фазой и смещением, и окно редактирования параметров блока

Соединение блоков модели. После установки на схеме всех блоков из требуемых библиотек нужно выполнить соединение элементов схемы. Для соединения блоков необходимо указать курсором на “выход” блока, а затем, нажать и, не отпуская левую клавишу “мыши”, провести линию к входу другого блока. После чего отпустить клавишу. В случае правильного соединения изображение стрелки на входе блока изменяет цвет. Для создания точки разветвления в соединительной линии нужно подвести курсор к предполагаемому узлу и, нажав правую клавишу “мыши”, протянуть линию. Для удаления линии требуется выбрать линию (так же, как это выполняется для блока), а затем нажать клавишу Delete на клавиатуре. Схема модели, в которой выполнены соединения между блоками, показана на рисунке 4.5.

Рисунок 4.5. Схема модели

3.4 Запуск модели, анализ результатов

Запуск модели на выполнение осуществляется нажатием на панели инструментов кнопки (Start simulation). При этом в строке состояния демонстрируется текущее время расчета и процентное состояние расчета


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

Для сохранения расчетной схемы необходимо выбрать пункт меню File/Save As. в окне схемы и указав папку и имя файла. Следует иметь в виду, что имя файла не должно превышать 32 символов, должно начинаться с буквы и не может содержать символы кириллицы и спецсимволы. Это же требование относится и к пути файла (к тем папкам, в которых сохраняется файл). При последующем редактировании схемы можно пользоваться пунктом меню Fille/Save. При повторных запусках программы SIMULINK загрузка схемы осуществляется с помощью меню File/Open. в окне обозревателя библиотеки или из основного окна MATLAB.

Список использованных источников

1 MATLAB 6: учебный курс.- СПб.: «Питер», 2001.

2 Компьютер в математическом исследовании.- СПб.: «Питер», 2001.

3 Мартынов в MATLAB 6.- М.: КУДИЦ-ОБРАЗ, 2002.-352с.

Программирование базовых алгоритмов в Matlab

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *