Uploaded by Белый Ветер

Галушкин Н.Е. Высокоуровневые методы программирования Язык программирования MatLab часть 1

advertisement
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
министерство образования и науки
Российской Федерации
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
ФИЛИАЛ ЮФУ В Г. НОВОШАХТИНСКЕ
Н. Е. Галушкин
Высокоуровневые методы
программирования:
язык программирования MatLab
Учебник по дисциплине
«Высокоуровневые методы информатики и программирования»
для студентов специальности «Прикладная информатика»
Часть 1
Ростов-на-Дону
Издательство Южного федерального университета
2011
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
УДК 004.9
ББК 32.973.018.2
Г 16
Рецензенты:
доктор технических наук, профессор ЮРГТУ Привалов А. А.;
кандидат технических наук, доцент ЮРГУЭС Береза А. Н.
Учебник подготовлен и издан в рамках
национального проекта «Образование»
по «Программе развития федерального государственного
образовательного учреждения высшего профессионального образования
„Южный федеральный университет“ на 2007–2010 гг.»
Г 16
Галушкин Н. Е.
Высокоуровневые методы программирования. Язык
программирования MatLab: учебник. Часть 1 /
Н. Е. Галушкин. – Ростов н/Д: Изд-во ЮФУ, 2011. – 182 с.
ISBN 978-5-9275-0810-5
В настоящее время MatLab является самым мощным в мире компьютерным пакетом моделирования и программирования задач в любой области знания. Он содержит инструменты, позволяющие автоматизировать
разработку любых проектов и научных проблем, начиная от стадии накопления данных и завершая подготовкой документации. Поэтому он является базовым пакетом во многих университетах и научных центрах мира.
Однако в отечественной литературе крайне мало книг и особенно учебников по пакету Matlab. Данный учебник восполнит этот пробел.
ISBN 978-5-9275-0810-5
УДК 004.9
ББК 32.973.018.2
© Галушкин Н. Е., 2011
© Южный федеральный университет, 2011
©Оформление. Макет. Издательство
Южного федерального университета, 2011
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ВВЕДЕНИЕ
Система MatLab представляет собой уникальный сплав универсальных программных и алгоритмических средств с широкой
гаммой специализированных приложений. Многие учебные заведения используют MatLab при подготовке специалистов различного профиля. Для современного специалиста и научного работника
MatLab является незаменимым инструментом моделирования и исследования различных прикладных систем, прежде всего, за счет
создания новых приложений, используя программные и алгоритмические средства MatLab, а также возможности объединения модулей, разработанных в различных системах программирования
и использования готовых решений.
Одним из самых замечательных качеств системы MatLab является ее расширяемость. Любая новая функция или фрагмент
программы, записанные в виде m-файла, могут быть в дальнейшем
применены, наравне с тысячами уже заранее встроенных в систему мощных и гибких функций. Система MatLab имеет открытую
архитектуру, что дает полный доступ пользователям к ее кодам
на гибком и мощном (и в то же время простом) языке программирования этой системы. А с помощью пакетов расширения, MatLab
легко адаптируется к решению различных классов задач в любой
области знания. Поэтому пакет MatLab является базовым пакетом
во многих университетах и научных центрах мира. Однако в отечественной литературе крайне мало книг и особенно учебников по пакету MatLab. Данный учебник, возможно, восполнит этот пробел.
Учебник состоит из трех частей. В первой части рассмотрены
возможности пакета MatLab, синтаксис языка программирования
MatLab, и структурные методы программирования. Во второй части рассмотрены методы объектно-ориентированного и визуального программирования. Третья часть представляет собой справочник
по функциям общего назначения. Данные функции используются
всеми пользователями пакета MatLab независимо от области знания в которой они работают.
3
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
МОДУЛЬ 1. ВОЗМОЖНОСТИ ПАКЕТА MATLAB
Комплексная цель:
– дать классификацию современных языков программирования и место языка программирования MatLab среди данных
языков;
– дать классификацию современных математических пакетов
и место пакета MatLab среди данных пакетов;
– дать представление о возможностях пакета MatLab;
– описать интерфейс пакета MatLab.
1.1. Какой язык программирования выбрать?
Когда необходимо изучать программирование, то первый вопрос, который встает перед начинающим программистом – это
какой именно язык программирования нужно выбрать для изучения. В настоящее время существует более ста различных языков
программирования, из них несколько десятков языков довольно
широко используются профессиональными программистами.
Начинающему программисту очень трудно разобраться в этом
множестве различных языков программирования и правильно выбрать оптимальный язык необходимый для решения поставленных
задач. Правильный выбор языка программирования очень важен,
так как изучение языка программирования – это довольно трудная и длительная работа, требующая годы напряженного труда.
Возможности выбранного языка программирования начинающий
программист самостоятельно сможет оценить только после его изучения, поэтому ошибка в выборе языка приведет к значительным
потерям сил и времени программиста.
На заре программирования на персональных компьютерах
(80-е годы прошлого века) выбор языков программирования был
небольшой – Cu, Basic, Pascal, Fortran, Algol и т. д. Причем все
они были универсальными языками программирования. То есть
любую программу можно было написать на любом из этих языков
программирования. Отличались они между собой только синтаксисом написания программ и некоторыми программными возможностями. Поэтому выбор языка программирования в это время
не был, так уж значим.
4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.1. Какой язык программирования выбрать?
В настоящее время ситуация резко изменилась. Языки программирования стали специализированными и даже узко специализированными в зависимости от задач, которые решаются с помощью данных языков.
Например, если требуется написание базы данных, то в принципе их можно было бы написать на языке Basic или С++, однако,
в этом случае все пришлось бы писать с нуля, так как данные языки не приспособлены для написания баз данных. В этих языках
нет достаточно библиотек функций и объектов, необходимых для
создания баз данных. Поэтому данные функции и объекты пришлось бы писать с нуля. Все это сильно усложняет написание программ и требует от программиста очень высокой квалификации.
Для создания баз данных в настоящее время разработаны
специализированные языки программирования: MsSQL, MуSQL,
FoxPro и т. д.
Специализация языков программирования идет по двум
направлениям.
1. Специализация синтаксиса языка программирования под задачи, которые предполагается решать с помощью данного
языка.
2. Создание обширных библиотек функций и объектов предназначенных для решения определенного круга задач.
Дадим сначала краткую классификацию современных языков
программирования по типу задач, для которых они предназначены.
Системные задачи. Для программирования системных задач обычно используются следующие языки программирования:
Assembler, Cu, C++, в меньшей степени С#, Java. Данные языки
программирования предназначены для написания драйверов,
операционных систем (Assembler, Cu, C++), а также различных
программ для локальных и глобальных сетей (С#, Java). Однако
они могут быть также использованы и при написании прикладных
программ, таких как редакторы, электронные таблицы и т. д. Данные языки считаются языками программирования для профессионалов системщиков.
Программы общего пользования. Речь идет о написании прикладных программ для широкого круга пользователей, как правило, программистами не профессионалами. Это могут быть различные вычислительные программы, редакторы, электронные
5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.1. Какой язык программирования выбрать?
таблицы, простейшие базы данных и т. д. Для написания подобных
программ чаще всего используются следующие языки программирования: Basic, особенно Visual Basic, Pascal, Forth, Fort, Delph.
Особенно популярны среди программистов не профессионалов визуальные языки программирования (Visual Basic, Delph), которые
не требуют глубокого знания программирования, так как значительная часть программы пишется перетаскиванием 'мышкой' готовых компонент из библиотек в окно создаваемой программы.
Базы данных. Базы данных пишутся с использованием следующих языков программирования: MySQL, MSSQL, Oracle,
PostgreSQL, Interbase, VisualFoxPro, Delph.
Задачи искусственного интеллекта. Для программирования
задач искусственного интеллекта обычно используются следующие языки программирования: Lisp, SML, CaML, Haskell, Miranda,
Hope, Prolog, Multilisp, Commonlisp, Рефал, Planner, QA4, FRL,
KRL, QLisp.
Задачи Web-дизайна. Для программирования различных задач возникающих при разработке сайта используются следующие
языки программирования: PHP, HTML, XML, CSS, Tcl/Tk, Perl,
Java, CGI, JavaScript, VBScript.
Параллельные вычисления. То есть создание программ, в которых совокупность описанных процессов могут выполняться
одновременно или псевдопараллельно. Для написания таких программ используются языки программирования: MC#, Fun, Apl,
Alfl, PARAlfl, ML, SML, PPL/1, Hope, Miranda, Occam, PFOR,
Glypnir, Actus.
Научно-технические задачи. Для написания программ в различных областях науки и техники обычно используются следующие языки программирования: MatLab, Maple, Occam, PFOR,
Glypnir, Actus, ОВС-Фортран.
Предложенная классификация естественно не охватывает все
известные языки программирования, а только наиболее используемые. Кроме того, она субъективна, как и любая классификация,
так как очень трудно однозначно позиционировать язык программирования под определенный круг задач. Однако в целом предложенная классификация дает правильное представление об области
применимости определенных языков программирования.
6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.1. Какой язык программирования выбрать?
Данный учебник создается для обучения программированию
студентов специальности «Прикладная информатика». Эта специальность имеет множество узких специализаций в различных
областях науки и техники, а именно: прикладная информатика
в экономике, прикладная информатика в статистике, прикладная
информатика в научно-технических областях и т. д. Следовательно, необходимо обучить студентов программированию научнотехнических задач в различных областях науки и техники.
Для программирования научно-технических задач в настоящее время самым мощным языком программирования является
MatLab. Данный язык имеет два основных преимущества по сравнению со всеми другими языками программирования, а именно
следующие.
1. В языке MatLab основным элементом является матрица.
Во всех других языках программирования (Cu, C++, С#, Java,
Basic, Pascal и т. д.) основным элементом является число. Как
известно, при численном решении любых систем уравнений
(алгебраических, дифференциальных, дифференциальных
в частных производных, интегральных и т. д.) задача сводится к работе с матрицами. Так как язык программирования
MatLab адаптирован для работы с матрицами, то он наиболее
эффективно способен решать различные научно-технические
задачи.
2. Язык программирования MatLab имеет самую большую
в мире библиотеку функций и объектов для всех областей науки и техники. По охвату различных областей науки и техники
с языком MatLab не может даже близко сравниться никакой
из современных языков программирования.
В какой бы области знаний не пришлось бы работать, можно
быть полностью уверенным, что в MatLab уже есть библиотека
стандартных функций, написанных лучшими специалистами
мира в этой области знаний. В связи с этим пакет MatLab иногда
называют энциклопедией знаний накопленных человечеством.
Вывод
Для программирования научно-технических задач в настоящее время самым мощным языком программирования является MatLab, так как он адаптирован под решение задач данного
7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
класса и имеет самую большую в мире библиотеку стандартных
функций и объектов для всех областей знаний.
1.2. Пакет MatLab
Пакет MatLab разработан специалистами компании MathWork
Inc. (г. Нейтик, штат Массачусетс, США). Впервые эта система начала использоваться в конце 1970-х годов, широкое распространение она получила в конце 1980-х годов, в особенности после выхода версии 4.0. Название пакета MatLab является сокращением
слов Matrix Laboratory (матричная лаборатория), так как сам пакет адаптирован под работу с матрицами.
Когда пользователю приходится начинать изучать новый компьютерный пакет то его, прежде всего, интересуют два вопроса.
1. Правильно ли выбран данный пакет для решения нужного
класса задач? То есть место данного пакета среди аналогичных
пакетов.
2. Возможности данного пакета.
1.2.1. Место пакета MatLab среди пакетов для математических
и научных расчетов
Пакет MatLab позиционируется как пакет для математических и научных расчетов в различных областях знаний человечества. В настоящее время существует множество других пакетов
позиционирующихся как пакеты для математических и научных
расчетов. Так как нас, прежде всего, интересуют математические
возможности пакетов, то проклассифицируем все пакеты по данному параметру. Мы будем рассматривать только универсальные пакеты способные производить любые математические вычисления
и не будем касаться специальных пакетов предназначенных для
решения небольшого круга математических задач. То есть здесь
мы не будем рассматривать пакеты для статистической обработки
данных, пакеты для построения графиков и другие специализированные пакеты.
Условно все математические компьютерные пакеты можно
разбить на 5 уровней в зависимости от сложности задач, которые
они способны решать.
8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.1. Место пакета MatLab среди пакетов для математических и научных расчетов
I уровень – сложные микрокалькуляторы. Программы этого уровня способны производить арифметические вычисления,
вычисления функций, иногда они способны строить простейшие
графики на плоскости. Программ данного уровня очень много.
Примером программы данного уровня может быть программа
«калькулятор», которая находится среди стандартных программ
операционной системы Windows. Есть множество подобных программ и для различных областей знаний, например, калькулятор
для химика, калькулятор для экономиста и т. д.
II уровень – программы сложных вычислений. Данные программы кроме отмеченных на предыдущем уровне возможностей
могут численно решать алгебраические уравнения, включая системы уравнений, строить сложные графики на плоскости, производить различные численные преобразования, численно дифференцировать и интегрировать. Программ данного уровня также очень
много. Примером могут служить следующие программы: S. Plus,
Evrika, Excel и другие электронные таблицы и т. д.
III уровень – аналитические программы. Данные программы, кроме отмеченных на предыдущем уровне возможностей,
могут производить символьные вычисления (то есть производить
вычисления виде математических формул), символьно и численно интегрировать и дифференцировать, производить символьные
упрощения и преобразования, символьно и численно решать алгебраические уравнения, численно решать дифференциальные уравнения. Кроме того, они могут строить графики, как на плоскости,
так и в пространстве любой сложности. Программ данного уровня
также достаточно много. Примером могут служить следующие программы: REDUCE, Derive, MathCad и т. д. Наибольшую популярность среди студентов всего мира получила программа MathCad,
так как она не требует больших усилий для своего изучения. Формулы и уравнения в MathCad пишутся так же, как в обычной тетради, а интерфейс данной программы интуитивно понятный, в частности, не нужно запоминать никакие команды, их можно вводить
с помощью встроенных диалоговых панелей.
IV уровень – сложные аналитические пакеты. Данные математические пакеты, кроме отмеченных на предыдущем уровне
возможностей, способны символьно и численно решать дифференциальные уравнения, дифференциальные уравнения в част9
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
ных производных, выполнять сложную оптимизацию, строить
сложные специфические графики, как на плоскости, так и в пространстве (например, движение тела в пространстве и т. д.), имеют
обширные библиотеки функций по различным разделам математики. Всего в мире пакетов данного уровня только два, а именно:
Maple, Mathematica.
Maple и Mathematica – самые мощные в мире пакеты по символьным вычислениям. Многократное тестирование показало, что
Maple несколько более надежный пакет, а Mathematica несколько
превосходит его по специальной графике.
V уровень. Особое место среди всех пакет для математических
и научных расчетов занимает пакет MatLab. Это самый мощный
в мире пакет по численным вычислениям. Данный пакет содержит библиотеки функций не только по всем разделам математики, но и по всем областям знаний (электротехника, радиотехника,
разработка процессоров, передача сигналов, биология, финансы
и т. д.). По широте охвата различных областей знаний с данным
пакетом не может сравниться никакой другой компьютерный пакет в мире. Это видно, как по объему самого пакета, так и по объему библиотек и объему описания. Поэтому многие другие математические пакеты стараются интегрироваться с пакетом MatLab.
Например, пакеты MathCad, Maple. Пакет MatLab бесспорно является королем вычислительных систем.
В символьных вычислениях пакет MatLab уступает пакетам
Maple и Mathematica. Для символьных вычислений пакет MatLab
использует ядро пакета Maple. Кроме того, пакет MatLab интегрируется с пакетом Maple.
Анализ использования математических и научных пакетов
в различных фирмах и университетах мира показывает, что при
профессиональной работе в какой-либо области знания всегда используется пакет MatLab.
Чтобы окончательно установить, в каких случаях целесообразно использовать пакет MatLab, а не другие пакеты для математических и научных расчетов, проанализируем данные пакеты
по принципу их работы.
Пакеты уровней I–II работают по принципу электронных таблиц. То есть в одних ячейках вводятся значения, в других – выражения и получается результат.
10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.1. Место пакета MatLab среди пакетов для математических и научных расчетов
Пакеты уровня III, в сущности, также являются электронными таблицами. Однако данные пакеты уже имеют встроенный язык
программирования, который позволяет писать довольно сложные
программы. Тем не менее, эти программы могут быть использованы только внутри пакета в процессе интерактивной работы с ним.
Пакеты уровня IV по принципу работы представляют собой некоторую смесь электронных таблиц и языков программирования.
Интерактивные возможности данных пакетов как электронных
таблиц значительно хуже, чем у предыдущих пакетов. В частности, в данных пакетах надо знать и вводить (посимвольно) множество команд и библиотечных функций, что неудобно и нехарактерно для интерактивной работы, но характерно для языков
программирования.
С другой стороны, возможности программирования в данных
пакетах значительно больше, чем в предыдущих пакетах. Например, все библиотечные функции в пакете Maple написаны на языке
Maple.
Пакет уровня V – MatLab является чисто языком программирования с крайне ограниченными интерактивными возможностями. Интерактивные возможности пакета MatLab сведены к вводу
команд (посимвольно) в командное окно MatLab, но это и неудобно, и неэффективно.
MatLab, прежде всего, предназначен для создания самостоятельных приложений в различных областях знаний. Для этого он
обладает большим числом библиотек функций из различных областей науки и техники.
Надо отметить, что в пакете MatLab есть уже готовые программы для работы в различных областях науки и технике написанные
на языке MatLab различными специалистами.
Язык MatLab поддерживает все виды программирования:
структурное программирование, объектно-ориентированное программирование и визуальное программирование (как интерфейса
программы, так и самой научной задачи).
Пакеты же MathCad, Maple, Mathematica, прежде всего, приспособлены для интерактивной работы. Для этого они обладают
очень удобными средствами диалога в виде панелей. Тем не менее, и эти пакеты также обладают средствами программирования.
Однако программирование для этих пакетов вторично, в отличие
11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
от пакета MatLab. В частности у этих пакетов нет средств для написания интерфейсов самостоятельной программы. Таким образом, программы, написанные в рамках пакетов MathCad, Maple,
Mathematica могут быть использованы только в рамках этих же
пакетов.
Из сделанного выше анализа видно, что с ростом возможностей пакетов для математических и научных расчетов убывают их
интерактивные возможности, но возрастают их возможности как
языков программирования.
Выводы
1. Таким образом, если нужно написать самостоятельную
программу в любой области знаний, то для этого необходимо использовать пакет MatLab, в нем есть все средства, как для написания интерфейса программы, так и необходимые библиотечные
функции для написания самой программы
2. Если необходимо произвести какие-либо текущие вычисления, то лучше всего воспользоваться пакетами с широкими интерактивными возможностями: MathCad, Maple, Mathematica.
Проще всего воспользоваться пакетом MathCad, так как он наиболее удобен в использовании, и как показывает опыт, он способен
решить практически все научно-технические задачи даже очень
высокой сложности.
В случае же необходимости символьного решения дифференциальных уравнений, и работы в специальных разделах математики (теория групп, символы Кристоффеля и т. д.) возникает
потребность в использовании пакетов Maple, Mathematica. Однако работа в рамках данных пакетов не так удобна и проста, как
в пакете MathCad, так как требует знания множества команд,
несмотря на то, что в данных пакетах также имеются диалоговые панели.
Замечание по изложению пакета MatLab во многих
учебниках
Анализ книг и учебников по MatLab [1–10] показывает, что
многие авторы четко не представляют себе возможности языка
программирования MatLab. В большинстве книг MatLab изложен
как интерактивный решатель, каковым он вовсе не является. Поэтому изложение материала в данных книгах сведено к запуску
12
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.1. Место пакета MatLab среди пакетов для математических и научных расчетов
различных библиотечных функций из командного окна и применению арифметических операций. В результате такой мощный
язык программирования, как MatLab, сведен к очень неудобному
и второразрядному решателю, который практически невозможно
постичь.
Кажется очевидным опытному пользователю, что, если в пакете есть обширные библиотеки функций, не обладающих собственным интерфейсом, то они предназначены не для непосредственного запуска из командного окна, а для использования в создаваемых
пользователем программах. Тем не менее, в отмеченных книгах
не менее 90 % материала связано с запуском различных библиотечных функций: графических функций, функций для решения
алгебраических и дифференциальных уравнений, функций для
работы с матрицами и т. д.
При изложении любого другого языка программирования, например, С++, автору и в голову не придет свести изложение к запуску библиотечных функций, хотя в принципе это возможно,
создавая свою программу, содержащую только вызов какой-либо
библиотечной функции. Однако, всем очевидно, что не для этого
создан язык программирования С++.
В случае языка программирования MatLab небольшие интерактивные возможности пакета MatLab сыграли с ним злую
шутку. Прочитав подобные учебники, в голове пользователя
создается полнейший хаос. В частности, непонятно, почему
использовались данные функции, а не другие, какие есть еще
аналогичные функции, почему у функции такие параметры
и их смысл, есть ли у функции другие параметры и т.п. Это
естественно, так как продемонстрировать через интерактивный
решатель все библиотечные функции и их возможности просто
невозможно.
В 90-х годах, когда я начал изучать MatLab и прочел множество подобных книг, я понял, что создать что-либо свое в рамках
пакета MatLab я не могу (этому данные книги просто не обучают).
Использовать же MatLab как интерактивный решатель для решения моих научных проблем и неудобно, и практически невозможно из-за необозримого числа библиотечных функций. Подобное чувство охватывало и многих моих коллег, который пытались
изучать пакет MatLab. Все это создало пакету MatLab ореол науч13
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
ного пакета с неограниченными возможностями, который крайне
трудно изучить.
Если рассматривать MatLab как язык программирования, то
все становится на свои места. Изучив язык программирования
MatLab, а он поддерживает все современные методы программирования (причем в изучении язык довольно прост), и имея хорошие справочники библиотечных функций, можно легко создавать
свои программы в любой области знаний. То есть при данном подходе пользователь довольно легко и быстро получает очень мощный инструмент для написания своих собственных программ. При
этом для обзора всех нужных библиотечных функций достаточно
один раз внимательно просмотреть нужные справочники, чтобы иметь представления об имеющихся функциях и их возможностях. В дальнейшем при написании своих собственных программ достаточно эти справочники иметь под рукой, так как все
параметры функций и другие детали запомнить невозможно. Так
делают программисты, создающие программы на любых языках
программирования.
При таком подходе пакет MatLab кажется самым мощным, легко осваиваемым пакетом для работы в любых областях знаний.
1.2.2. Использование пакета MatLab для решения
экономических задач
Очень часто приходится обучать программированию студентов
специальности «Прикладная информатика» именно в экономике.
Поэтому отдельно остановимся на применении пакета MatLab для
решения экономических задач.
В настоящее время моделирование широко используется
во всех отраслях науки. Однако в экономике оно используются
еще достаточно слабо по следующим причинам:
– экономические процессы во многом случайны и неуправляемы. Следовательно, экономические системы плохо поддаются изучению и формализации, как в виде уравнений, так и в виде
алгоритмов;
– экономисты, как правило, не владеют, или плохо владеют
математикой. С другой стороны специалисты в области математического моделирования, как правило, плохо разбираются в эконо14
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.2. Использование пакета MatLab для решенияэкономических задач
мике. То есть первые не способны как-либо формализовать систему, а вторые не могут правильно оценить адекватность модели.
Существующие экономические модели можно разделить,
с точки зрения подходов к моделированию, на два основных вида:
аналитические модели и имитационные модели.
Аналитические модели описывают реальную экономическую
систему или процесс в виде системы алгебраических, дифференцированных, интегральных, конечноразностных и т. д. уравнений
[1, 2].
В пакете MatLab имеются все известные методы для решения
уравнений любого вида, кроме того, в пакете MatLab имеются библиотеки для решения оптимизационных задач, задач статистического характера и т. д. Надо отметить, что MatLab содержит
и библиотеки функций для работы в финансовых областях, написанные лучшими специалистами мира. Это библиотеки: Financial
Toolbox, Financial Derivatives Toolbox, Fixed-Income Toolbox,
GARCH Toolbox, Datafeed Toolbox. Подробно об этих библиотеках
будет говориться ниже.
Таким образом, если необходимо написать свою собственную
прикладную программу в области экономики, то более мощного
и более развитого средства программирования, чем пакет MatLab,
на данный момент в мире нет.
Там где невозможно аналитическое описание экономической
системы, но возможно словесное описание, а, следовательно, возможна алгоритмизация, всегда можно написать программу, моделирующую эту систему.
Данная программа, воспроизводящая логику словесного описания, называется имитационной (алгоритмической) моделью.
В имитационной модели можно исследовать различные процессы,
содержащие, в том числе, случайные факторы [3, 4].
Имитационное моделирование целесообразно применять в следующих случаях.
1. Если не существует законченной постановки задачи и в самом
процессе моделирования идет познание исследованного объекта. То есть совершенствование модели в диалоговом режиме
в зависимости от приобретения новых знаний.
2. Если протекающие экономические процессы нельзя описать
в аналитическом виде.
15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
3.
Если необходимо наблюдать за поведением системы или отдельных ее компонент в течение определенного периода, в том
числе с изменением объема протекания процессов.
4. При изучении новых ситуаций в системе или при оценке
функционирования в новых условиях. То есть если мы хорошо знаем, как ведет себя система в обычных условиях, и хотим
узнать, как она будет вести себя в экстремальных условиях.
Для этого проще всего построить имитационную модель системы, проверить ее, сравнив результаты, полученные из модели,
с результатами реальной системы, а затем использовать эту
модель в необычных условиях, где реальная система может
и не существовать.
5. Если исследуемая система является элементом более сложной
системы, другие элементы которой имеют реальное воплощение, то есть когда нельзя реально «выдернуть» какую-либо
подсистему из сложной системы. В этом случае лучше всего
построить имитационную модель подсистемы и исследовать
работу всей системы в зависимости от различных режимов
подсистемы.
6. Имитационные тренажеры для обучения специалистов.
Существуют еще комбинированные модели, которые позволяют объединить достоинства аналитических и имитационных
моделей. При этом система предварительно разбивается на подсистемы. Сначала выделяются подсистемы, где возможно аналитическое моделирование и строятся соответствующие аналитические модели. Для оставшихся подсистем строятся имитационные
модели, и все вместе объединяется в единую модель экономической системы.
В состав пакета MatLab входит пакет для визуального программирования научных и технических задач Simulink. Он работает подобно другим языкам визуального программирования, таким как
Visual Basic, Delph, Builder C++ и т. д. Однако Simulink адаптирован именно к написанию научных и технических программ. Так
как Simulink позволяет визуально программировать любые задачи
из любых областей знаний, то с его помощью очень удобно строить
имитационные модели. Поэтому Simulink иногда называют имитатором научных и технических задач.
16
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.3. Возможности пакета MatLab
В настоящее время Simulink – самый мощный в мире визуальный имитатор, который позволяет создавать имитационные модели технических и экономических систем. Программа Simulink
работает по типу аналоговых машин, т.е. как бы из кубиков собирается модель, причем каждый кубик выполняет какую-то элементарную операцию. Затем кубики соединяются линиями в модель.
К сожалению, до настоящего времени такой мощный имитатор
как Simulink крайне редко применяется в экономическом моделировании. Даже в современных учебниках [3, 4] по моделированию
экономических систем имитационные модели строятся в рамках
довольно примитивных программных средств, а именно, используя язык Basic [3] или электронную таблицу Excel [4].
Вывод
Таким образом, если необходимо написать свою собственную
прикладную программу в области экономики то более мощного
и более развитого средства программирования, чем пакет MatLab
на данный момент в мире нет.
1.2.3. Возможности пакета MatLab
До 2005 года различные версии MatLab выходили не регулярно, например MatLab 5 вышла в 1996 году, MatLab 6 – в 2000 году,
MatLab 7 – в 2004 году. Начиная с 2005 года, фирма MathWork Inc.
каждый год выпускает по две реализации, например, в 2006 году
MatLab R2006a и MatLab R2006b и так каждый год.
Пакет MatLab R2007b занимает на диске 3,5 ГБ, имеет 43 библиотеки прикладных функций и компонент, кроме этого в состав MatLab входят различные программы, расширяющие его
возможности. Описание каждой библиотеки содержит от 500
до 1500 страниц текста. Таким образом, MatLab это очень большой
пакет программ. Многие называют MatLab энциклопедией научных и технических знаний.
Чтобы составить представление о возможностях пакета MatLab
рассмотрим его структуру рис. 1.1.
Данная структура соответствует разбиению библиотек принятому в версии MatLab R2007b и выше. В предыдущих версиях
MatLab (например, MatLab 6.0) все библиотеки не различались.
Это, по моему, в корне неверно, так как под одним словом «библио17
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
теки» объединялись библиотеки, содержащие как функции для
написания прикладных программ (обычные библиотеки языков
программирования), так и библиотеки, содержащие независимые
программы, расширяющие возможности пакета MatLab. Например, библиотека MatLab, которая содержит компилятор, преобразующий программы, написанные на языке MatLab, в независимые
.exe программы. Начиная с версии MatLab R2007b подобные библиотеки независимых программ объединены словом «инструменты», что более правильно.
Однако и в данной версии, как мне кажется, структуризация
библиотек проведена недостаточно, что затрудняет в целом понимание возможностей данного очень большого пакета программ.
Например, в данной версии термином «прикладные библиотеки»
объединены и библиотеки функций (как в стандартных языках
программирования) и независимые программы, расширяющие возможности MatLab. Например, библиотека Virtual Reality Toolbox
содержащая программы для разработки технических мультипликаций отнесена к «прикладным библиотекам», как мне кажется,
ее лучше было бы отнести к «инструментам».
Итак, основу пакета MatLab составляет язык программирования MatLab (рис. 1.1).
Вторым очень важным элементом пакета MatLab является
язык визуального программирования научных и технических задач Simulink (рис. 1.1). Он работает подобно другим языкам визуального программирования, таким как Visual Basic, Delph, Builder
C++ и т. д. Однако Simulink адаптирован именно к написанию научных и технических программ. Программирование в рамках пакета Simulink сводится к набору «мышкой» кубиков из библиотек
блоков Simulink, причем каждый кубик выполняет какую-то одну
элементарную операцию. Затем кубики соединяются линиями
в модель.
Языки программирования MatLab и Simulink дополняют друг
друга и взаимодействуют между собой. Например, программы, написанные на языке MatLab, могут быть использованы в моделях
Simulink, в свою очередь, модели Simulink могут быть конвертированы в программы MatLab.
Кроме этого, в пакет MatLab входят: библиотеки функций
для написания своих прикладных программ («библиотеки обще18
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.3. Возможности пакета MatLab
го назначения», «прикладные библиотеки», «библиотеки блоков»), инструменты (это библиотеки, содержащие независимые
программы, расширяющие возможности пакета MatLab), связи
и программы внедрения (это программы для связи с другими программными пакетами). Подробно они будут рассмотрены ниже.
В заключении дадим краткие характеристики всех программ
пакета MatLab.
MatLab – это высокоуровневый язык технических расчетов,
интерактивная среда разработки алгоритмов и современный инструмент анализа данных. MatLab по сравнению с традиционными языками программирования (C/C++, Java, Pascal, FORTRAN)
позволяет на порядок сократить время решения типовых задач
и значительно упрощает разработку новых алгоритмов. MatLab
представляет собой основу всего семейства продуктов MathWorks
и является главным инструментом для решения широкого спектра
научных и прикладных задач, в таких областях как: моделироваБиблиотеки общего назначения
Инструменты
Язык
программирования
MatLab
Связи и программы внедрения
Прикладные библиотеки
Инструменты
Simulink
Библиотеки блоков
Рис. 1.1.Структура пакета MatLab
19
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
ние объектов и разработка систем управления, проектирование
коммуникационных систем, обработка сигналов и изображений,
измерение сигналов и тестирование, финансовое моделирование,
вычислительная биология и другие.
1.2.4. Библиотеки общего назначения MatLab
Удивительно, но во многих книгах по пакету MatLab библиотеки общего назначения даже не упоминаются. Они отдельно
не упоминаются и в самом описании пакета MatLab. Тем не менее,
функции из этих библиотек везде широко используются. Наверно
создатели описания MatLab и другие авторы считают, что наличие
этих библиотек является очевидным фактом. Однако для начинающего пользователя это вовсе не очевидно.
Приведем здесь полный список библиотек общего назначения
с их кратким описанием. Данный список можно получить, набрав
в командном окне команду help и выбрав нужные библиотеки (каталоги). Список данных библиотек (каталогов) приведен ниже.
matlab/general – Команды общего назначения.
matlab/ops – Операторы и специальные символы
matlab/lang – Конструкции языка программирования.
matlab/elmat – Элементарные матрицы и матричные операции.
matlab/elfun – Элементарные математические функции.
matlab/specfun – Специализированные математические функции.
matlab/matfun – Численная линейная алгебра.
matlab/datafun – Анализ данных и преобразовывание Фурье.
matlab/polyfun – Интерполяция и многочлены.
matlab/funfun – Функции решения обычных дифференциальных
уравнений.
matlab/sparfun – Разряженные матрицы.
matlab/scribe – Аннотация и графическое редактирование.
matlab/graph2d – Двухмерные графики.
matlab/graph3d – Трехмерные графики.
matlab/specgraph – Специализированные графики.
matlab/graphics – Дескрипторные графики.
matlab/uitools – Инструменты графического интерфейса
пользователя.
matlab/strfun – Функции работы со строками.
20
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.5. Инструменты MatLab
matlab/imagesci – Функции изображения и ввода / вывода
данных.
matlab/iofun – Функции ввода и вывода файлов.
matlab/audiovideo – Звуковая и телевизионная поддержка.
matlab/timefun – Функции времени и даты.
matlab/datatypes – Типы данных и структуры.
matlab/verctrl – Контроль версии.
matlab/codetools – Команды для создания и отладки кода.
matlab/helptools – Команды помощи.
matlab/winfun – Файлы интерфейса операционной системы
Windows (COM/DDE).
matlab/demos – Примеры и демонстрации.
matlab/timeseries – Визуализация данных временных рядов
и исследование.
matlab/guide
–
Инструменты
графического
интерфейса
пользователя.
matlab/plottools – Инструменты графического интерфейса
пользователя.
toolbox/local – Общие персональные настройки и информация
о конфигурации.
1.2.5. Инструменты MatLab
Инструменты MatLab – это пакеты независимых программ,
расширяющие возможности пакета MatLab. Список инструментов MatLab приведен ниже.
MatLab Compiler – это специальный инструмент, позволяющий создавать независимые приложения в среде MatLab. Обеспечивает преобразование программного MatLab-кода, графики
и интерфейса в независимые приложения, не требующие для исполнения присутствия платформы MatLab.
MatLab Builder for Excel – это пакет, расширяющий возможности MatLab Compiler средствами разработки надстроек для
Microsoft ®Excel (Add-ins). Обеспечивает преобразование функций
MatLab в компоненты для Excel, не требующие присутствия установленной платформы MatLab. Данная технология позволяет разрабатывать приложения совмещающие преимущества интерфейса
Excel и сверхмощной математики и графики MatLab.
21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
MatLab Builder for NET – это пакет, расширяющий возможности MatLab Compiler средствами генерации независимых NET
компонент и COM объектов. Обеспечивает преобразование функций MatLab в независимые компоненты, не требующие для исполнения присутствия платформы MatLab.
MatLab Builder for Java – это пакет, расширяющий возможности MatLab Compiler средствам преобразования функций
MatLab в java-классы. Обеспечивает их независимость и не требует для исполнения присутствия платформы MatLab.
MatLab Report Generator – это средство генерации отчетов
из среды MatLab. Позволяет автоматически документировать алгоритмы и функции, разработанные в MatLab, включать графику
в состав отчетов, управлять шаблонами и настраивать внешний
вид генерируемой документации. Пакет позволяет создавать отчеты в форматах: HTML, PDF, RTF, DOC и XML.
SystemTest – это среда для организации тестирования алгоритмов MatLab® и проверки отказоустойчивости Simulink систем. Пакет включает в себя шаблоны тестов для создания
специальных процедур проверки, позволяет организовать коллективный доступ к процедурам тестирования для большой команды разработчиков на протяжения всей работы с проектом.
SimBiology – это библиотека Simulink для имитационного моделирования, анализа и визуализации биохимических процессов.
Содержит средства настройки биологических типов, параметров,
реакций, правил, кинетических законов модели. Поддерживает
Systems Biology Mark-Up Language (SBML). Позволяет имитировать модель с использованием стохастических и детерминированных решателей.
Excel Link – это пакет расширения, обеспечивающий доступ к MatLab-функциям из среды Microsoft Excel. Позволяет
с помощью простого и широко известного интерфейса Excel
применять мощную математику и графику MatLab для обработки табличных данных, позволяет легко обращаться из Excel
к рабочему пространству MatLab, импортировать и экспортировать данные.
PolySpace Code Verification Products – программное обеспечение для верификации рукописного или автоматически сгенерированного кода до того как он будет скомпилирован. PolySpace
22
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.6. Связи MatLab
Code Verification Products включает в себя: PolySpace Client for C/
C++ и PolySpace Server for C/C++, PolySpace Client for Ada и with
PolySpace Server for Ada, PolySpace Model Link SL, PolySpace Model
Link TL, PolySpace UML Link RH.
1.2.6. Связи MatLab
Фирмы, выпускающие процессоры, для управления различными техническими устройствами, снабжают их пакетами программ,
которые позволяют писать новые программы для управления этими процессорами. Пакет MatLab также может писать программы
для управления техническими процессорами. Программы ниже
обеспечивают связь пакета MatLab с пакетами программ поставляемыми фирмами разработчиками технических процессоров,
таким образом, чтобы при разработке программы управления для
технических процессоров можно было пользоваться всеми возможностями пакета MatLab.
Link for Code Composer Studio – это дополнительный пакет
для взаимодействия средств MatLab и Simulink с известной средой
разработки кода для процессоров фирмы Texas Instruments. Он
обеспечивает трехстороннее взаимодействие в реальном времени
между окружением MatLab, средой разработки Composer Studio
и аппаратными средствами Texas Instruments.
Embedded IDE Link MU автоматически выполняет код, сгенерированный с помощью моделей Simulink, в интегрированной
среде разработки Green Hills MULTI. Полученный код выполняется на широком диапазоне микропроцессоров, поддерживающих
MULTI: Freescale MPC5554 и MPC7447, NEC V850, а также Analog
Devices Blackfin.
Link for TASKING – это дополнительный пакет для взаимодействия средств MatLab® и Simulink с широко известной средой разработки кода для микропроцессоров TASKING (компании Altium).
Позволяет моделировать исполнение кода на целевом микропроцессоре из модели Simulink.
Link for Incisive – это дополнительный пакет для взаимодействия среды MatLab & Simulink со средствами разработки Программируемых Логических Интегральных Схем (ПЛИС-FPGA/
ASIC). Пакет обеспечивает связь в реальном времени с платфор23
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
мой Incisive фирмы Cadence Design Systems и позволяет тестировать Simulink-модели совместно с программной эмуляцией HDLязыков программирования ПЛИС.
Link for Analog Devices VisualDSP++ связывает программы
MatLab и Simulink с интегрированной средой разработки и отладки VisualDSP++. Соединение с Analog Devices VisualDSP++ позволяет, используя скрипты MatLab и модели Simulink, отлаживать
и проверять скрытые коды, выполняемые на процессорах Analog
Devices.
Link for ModelSim – это дополнительный пакет для взаимодействия среды MatLab® и Simulink со средствами разработки Программируемых Логических Интегральных Схем (ПЛИС-FPGA/
ASIC). Обеспечивает связь в реальном времени со средствами моделирования HDL-кода (ModelSim фирмы Mentor Graphics). Пакет
позволяет тестировать Simulink-модели с аппаратными частями,
написанными на VHDL или Verilog.
1.2.7. Программы внедрения
Программы внедрения – это пакеты программ для создания
и внедрения программного кода в технические процессоры различных фирм.
Embedded Target for Infineon C166 – это продукт семейства
MatLab, содержащий набор специальных средств для компиляции
и исполнения кода на целевых процессорах Infineon C166 семейства STMicroelectronics ST10, включая XC16x и Super10.
Target for Motorola MPC555 – это продукт семейства MatLab,
содержащий набор специальных средств для компиляции и исполнения кода на целевом микроконтроллере MPC5xx.
Embedded Target for TI C2000 DSP – это продукт семейства
MatLab, содержащий набор средств интеграции с инструментарием Texas Instruments eXpressDSP™. Совместно эти продукты
позволяют генерировать, компилировать и исполнять код на TI
C2000 процессорах.
Embedded Target for TI C6000 DSP – это продукт семейства
MatLab, содержащий набор средств интеграции с инструментарием Texas Instruments eXpressDSP™. Совместно эти продукты
24
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.8. Прикладные библиотеки MatLab
позволяют генерировать, компилировать и исполнять код на TI
C6000 процессорах.
xPC TargetBox – это индустриальный PC-совместимый компьютер для подключения к MatLab и реализации систем реального
времени обработки сигналов и управления. Компьютер содержит
все необходимые средства ввода-вывода аналоговых и цифровых
сигналов, и полностью готов для установки ядра xPC Target и взаимодействия с Simulink.
xPC Target Embedded Option – это специальное расширение пакета xPC Target, позволяющее реализовывать и распространять готовые аппаратные устройства на базе PC-платформы.
Обеспечивает обширный функционал для разработки готовых
систем управления. xPC Target позволяет соединить Simulink
и Stateflow модели с реальными физическими исполнительными
механизмами и управлять ими в реальном времени, используя
PC платформу.
Real-Time Windows Target – это специальный программный
продукт, обеспечивающий выполнение модели Simulink в реальном времени непосредственно в ОС Windows. Позволяет организовать взаимодействие Simulink с внешними устройствами.
1.2.8. Прикладные библиотеки MatLab
Bioinformatics Toolbox – это пакет расширения MatLab содержащий набор функций и алгоритмов для обработки биологических данных, исследований в области биоинформатики, генной
инженерии и в разработке лекарственных препаратов.
Communications Toolbox – это пакет расширения MatLab, содержащий набор типовых функций для проектирования систем
связи. Пакет включает графические приложения, алгоритмы,
функции командной строки и средства визуализации для всестороннего анализа, проектирования и разработки коммуникационных систем на физическом уровне детализации.
Control System Toolbox – это пакет расширения MatLab для
анализа, проектирования и разработки систем автоматического
управления. Включает в себя всевозможные функции и графические приложения для работы с динамическими объектами и линейными замкнутыми системами управления.
25
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
Database Toolbox – это пакет расширения MatLab, для работы
с базами данных. Обеспечивает соединение с ODBC/JDBC базами,
импорт и экспорт данных, а также позволяет использовать мощнейшие средства платформы MatLab и различных пакетов расширения для обработки, анализа и визуализации данных.
Data Acquisition Toolbox – это пакет расширения MatLab, предлагающий полный набор программных средств для ввода/вывода
аналоговых и цифровых данных. Позволяет автоматически обнаруживать и конфигурировать внешние устройства и платы ввода/
вывода. Пакет позволяет решать в рамках MatLab и Simulink весь
спектр задач оцифровки, анализа и визуализации данных, а также
выводить результаты обработки на внешние устройства.
Instrument Control Toolbox – это пакет расширения MatLab
обеспечивающий взаимодействие с внешними измерительными
устройствами, осциллографами и функциональными генераторами. Позволяет из среды MatLab и Simulink® обмениваться данными
с устройствами, поддерживающими стандарты IVI, VXIplug&play,
GPIB, VISA, TCP/IP и UDP.
Distributed Computing Toolbox – это клиентская часть пакета для организации распределенных вычислений в среде MatLab.
Совместно с серверной частью – MatLab Distributed Computing
Engine, эти два продукта позволяют разрабатывать распределенные приложения, передавать их на сервер (кластер) и управлять
их исполнением в сетях с распределенными вычислительными
ресурсами.
MatLab Distributed Computing Engine предназначен для реализации кластерных вычислений в среде MatLab. С помощью
Distributed Computing Toolbox пользовательская программа, написанная на языке MatLab, разделяется на несколько независимых задач. MatLab Distributed Computing Engine занимается выполнением этих задач в автономных сессиях MatLab, запущенных
на нескольких компьютерах кластера.
Fixed-Point Toolbox – это пакет расширения MatLab, обеспечивающий поддержку арифметики с фиксированной точкой. Включает новый тип данных с фиксированной точкой, элементарные
арифметические функции и функции для настройки параметров
точности вычислений.
26
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.8. Прикладные библиотеки MatLab
Signal Processing Toolbox – это пакет расширения MatLab содержащий набор типовых функций для цифровой и аналоговой обработки сигналов. Пакет включает графические приложения для
интерактивной работы и огромное количество функций командной
строки для разработки новых алгоритмов.
Filter Design Toolbox – это пакет расширения MatLab для проектирования и разработки цифровых фильтров. Он расширяет
возможности Signal Processing Toolbox для разработки сложных
цифровых фильтров, включая адаптивные и многоскоростные
фильтры.
Filter Design HDL Coder – это специальный продукт, расширяющий возможности разработки аппаратных устройств в среде
MatLab. Пакет позволяет генерировать HDL-код из среды проектирования MatLab и обеспечивает разработку высокочастотных
фильтров на Программируемых Логических Интегральных Схемах (ПЛИС-FPGA/ASIC).
System Identification Toolbox – это пакет расширения MatLab,
содержащий инструменты создания математических моделей динамических систем на основе наблюдаемых входных/выходных
данных. Пакет снабжен гибким графическим интерфейсом, помогающим организовывать данные и создавать модели. Методы идентификации, входящие в пакет, применимы для широкого класс
задач от проектирования систем управления и обработки сигналов
до анализа временных рядов и вибраций.
Fuzzy Logic Toolbox – это пакет расширения MatLab, содержащий инструменты для проектирования систем нечеткой логики.
Пакет позволят создавать экспертные системы на основе нечеткой
логики, проводить кластеризацию нечеткими алгоритмами, а также проектировать нечеткие нейросети.
Image Acquisition Toolbox – это пакет расширения MatLab
для захвата изображений с внешних устройств. Позволяет автоматически обнаруживать и конфигурировать видеоустройства,
осуществлять просмотр и захват изображений непосредственно
из среды MatLab и Simulink. Пакет поддерживает большинство
современных устройств, начиная от веб-камер и фреймграбберов,
заканчивая высокоточными промышленными видеокамерами
и микроскопами.
27
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
Image Processing Toolbox – это пакет расширения MatLab, содержащий полный набор типовых эталонных алгоритмов для обработки и анализа изображений, в том числе функций фильтрации,
частотного анализа, улучшения изображений, морфологического
анализа и распознавания.
Model Predictive Control Toolbox – это пакет расширения
MatLab для исследования и проектирования алгоритмов управления с предсказанием динамики. Позволяет создавать системы
адаптивного управления для сложных систем с одним или несколькими входами (выходами) и различными ограничениями.
Model-Based Calibration Toolbox – это пакет расширения
MatLab предназначенный для калибровки моделей сложных систем и механизмов. Пакет опирается на высокотехнологичные
вычислительные средства MatLab и широкие возможности имитационного моделирования Simulink. Позволяет проводить оптимальную калибровку и подгонку моделей сложных механизмов,
которую невозможно произвести традиционными средствами.
Neural Network Toolbox – это пакет расширения MatLab, содержащий средства для проектирования, моделирования, разработки и визуализации нейронных сетей. Нейросетевые технологии
позволяют решать такие задачи, решение которых классическими
формальными методами затруднено или не возможно. Пакет обеспечивает всестороннюю поддержку типовых нейросетевых парадигм и имеет модульную и открытую архитектуру.
OPC Toolbox – это пакет, расширяющий возможности среды
MatLab средствами взаимодействия с OLE for Process Control серверами. Позволяет читать и записывать данные с устройств совместимых со стандартами OPC. Осуществляет взаимодействие с системами распределенного управления, диспетчерского контроля,
захвата данных и с контроллерами программируемой логики. OPC
Toolbox позволяет MatLab и Simulink® реагировать на события
OPC сервера: выключение, ошибка или изменение параметров.
Robust Control Toolbox – это пакет расширения MatLab для
разработки систем управления объектами с неопределенностями
и нелинейностями различного типа. Он позволяет проектировать и настраивать системы управления с учетом чувствительности к неопределенным параметрам, возмущениям и ошибкам
модели.
28
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.8. Прикладные библиотеки MatLab
RF Toolbox – это пакет расширения MatLab содержащий
функции и графические приложения для анализа, расчета и визуализации различных сверхвысокочастотных (СВЧ) систем и радио
компонент, таких как усилители, смесители, передающие устройства, СВЧ фильтры. Пакет поддерживает файлы параметров СВЧ
модели в формате индустриального стандарта.
Mapping Toolbox – это пакет расширения MatLab содержащий
полный набор средств для построения карт, обработки и визуализации картографических данных. Пакет включает стандартные
функции преобразования картографических проекций, расчета
линий прямой видимости и другие вычисления геометрии земли,
использующиеся в геодезии, картографии, экологии, океанографии, в нефтегазоразведывательной и аэрокосмической отраслях.
Virtual Reality Toolbox – это пакет расширения для визуализации и анимации трехмерных объектов и сцен, управляемых
из MATAB и Simulink. Позволяет задавать объекты и элементы
окружения на языке виртуальной реальности VRML, а также
управлять их положением из MatLab или Simulink.
Wavelet Toolbox – это пакет расширения MatLab для работы
с вейвлетами. Содержит функции вейвлет преобразования, средства разработки вейвлет-алгоритмов, функции анализа, синтеза ,
фильтрации, сжатия и обработки, а также инструменты для кратномасштабного анализа одномерных и двухмерных данных.
Прикладные математические библиотеки
Optimization Toolbox – это пакет расширения MatLab, содержащий набор классических алгоритмов для задач безусловной,
условной, непрерывной и дискретной оптимизации. Optimization
Toolbox содержит функции линейного, квадратичного, целочисленного программирования, функции нелинейной оптимизации
и нелинейного метода наименьших квадратов, функции решения
систем нелинейных уравнений, многокритериальной оптимизации, а также функции позволяющие решать минимаксные задачи
оптимизации.
Genetic Algorithm and Direct Search Toolbox – это пакет, расширяющий оптимизационные возможности MatLab и Optimization
Toolbox для решения задач оптимизации недифференцируемых, стохастических и разрывных функций. Genetic Algorithm
29
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2. Пакет MatLab
and Direct Search Toolbox позволяет решать задачи оптимизации с высокой степенью нелинейности и с плохой обусловленностью не поддающиеся решению с помощью классических методов
оптимизации.
Statistics Toolbox – это пакет расширения MatLab, обеспечивающий исследователей, инженеров и финансовых аналитиков
полным набором средств для статистической обработки данных.
Содержит функции и интерактивные инструменты для анализа
временных рядов, статистических моделей, исторических данных,
а также средства разработки статистических алгоритмов.
Curve Fitting Toolbox – это пакет расширения MatLab для
различных прикладных задач подгонки, аппроксимации и интерполяции данных. Включает в себя интерактивные средства для
предварительной обработки данных, для сравнения стандартных
моделей и разработки моделей пользователя, для подгонки с помощью стандартных и робастных методов и для анализа качества
аппроксимации.
Spline Toolbox – это пакет расширения MatLab, содержащий
набор функций и алгоритмов для работы со сплайнами. Позволяет
осуществлять сплайн-интерполяцию, содержит графические средства для визуализации и интерактивной работы, позволяет производить вычисления со сплайн-объектами, комбинировать дифференцировать и интегрировать сплайны.
Extended Symbolic Math Toolbox – это пакет, расширяющий
возможности символьной математики MatLab. Содержит функции
аналитических преобразований и поддерживает арифметику произвольной точности. Пакет включает в себя функции ядра Maple
– известной среды аналитических расчетов. Обеспечивает возможность программирования на языке Maple и доступ к специализированным библиотекам.
Partial Differential Equation Toolbox – это пакет расширения MatLab, который содержит инструменты для исследования
и решения уравнений в частных производных в двух измерениях
со временем. Пакет содержит функции командной строки для программирования и графический интерфейс, позволяющий проводить предварительную обработку и решение типовых задач математической физики.
30
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.2.8. Прикладные библиотеки MatLab
Прикладные финансовые библиотеки
Financial Toolbox – это пакет расширения MatLab, дополняющий возможности Statistics Toolbox и Optimization Toolbox
функциями и процедурами анализа финансовых данных. Пакет
служит инструментом для решения задач оптимизации портфеля
инвестиций, оценки риска, анализа процентных ставок и производных ценных бумаг, а также для анализа финансовых временных
рядов.
Financial Derivatives Toolbox – это пакет, расширяющий
функциональность Financial Toolbox для анализа и моделирования производных ценных бумаг с фиксированной доходностью.
Fixed-Income Toolbox – это пакет расширения MatLab, для
финансового моделирования и анализа инвестиций с фиксированной доходностью. Содержит функции для определения цены,
доходности и движения различных ценных бумаг, включая корпоративные облигации, закладные, долгосрочные казначейские
обязательства, муниципальные городские обязательства, краткосрочные казначейские векселя, свопы, фьючерсы, конвертируемые облигации и др.
GARCH Toolbox – это пакет, расширяющий функциональность
Financial Toolbox средствами анализа финансовой волатильности
с использованием одномерных GARCH моделей. Пакет позволяет
финансистам применять технологию моделирования с помощью
метода Монте-Карло, получать прогноз с минимальным среднеквадратичным отклонением, выполнять предварительную и заключительную диагностику моделей, тестировать гипотезы, оценивать параметры ARMAX/GARCH моделей.
Datafeed Toolbox – это пакет расширения MatLab, обеспечивающий интернет-доступ к базам данных финансовой онлайн информации. Позволяет отслеживать данные биржевых котировок в реальном времени и использовать их для расчетов и принятия решения.
1.3. Пакет визуального программирования Simulink
Simulink – это графическая среда имитационного моделирования, позволяющая при помощи блок-диаграмм в виде направленных графов строить динамические модели, включая дискретные,
непрерывные и гибридные, нелинейные и разрывные системы.
31
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.3. Пакет визуального программирования Simulink
Интерактивная среда Simulink позволяет использовать уже готовые библиотеки блоков для моделирования электромеханических,
гидравлических и других систем, а также применять развитый
модельно-ориентированный подход при разработке систем управления, экономических процессов и систем и т. д.
1.3.1. Инструменты Simulink
Инструменты Simulink – это пакеты независимых программ,
расширяющие возможности пакета Simulink. Список инструментов Simulink приведен ниже.
Real-Time Workshop – это продукт семейства MatLab & Simulink
для генерации полноценного C-кода по Simulink модели. Позволяет использовать Simulink для различных приложений реального
времени, для разработки прототипов микропроцессорных систем
и для совместного программно-аппаратного тестирования связок
модель-устройство и процессор-модель.
Real-Time Workshop Embedded Coder – это специальное расширение пакета Real-Time Workshop, позволяющее генерировать
C-код, оптимизированный для аппаратной реализации и для исполнения на внешних платах и микроконтроллерах.
SimMechanics – это библиотека Simulink для физического моделирования механических систем. Позволяет создавать модели механических объектов и совместно с другими пакетами MathWorks
разрабатывать реальные прототипы систем управления.
SimEvents – это библиотека Simulink для моделирования систем с дискретными состояниями, использующая теорию очередей
и систем массового обслуживания. Позволяет создавать имитационные модели прохождения объекта через сети и очереди, обеспечивает моделирование систем зависящих не от времени, а от дискретных состояний.
SimDriveline – это библиотека Simulink для физического
моделирования двухмерных механических объектов. Этот продукт специально ориентирован на моделирование трансмиссий
и приводов.
SimPowerSystems – это библиотека Simulink для физического
моделирования электроэнергетических систем. Позволяет моделировать электрические цепи в Simulink на уровне схем и элемен32
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.3.1. Инструменты Simulink
тов, строить модели систем генерации, передачи и потребления
электроэнергии. Содержит готовые модели трансформаторов, двигателей и других электрических машин и элементов.
SimHydraulics – это библиотека Simulink для физического моделирования гидравлических систем. Пакет расширяет среду имитационного моделирования MatLab & Simulink, позволяя строить
модели сложных гибридных гидромеханических, электромеханических объектов и систем управления для них.
SimScape – новый продукт для моделирования гибридных
многосложных физических объектов вместе с SimMechanics,
SimDriveline, SimHydraulics и SimPowerSystems.
Simulink Control Design – это набор дополнительных средств
Simulink для линеаризации сложных нелинейных объектов. Функции и графические инструменты пакета позволяют осуществлять
анализ линеаризованной модели в частотной области, настраивать
параметры регулятора и синтезировать систему управления.
Simulink Fixed Point – это расширение Simulink, позволяющее
моделировать и проектировать системы использующие арифметику с фиксированной точкой. Пакет позволяет проводить имитационное моделирование с битовой точностью, исследовать эффекты
дискретизации и насыщения для систем цифровой обработки сигналов, связи, систем управления и др.
Simulink HDL Coder – это продукт семейства MatLab & Simulink
для генерации полноценного HDL-кода по Simulink моделям
и Stateflow диаграммам. Пакет расширяет возможности разработки аппаратных устройств в среде MatLab и обеспечивает генерацию VHDL и Verilog кода c побитовым и цикловым соответствием
исходной модели Simulink.
Simulink Parameter Estimation – это инструмент, позволяющий по входным и выходным данным реальной физической системы настраивать и калибровать её модель в Simulink.
Simulink Report Generator – это средство генерации отчетов
из среды Simulink. Позволяет автоматически документировать
модели Simulink и Stateflow, включать технические требования
и спецификации в состав отчетов, управлять шаблонами и настраивать внешний вид генерируемой документации. Пакет позволяет
создавать отчеты в форматах: HTML, PDF, RTF, DOC и XML.
33
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.3. Пакет визуального программирования Simulink
Simulink Response Optimization – это дополнительные средства Simulink, позволяющие оптимизировать параметры системы
управления для достижения определенных критериев качества,
заданных во временной или частотной области.
Simulink Verification and Validation – это пакет расширения
Simulink для проведения полного комплекса тестирований и проверок систем с учетом технических требований. Позволяет использовать на всех стадиях проектирования одни и те же технические
требования в рамках единой среды для проверки условий, разработки тестов и расчета тестового покрытия.
Stateflow – это расширение среды Simulink для моделирования
логики событий, состояний и переходов в сложных событийных системах. Stateflow представляет собой язык, элементы которого описывают логику поведения систем в естественной, читаемой, и понятной форме. Stateflow тесно интегрирован с MatLab ® и Simulink ®,
образуя, таким образом, среду для эффективного проектирования
логики систем управления и микропроцессорных устройств.
Stateflow Coder – это специальный продукт для генерации
C-кода по Stateflow-диаграммам. Позволяет получать универсальный C-код, использующий арифметику с плавающей, фиксированной точкой и целочисленные операции. Поддерживаются все
логические объекты и операции Stateflow, что позволяет разрабатывать полноценные алгоритмы и функции в виде отдельных приложений, библиотек или подпрограмм.
Simulink Accelerator – это пакет расширения Simulink для
ускорения процесса имитационного моделирования, для профилирования и поиска узких мест модели.
1.3.2. Библиотеки блоков Simulink
Это библиотеки блоков Simulink, с помощью которых визуально
можно создавать модели (программы) из любых областей знаний.
Video and Image Processing Blockset – это библиотека Simulink
блоков для моделирования, проектирования и разработки систем наблюдения, слежения и обработки видео сигнала в реальном времени.
Библиотека содержит типовые блоки видеофильтрации и современные алгоритмы обработки изображений, включая двухмерную
фильтрацию, статистические функции, геометрические преобра34
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.3.2. Библиотеки блоков Simulink
зования, морфологические операции, двухмерные частотных преобразований, детекторы движения и средства ввода/вывода видео
сигналов.
Gauges Blockset – это пакет расширения Simulink, содержащий богатые средства визуализации аналоговых и цифровых данных на приборах реалистичного вида. Позволяет проектировать
внешний вид различных измерительных приборов.
Communications Blockset – это библиотека Simulink блоков
для проектирования, разработки и тестирования физического
уровня систем связи.
RF Blockset – это библиотека Simulink блоков для моделирования сверхвысокочастотных (СВЧ) систем и радио компонент,
таких как усилители, смесители, передающие устройства, СВЧ
фильтры.
Aerospace Blockset – это библиотека Simulink-блоков, содержащая специальные инструменты для моделирования, интегрирования и имитации авиационных, космических, реактивных
и турбореактивных систем. Включает блоки с математическими
моделями аэросистем и физических явлений, блоки для решения
уравнений движения и преобразования координат, блоки навигации и управления.
Signal Processing Blockset – это библиотека Simulink блоков
для проектирования, разработки и тестирования цифровых систем
обработки сигналов. Позволят осуществлять пакетную и поточную
обработку данных, создавать многоскоростные и разношаговые
системы, разрабатывать системы связи, радары/сонары, системы управления, медицинские измерительные приборы и другие
устройства высокой вычислительной сложности для анализа и обработки данных.
Вывод
Пакет MatLab очень большой пакет, охватывающий практически все области знания человечества.
1.4. Интерфейс MatLab
Начиная с версии MatLab 7.0, его интерфейс меняется незначительно. Мы будем придерживаться интерфейса MatLab R2007b.
35
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Интерфейс MatLab копирует интерфейс операционной системы Window. Разработчики MatLab старались создать среду (подобную операционной системе) в рамках которой можно было бы
работать над любой научной проблемой, не покидая ее.
По умолчанию после запуска пакета MatLab R2007b на экране появляется комбинированное окно, включающее четыре наиболее важные панели: Command Window (Окно команд), Command
History (История команд), Workspace (Рабочее пространство)
и Current Directory (Текущий каталог). Две последние панели закрывают друг друга, и для выдвижения нужной панели на передний план следует щелкнуть по соответствующей вкладке. Три
окна, вписанные в главное окно системы (рис. 1.2), «поставлены
Рис. 1.2. Общий вид главного окна пакета MatLab R2007b
на якоря». Они передвигаются вместе с главным окном системы,
вместе с ним изменяют свои размеры, границы между окнами
можно передвигать. Каждое из них можно снять с якоря (кнопки
Undock (Отстыковать)
, размещенные в правых верхних углах
окон), и тогда оно может занимать автономную позицию на экране.
36
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Вообще, самой используемой панелью является Command Window
(Окно команд). В ней набираются команды пользователя, подлежащие немедленному исполнению. Здесь же выдаются результаты
выполненных команд. В командном окне можно обратиться за помощью по поводу того или иного термина с помощью одной из команд — doc, help или lookfor. Другие окна во время сеанса работы
можно закрыть. Окно Workspace (Рабочее пространство) отображает текущий набор переменных, введенных пользователем в командне окне. Здесь можно увидеть их имена (колонка Name (Имя)),
значения скалярных переменных (колонка Value (Значение))
и тип представляемых данных (колонка Class (Тип данных)). Точно такую же информацию можно увидеть в командном окне после
исполнения команды whos. Поэтому постоянное присутствие окна
Workspace (Рабочее пространство) на экране вряд ли оправдано.
В него удобно заглядывать в тех случаях, когда вам понадобится
откорректировать значения элементов какого-либо массива с помощью Array Editor (Редактор массивов). Это новый инструмент,
появившийся в 7-й версии. Для его вызова достаточно щелкнуть
по имени переменной в поле Workspace (Рабочее пространство).
Окно Command History (История команд) хранит все команды, набираемые пользователем, однако в отличие от содержимого
Command Window (Окно команд) сюда не попадают сообщения системы и результаты вычислений. Эта информация может оказаться полезной для формирования программы, исполняемой в автоматическом режиме.
Совершим беглый экскурс по командам главного меню. Команды меню File (Файл) выполняют обычные функции для большинства систем программирования (рис. 1.3).
При нажатии команды (New (Создать)) открывается дополнительная панель позволяющая выбрать какой программный продукт MatLab мы собираемся создавать (рис. 1.4).
При нажатии команды M-File на панели рис. 1.4. появляется
редактор программ (рис. 1.5). С помощью данного редактора пишутся все программы на языке MatLab.
Замечание
Программы, написанные на языке MatLab, называются
М-файлами, так как MatLab присваивает этим файлам расширение .m.
37
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.3. Команды меню File
При нажатии команды Figure на панели рис. 1.4. появляется
редактор для редактирования графики (рис. 1.6).
При нажатии команды Variable на панели рис. 1.4. активизируется окно Workspace (Рабочее пространство) для работы
с переменными.
При нажатии команды Model на панели рис. 1.4. появляется редактор пакета Simulink для создания моделей Simulink (рис. 1.7).
При нажатии команды GUI на панели рис. 1.4. появляется панель выбора вида редактора для визуальной разработки интерфейса создаваемой MatLab программы (рис.1.8.).
Рис. 1.4. Варианты команды New меню File
38
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.5. Редактор программ пакета MatLab
При выборе, например первого пункта на данной панели, появляется сам редактор для визуальной разработки интерфейса создаваемой MatLab программы (рис. 1.9).
При нажатии команды Deployment Project на панели рис.1.4.
появляется панель для создания нового проекта (рис. 1.10).
Open (Открыть) на рис. 1.3 открывает ранее сохраненную
на винчестере программу. Команда Close Command Window
(Закрыть окно команд) дублирует соответствующую кнопку
в Command Window (Окно команд).
Команды второй группы позволяют сохранить значения всех
переменных из рабочего пространства в дисковом файле (Save
Workspace As (Сохранить рабочее пространство как)) или импортировать ранее сохраненные данные (Import Data (Импортировать
данные)).
Рис. 1.6. Редактор графики
39
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.7.Редактор имитатора Simulink
Команда Set Path (Задать путь) вызывает панель, которая позволяет пополнять список каталогов, просматриваемых системой
в случае вызова библиотечной функции, как из командного окна,
так и из созданной прикладной программы, или изменить порядок
их просмотра (рис. 1.11).
Настройки параметров системы выполняются в окне
Preferences (Предпочтения) (рис. 1.12). Хотя панель настроек
довольно большая, все настройки очень простые и очевидные
и не требуют дополнительных отдельных пояснений.
Четвертая группа команд – традиционная для большинства систем. Она обеспечивает получение твердой копии (команда Print)
с предварительной настройкой параметров бумаги и принтера (команда Page Setup).
Под ними расположена часть меню со списком последних файлов, с которыми работал пользователь. Размер этого списка регулируется, и его основное назначение – ускорить выборку файлов,
открывавшихся в предыдущем сеансе.
Меню Edit (Правка) содержит характерный для любого редактора набор команд по вырезанию (Cut (Вырезать)), копированию (Сору (Копировать)), вставке (Paste (Вставить)), Paste
Special (Специальная вставка)) и удалению (Delete (Удалить))
выделенных фрагментов текстов или графических объектов
(рис. 1.13).
Команда Select All (Выделить все) выделяет текстовый или
графический объект целиком.
40
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.8. Панель выбора вида редактор для визуальной разработки
интерфейса создаваемой MatLab программы
Команды Undo (Отменить) и Redo (Повторить) используются,
соответственно, для отмены только что совершенного действия
или отказа от предшествующей отмены.
С помощью команды Find (Найти) можно найти текстовый
фрагмент и, при необходимости, произвести его замену.
Последняя группа команд позволяет произвести очистку соответствующих окон. Выполнение команд Clear Command Window
(Очистить окно команд), Clear Command History (Очистить окно
истории команд) и Clear Workspace (Очистить переменные рабочего
пространства) по умолчанию сопровождается запросом о подтверждении. Эти сообщения системы можно подавить, устанавливая соответствующие параметры в окне Preferences (Предпочтения).
Команды меню Debug (Отладка) лучше всего изучать при изучении редактора программ (рис. 1.5), и после изучения языка
программирования MatLab, так как они используются при отладке разрабатываемых программ. Поэтому они будут рассмотрены
в конце данной книги.
41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Команды меню Distributed (распределенный) используются
при создании распределенных приложений. Разработка данных
программ требует отдельного изучения и в данной книге подобные
программы рассматриваться не будут.
Рис. 1.9. Редактор для визуальной разработки интерфейса создаваемой
MatLab программы
Рассмотрим команды меню Desktop (Рабочий стол) (рис. 1.14).
Первая группа команд на панели являются контекстно зависимыми, то есть в этой группе команд пишется название выделенного
в данный момент окна. Для панели выделенным окном является
Command Window. В случае, если будет выделено другое окно, то
действие этих команд будет аналогичным, как для окна Command
Window. Данные команды также дублированы в правом верхнем
углу каждого окна.
Команда Undock Command Window (Снять с якоря окно команд) (значок
в правом верхнем углу окна) разъединяет состыкованные окна и позволяет Command Window (Окно команд) перемещаться самостоятельно.
Команда Minimize Command Window (минимизация окна команд) (значок
в правом верхнем углу окна) сворачивает данное окно на панель справа или слева окна (рис. 1.15). Этот значок
(команда) работает подобно похожему значку в окне программ
в операционной системе Window, когда программа сворачивается
42
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.10. Панель для создания нового проекта
на панель задач. Со свернутым окном можно работать так же, как
со свернутой программой в операционной системе Window. Вообще интерфейс MatLab копирует интерфейс операционной системы
Window. Разработчики MatLab старались создать среду (подобную
операционной системе), в рамках которой можно было бы работать
над любой научной проблемой, не покидая ее.
Команда Maximize Command Window (максимизация окна команд) (значок
в правом верхнем углу окна) – развернуть окно
на максимальный размер или вернуть к прежнему размеру. Дей43
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.11. Панель для коррекции списка просматриваемых системой
каталогов
ствие данной команды аналогично действию такого же значка для
любой программы операционной системы Window.
Команда Move Command Window (перемещение окна команд).
Перемешать окна можно и мышкой.
Команда Resize Command Window (изменение размера окна
команд). Изменять окна можно и мышкой.
Команда Desktop Layout (Разметка рабочего стола) определяет количество и расположение одновременно видимых панелей
среды. Вы можете выбрать конфигурацию среды по умолчанию
(Default), которая была приведена на рис. 1.2, или сохранить
на экране только окно команд (Command Window Only). Команда History and Command Window (Окна истории и команд) позволяет сохранить два окна — историю команд и окно команд.
44
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Команда All Tabbed (Все окна) располагает на экране все окна
(рис. 1.16).
При этом одно из окон находится на переднем плане, а любое
из оставшихся выходит на передний план после щелчка по соот-
Рис. 1.12. Панель Preferences для настройки параметров
пакета MatLab
ветствующей вкладке вверху.
Команда All but Command Minimized – все, кроме командного
окна, свернуты.
Начиная с пакета MatLab 7.0, появилась возможность сохранять ту или иную конфигурацию окон на экране, воспользовавшись
командой Save Layout (Сохранить разметку). Файлы, в которых
45
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
запоминаются те или иные конфигурации, могут иметь произвольные имена. Для выбора нужной конфигурации, т. е. одного
из ранее сохраненных файлов, необходимо прибегнуть к команде
Organize Layouts (Организовать разметку).
Следующая группа команд: Command Window (Окно команд),
Command History (История команд), Current Dictionary (Текущий каталог), Workspace (Рабочее пространство), Help (Справка),
Profiler (Профайлер), Editor –редактор программ (М – файлов)
(рис. 1.5), Figures – редактор графики (рис. 1.6), Web Browser –
Рис. 1.13. Команды меню Edit
веб браузер, Array editor – редактор массивов, File Comparisons
– окно сравнения файлов, позволяет из меню установить комбинацию окон, которые должны присутствовать на экране. Включение
или отмена галочки у соответствующей строки меню управляет появлением или исчезновением того или иного окна.
Команды последней группы управляют видимостью панели
инструментов (Toolbar), заголовков окон (Titles). С помощью ко46
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
манды Shortcuts Toolbar (Пользовательская панель) можно создавать пользовательские панели инструментов.
Меню Windows и Help традиционные для всех программ.
На панель инструментов вынесены наиболее употребительные
команды главного меню (рис. 1.17). Только три из них дополняют
главное меню.
Кнопка Simulink обеспечивает вызов самого популярного
расширения пакета MatLab — системы имитационного модели-
Рис. 1.14. Команды меню Desktop
рования. Кнопка GUIDE вызывает конструктор интерфейса, с помощью которого в диалоговом режиме формируется интерфейс
приложения. В правой части панели расположены две кнопки,
47
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.15. Общий вид главного окна пакета MatLab R2007b со
свернутыми Окнами Command Window и Current Directory
обеспечивающие просмотр каталогов (Browse for folder) и переход
по каталогам на один уровень вверх (Go up one level).
Окна Workspace (Рабочее пространство) и Current Directory
(текущий каталог) тоже содержат панели инструментов (рис. 1.18,
1.19).
В рабочем пространстве содержатся переменные, которые мы
вводим в командном окне (Command Window). Например, если набрать в командном окне выражение a = 5 и нажать клавишу Enter,
то в рабочем пространстве появится имя (name) переменной и значение (Value) переменной.
Кнопки панели инструментов окна Workspace (Рабочее пространство) облегчают работу с данными переменными: New variable
создает новую переменную в рабочем пространстве; Open selection
загружает редактор массивов (Array editor) для изменения выделенного массива; Import data загружает переменные в рабочее про48
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.4. Интерфейс MatLab
Рис. 1.16. Общий вид главного окна пакета MatLab в режиме All Tabbed
странство из файла; Save сохраняет переменные рабочего пространства в файле; Print печатает переменные рабочего пространства;
Delete уничтожает выделенную переменную рабочего пространства; Plot selection рисует график для выделенной переменной.
Current Directory (Текущий каталог) – это окно, в котором содержатся файлы текущего каталога. В текущем каталоге по умолчанию сохраняются написанные программы. Его можно изменить
Рис. 1.17. Основная панель инструментов (Toolbar)
49
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1.5. Как изучать пакет MatLab
на основной панели. Однако, чтобы написанные программы смогли запускаться из командного окна, новый текущий каталог обязательно должен быть прописан (Set Path) в списке путей доступа
для системы MatLab (рис. 1.11). То есть новый текущий каталог
надо добавить в этот список.
Кнопки панели инструментов окна Current Directory (Текущий каталог) облегчают работу с файлами данного каталога: Go up
one level – перейти в каталог на уровень выше; New folder – создать новый каталог; Find Files – поиск нужного файла в каталоге;
Report – создание всевозможных отчетов о файлах каталога.
1.5. Как изучать пакет MatLab
Пакет MatLab охватывает знания из очень большого числа областей науки и техники. Поэтому многие авторы называют его энциклопедией знаний и предлагают изучать как энциклопедию, то
есть изучать только нужные библиотеки и инструменты. Однако
в энциклопедии различный материал связан только алфавитом,
то есть энциклопедия не имеет общего внутреннего ядра. Пакет
MatLab формируется вокруг языка программирования MatLab.
Поэтому независимо, в какой бы области знаний не пришлось бы
профессионально работать (в рамках пакета MatLab), необходимо
знать язык программирования MatLab. Таким образом, язык программирования MatLab является внутренним связующим ядром
для данного пакета.
Следовательно, при изучении пакета MatLab необходимо выучить язык программирования MatLab, а только после этого изучать
нужные библиотеки и инструменты. Выучить все библиотеки и все
Рис. 1.18. Панель инструментов окна Workspace
50
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Проектные задания по модулю 1
Рис. 1.19. Панель инструментов окна Current Directory
инструменты пакета MatLab невозможно (как невозможно освоить
все знания человечества) и в этом нет необходимости.
Проектные задания по модулю 1
Задание 1
Обосновать использование языка программирования MatLab
при решении научных и технических задач.
Задание 2
Охарактеризовать языки программирования, используемые
при решении системных задач.
Задание 3
Охарактеризовать языки программирования, используемые
при разработке баз данных
Задание 4
Обосновать область применения пакета MathCad.
Задание 5
Обосновать область применения пакета Maple.
Задание 6
Охарактеризовать возможности финансовых библиотек пакета MatLab.
Задание 7
Охарактеризовать возможности математических библиотек
пакета MatLab.
Задание 8
Охарактеризовать возможности прикладных библиотек пакета MatLab.
51
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тест рубежного контроля модуля 1
Задание 9
Охарактеризовать возможности визуального программирования в рамках пакета simulink.
Задание 10
Охарактеризовать связи пакета MatLab с другими программными продуктами.
Тест рубежного контроля модуля 1
1.
2.
3.
4.
5.
52
Какой язык программирования используется для написания
драйверов и операционных систем?
a) Pascal;
b) SQL;
c) PHP;
d) C++.
Какой язык программирования используется для написания
баз данных?
a) APL;
b) SQL;
c) PHP;
d) C++.
Какой язык программирования используется при разработке
сайтов?
a) MatLab;
b) SQL;
c) PHP;
d) C++.
Какой язык программирования используется в задачах искусственного интелекта?
a) MySQL;
b) Lisp;
c) PHP;
d) Delph.
Какой язык программирования используется в научных
задачах?
a) MySQL;
b) ML;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тест рубежного контроля модуля 1
c) MatLab;
d) APL;
6. Какой язык программирования используется для организации параллельных вычислений?
a) MySQL;
b) ML;
c) MatLab;
d) APL;
7. Какой язык программирования используется для решения
технических задач?
a) MatLab;
b) Haskell;
c) APL;
d) XML.
8. В чем преимущество языка MatLab перед другими языками
программирования?
a) он адаптирован для работы с числами;
b) он адаптирован для работы с матрицами;
c) он адаптирован для работы со структурами;
d) он адаптирован для работы со строками.
9. Какой язык программирования используется для написания
баз данных?
a) APL;
b) Maple;
c) FoxPro;
d) Hope.
10. Какой язык программирования используется для написания
драйверов?
a) Basic;
b) SQL;
c) Assembler;
d) HTML.
11. Какой
язык
предназначен
для
визуального
программирования?
a) C++;
b) Delph;
c) Assembler;
d) HTML.
53
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тест рубежного контроля модуля 1
12. Какой язык программирования используется для написания
сайтов?
a) Basic;
b) SQL;
c) Assembler;
d) HTML.
13. В чем преимущество пакета MathCad перед другими математическими пакетами Maple, MatLab?
a) в простоте освоения и использования;
b) в наличии большого числа библиотек;
c) в большей развитости языка программирования.
14. Какой из программных пакетов имеет преимущество по охвату научных и технических задач?
a) MathCad;
b) Maple;
c) Derive;
d) MatLab.
15. Какой из программных пакетов предназначен для визуального программирования научных и технических задач?
a) MathCad;
b) Maple;
c) Derive;
d) Simulink.
16. Назначение библиотеки GARCH Toolbox пакета MatLab...
a) расчет баланса предприятия;
b) предсказание курсов акций на биржах;
c) оптимизация портфеля инвестиций;
d) интернет доступ к финансовым базам данных.
17. Назначение библиотеки Datafeed Toolbox пакета MatLab...
a) расчет баланса предприятия;
b) предсказание курсов акций на биржах;
c) оптимизация портфеля инвестиций;
d) интернет доступ к финансовым базам данных.
18. Назначение библиотеки Datafeed Toolbox пакета MatLab...
a) расчет баланса предприятия;
b) предсказание курсов акций на биржах;
c) оптимизация портфеля инвестиций;
d) интернет доступ к финансовым базам данных.
54
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тест рубежного контроля модуля 1
19. Назначение библиотеки Financial Toolbox пакета MatLab...
a) расчет баланса предприятия;
b) предсказание курсов акций на биржах;
c) оптимизация портфеля инвестиций;
d) интернет доступ к финансовым базам данных.
20. Назначение библиотеки Fixed-Income Toolbox пакета MatLab...
a) анализ инвестиций с фиксированной доходностью;
b) предсказание курсов акций на биржах;
c) оптимизация портфеля инвестиций;
d) интернет доступ к финансовым базам данных.
21. Какие методы программирования поддерживает пакет
MatLab?
a) только структурное программирование;
b) только объектно-ориентированное программирование;
c) только
структурное
и
объектно-ориентированное
программирование;
d) структурное, визуальное и объектно-ориентированное
программирование.
22. Для чего служит Command Window (Окно команд)?
a) для отображения списка переменных;
b) только для ввода команд;
c) только для вывода результатов команд;
d) для ввода команд и вывода результатов.
23. Для чего служит Workspace (Рабочее пространство)?
a) для отображения списка переменных;
b) только для ввода команд;
c) только для вывода результатов команд;
d) для ввода команд и вывода результатов;
24. Что такое GUIDE?
a) приложение MatLab;
b) конструктор интерфейса приложений;
c) интерфейс MatLab;
d) окно ввода команд.
25. Что такое М-файлы?
a) конструкторы интерфейса;
b) графические файлы;
c) программы написанные на языке MatLab;
d) базы MatLab.
55
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
МОДУЛЬ 2. ЯЗЫК ПРОГРАММИРОВАНИЯ MATLAB
Комплексная цель:
– описать синтаксис языка программирования MatLab;
– помочь овладеть методами структурного программирования
в рамках пакета MatLab.
2.1. Работа в командном окне
Основным окном для работы с пакетом MatLab является командное окно (рис. 1.2.). Из этого окна запускаются программы
на выполнение, запускаются библиотечные функции (достаточно набрать имя функции и нажать клавишу Enter). В командном
окне можно выполнять различные вычисления. Рассмотрим ряд
примеров.
Пример 1.
Основным элементом языка программирования MatLab является матрица. Так как при численном решении, к работе с матрицами сводятся решения систем различных уравнений: алгебраических, дифференциальных, дифференциальных в частных
производных, интегральных и т. д., то MatLab наиболее эффективно, по сравнению с другими языками программирования, способен
решать данные уравнения.
Матрицы в MatLab создаются с помощью квадратных скобок.
Наберем в командном окне выражение
A = [1 3 4; 5 4 7; 6 9 3]
После нажатия клавиши Enter в командном окне, ниже набранного выражения, появится матрица
A=
1 3 4
5 4 7
6 9 3
Как видно при наборе, матрицы точка с запятой служит командой перехода на новую строку.
Пример 2.
Выполним арифметические операции с матрицами. Для этого
в командном окне наберем ряд выражений:
56
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.1. Работа в командном окне
a = [2 4; 3 5] (Enter)
b = [7 8; 5 4] (Enter)
a + b (Enter)
a * b (Enter)
Результат представлен на рис. 2.1.
На рис. 2.1 ans – это внутренняя переменная MatLab, которой
всегда присваивается результат вычисления, если он явно не присвоен какой-либо другой переменной.
Рис. 2.1. Арифметические вычисления в командном окне
57
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.1. Работа в командном окне
Пример 3
(использование библиотечных функций MatLab).
X = [1 2 3 4 5 6 7 8 9] (Enter)
Y = sin(X)
(Enter)
plot (X,Y)
(Enter)
появится график соединяющий точки X,Y (рис. 2.2).
Из приведенных примеров видно, что в командном окне можно выполнять любые вычисления. Учитывая огромные библиотеки функций MatLab, кажется, что командное окно представляет
собой микрокалькулятор (интерактивный решатель) с неограниченными возможностями. Однако на практике все оказывается
не так.
Рис. 2.2. Использование библиотечной функции plot
В командном окне для работы в диалоговом режиме нет удобных панелей как, например, в пакете MathCad, поэтому все команды надо помнить, а это при практической работе очень неудобно.
Кроме того, все функции MatLab не систематизированы для работы в диалоговом режиме, поэтому очень много времени тратится
58
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.2. Программирование в пакете MatLab
на поиск нужной функции. Все это на практике резко ограничивает применимость командного окна как интерактивного решателя
(сложного калькулятора).
В связи с этим при профессиональной работе с пакетом
MatLab, командное окно, как правило, используется для выполнения предварительных или промежуточных несложных вычислений при разработке каких-либо прикладных программ. Это
и естественно, так как основное назначение пакета MatLab – это
разработка независимых программ для любых областей науки
и техники, и любые другие возможности этого пакета являются
второстепенными.
2.2. Программирование в пакете MatLab
MatLab – это современный объектно-ориентированный язык
программирования, специально разработанный для написания
программ, которые решают вычислительные задачи численными
методами.
MatLab поддерживает все известные методы программирования:
- структурное программирование;
- объектно-ориентированное программирование;
- визуальное программирование.
В MatLab бывают программы двух видов.
1. Сценарии – это просто последовательность команд.
2. Функции – это настоящие программы с заголовком программы, входными и выходными параметрами и т. д.
Замечания
1. В языке MatLab, как и в языке С++ не делается различия между понятиями программа и функция (в отличии, например,
от языков Basic, Pascal). В данных языках под написанием
программ как раз и понимается написание функций.
2. Программы в языке MatLab называются M-файлами (M-file),
так как они сохраняются в файлах с расширением (.m).
Для написания программ в пакете MatLab используется редактор программ (Editor), который проще всего вызвать, нажав клавишу New M-file на главной панели (Toolbar).
59
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.3. Правила написания программ
Пример
Напишем программу в виде сценария, как в примере 2 предыдущего параграфа (рис. 2.3).
Рис. 2.3. Пример программы сценария
Сохраним данную программу (клавиша Save основной панели)
под любым именем (например, myfile) в текущем каталоге. Теперь
данную программу можно запустить из командного окна, набрав
имя файла – myfile и нажав клавишу Enter.
В результате в командном окне появятся такие же выражения,
как на рис. 2.1.
До изучения правил написания настоящих программфункций, возможности языка программирования MatLab будем
демонстрировать с помощью программ-сценариев или прямо в командном окне, что, в общем равносильно.
2.3. Правила написания программ
1.
60
Как и в любом языке программирования, программа, написанная на языке MatLab, представляет собой последовательность
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.3. Правила написания программ
операторов. Простейшим оператором является операторвыражение.
2. Операторы в программе (в М-файле) могут писаться в любом
месте, с любыми пропусками между ними (или без пропусков)
и любыми пропусками строк (как в языке С++). Однако каждый оператор должен отделятся друг от друга запятой, либо
точкой с запятой.
3. Если после оператора стоит запятая, то результат вычисления данного оператора выводится на экран (в командное
окно), если стоит точка с запятой, то результат не выводится
на экран.
4. В конце строки запятую как разделитель можно не ставить.
5. В MatLab операторы-выражения могут быть двух видов: с явным присвоением и с неявным присвоением.
Пример 1. Явное присвоение
x = 5;
% здесь явное присвоение
y = 2*x+4 % оператор-выражение с явным присвоением
на экране в командном окне будет
у = 14
Пример 2. Неявное присвоение
x = 5;
% здесь явное присвоение
2*x+4
% оператор-выражение с неявным присвоением
на экране в командном окне будет
ans = 14
При неявном присвоении результат вычисления оператора
присваивается внутренней переменной ans и при отсутствии знака (;) все выводятся на экран в командное окно.
6. После знака (%), поставленного в любом месте строки, идет
комментарий. То есть MatLab после знака (%) любые выражения не обрабатывает, считая их комментариями (см. примеры
1, 2 выше).
7. Длина буфера строки ограничена 256 символами. Однако
на практике строки программы редко превышают 80 символов. Обычно размер строки ограничивается размером экрана,
или предпочтениями программиста.
8. Если оператор-выражение настолько длинное, что не помещается на одной строке, то следует поставить три точки (...),
61
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.3. Правила написания программ
нажать клавишу ENTER и продолжить ввод оператора с новой строки.
9. Правила написания идентификаторов.
Пояснение
Идентификатор – это имя, которое программист присваивает
переменным, функциям, объектам и т. д.
В языке MatLab такие же правила написания идентификаторов, как в языке С++, а именно:
a) идентификаторы обязательно должны начинаться с буквы, за которой может следовать любое число букв, цифр
и знаков подчеркивания;
b) язык MatLab различает символы верхнего и нижнего
регистра (поэтому переменные Sum и sum – это разные
переменные);
c) идентификаторы могут быть любой длины, но MatLab различает только первые 31 букву. Поэтому, если два идентификатора будут различаться символами после 31 буквы,
то MatLab будет считать их одинаковыми.
10. Переменные и функции не надо предварительно объявлять
(как в языке СИ). Их можно сразу вводить в любом месте программы, где это нужно.
11. Запись действительных чисел.
Пример 1. Обычная запись с десятичной точкой
у = 0.01
у = .01
% ноль перед точкой можно не ставить
у=5
% для целых чисел десятичную точку ставить
необязательно
у = +2.5 или у = 2.5
% знак плюс ставить не обязательно.
Пример 2. Числа в научном формате
у = 2.1Е2 % означает число 2.1*102
у = 3.5е-4 % означает число 3.5*10-4
Замечания:
1) можно писать как большую букву Е так и малую букву е;
2) наличие пробела перед и после буквы Е приводит
к ошибке.
12. Запись комплексных чисел.
MatLab ведет вычисления, как в поле действительных, так
и в поле комплексных чисел.
62
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
Пример
При вводе комплексных чисел допускаются следующие
формы:
y = 3+2i,
y = 3+2*i
y = 3+2j,
y = 3+2*j
y = 3+2*sqrt(-1)
Однако в командное окно результат всегда выводится в виде
y = 3+2i
13. Все вычисления в MatLab выполняются с двойной точностью. То есть под число отводится 8 байт, что соответствует типу
чисел double (см. ниже).
2.4. Операции в MatLab
2.4.1. Арифметические операции
В MatLab различают арифметические операции с массивами
и матрицами.
Массив и матрица – это таблица чисел. Различие между этими объектами заключаются только в том, как производить с ними
операции умножения, деления, возведения в степень, транспонирования и т. д.
Определения
Массив – это таблица чисел, с которой отмеченные выше операции производятся поэлементно.
Матрица – это таблица чисел, с которой отмеченные выше операции производятся по законам матричного исчисления.
Теперь последовательно рассмотрим все арифметические операции, используемые в MatLab.
1. Унарный плюс и минус
Данные операции одинаковы и для массивов и для матриц.
+А – унарный плюс, оставляет все элементы массива (матрицы) без изменения.
-А – унарный минус, изменяет знак всех элементов массива
(матрицы) на обратный.
Пример
A = [1 3; 2 5]
% нажать клавишу Enter
В командном окне будет
63
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
A=
1
3
2
5
+A % нажать клавишу Enter
В командном окне будет
ans =
1
3
2
5
Элементы матрицы не изменились
-A % нажать клавишу Enter
В командном окне будет
ans =
-1
-3
-2
-5
Элементы матрицы изменили знак.
2. Сложение и вычитание
Данные операции одинаковы и для массивов и для матриц.
А + В – происходит поэлементное сложение всех элементов
массива (матрицы).
А – В – происходит поэлементное вычитание всех элементов
массива (матрицы).
Замечание
Матрицы должны быть одинакового размера. За исключением
случая, когда одна из матриц скаляр, при этом скаляр расширяется до размеров другой матрицы и происходит поэлементное сложение или вычитание.
Пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А + В % нажать клавишу Enter
В командном окне будет
С =
4
8
6
13
D=A–B
% нажать клавишу Enter
В командном окне будет
64
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.1. Арифметические операции
D=
-2
-2
-2
-3
3. Умножение
Замечание
Обычные знаки умножения (*), деления (/), и т. д. ставятся,
когда действия происходят по законам матричного исчисления.
Чтобы указать, что действие надо производить поэлементно (то
есть с массивами) к обычным знакам умножения (*), деления (/),
и т. д. добавляется знак точка.
4. Умножение массивов
В случае выполнения операции А.*В – происходит поэлементное перемножение массивов одинакового размера.
Замечание1
На скаляр умножаются все элементы массива.
Замечание2
Точка – это признак поэлементного выполнения.
пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А.*В % нажать клавишу Enter
В командном окне будет
С =
3
15
8
40
5. Умножение матриц
В случае выполнения операции А*В происходит перемножение матриц по законам матричного исчисления.
Замечание
На скаляр умножают все элементы матрицы.
Пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А*В
% нажать клавишу Enter
65
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
В командном окне будет
С =
15
29
26
50
6. Деление
MatLab различает два вида деления: правое и левое.
Деление массивов
.\ – левое деление массивов
./ – правое деление массивов
7. Правое деление массивов
В случае выполнения операции А./В – происходит поэлементное деление каждого элемента массива А на соответствующий элемент массива В, т.е. результат правого деления.
C(i, j) =
A (i, j)
B(i, j)
Замечание
Массивы А и В должны быть одинакового размера за исключением случая, когда один из них скаляр в этом случае скаляр применяется ко всем элементам второго массива (говорят, что скаляр
расширяется до размера второго массива).
Пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А./В % нажать клавишу Enter
В командном окне будет
С =
0.333
0.600
0.500
0.623
8. Левое деление массивов
В случае выполнения операции А.\В происходит поэлементное
деление каждого элемента массив. В на соответствующий элемент
массива А, т.е. результат левого деления.
C(i,j)=
66
B(i,j)
A(i,j)
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.1. Арифметические операции
Замечание
Массивы А и В должны быть одинакового размера, за исключением случая, когда один из них скаляр в этом случае скаляр применяется ко всем элементам другого массива (говорят, что скаляр
расширяется до размера второго массива).
Пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А.\В % нажать клавишу Enter
В командном окне будет
С =
3.0000
1.6667
2.0000
1.6000
9. Деление матриц
MatLab различает два вида деления матриц: правое и левое.
\ – левое деление матриц
/ – правое деление матриц
10. Левое деление матриц
А\В – результат данной операции фактически является решением уравнения:
A*X=B
a) если матрица А квадратная размера n×n, а матриц. В размера n×k, то матрица Х=A\B также будет размера n×k и она будет находиться методом Гаусса. Фактически X=A-1×B, где
A-1 – матрица, обратная матрице A;
b) если матрица А прямоугольная m x n, а матриц. В размера
m x k, то система оказывается недоопределенной (когда m
< n, точнее ранг А меньше n) или переопределенной (когда
m > n). В этом случае Х находится на основе минимизации
второй нормы невязок. То есть минимизации выражения
A*X−B .
Минимизация выполняется так, чтобы вектор Х имел наименьшее возможное число ненулевых компонент. Наименьшее возможное число ненулевых компонент всегда равно рангу матрицы А.
67
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
Замечание 1
Если находить Х путем минимизации невязок, не требуя минимального числа компонент Х, то невязки будут меньше, однако
при этом число компонент у Х (отличных от нуля) будет больше
чем ранг матрицы А.
Подобное решение для Х можно найти из выражения
pinv(A)*B, где pinv(A) – библиотечная функция псевдообращения
матрицы А.
Замечание 2
Вторая норма для матрицы А определяется в виде
norm( A ) = max λ Ai ′∗ A ,
i
где λ Ai ′∗ A – собственные значения матрицы A ′ ∗ A
Пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А\В
% нажать клавишу Enter
В командном окне будет
С =
-3
-1
2
2
11. Правое деление матрицы
В/А – результат данной операции является решением уравнения X×A=B. Т. е. X=B×A-1, где A-1 – матрица, обратная матрице A.
Для нахождения решения данного уравнения используются
все те же методы, что описаны выше.
Пример
A = [1 3; 2 5];
% нажать клавишу Enter
B = [3 5; 4 8];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А/В
% нажать клавишу Enter
В командном окне будет
68
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.1. Арифметические операции
С =
-1.0000
1.0000
-1.0000
1.2500
12. Возведение в степень массивов
В случае выполнения операции возведения в степень массивов А.^B происходит поэлементное возведение каждого элемента
массива A в степень соответствующего элемента массива B. То есть
результат возведения в степень массивов будет:
С(i, j)=А(i, j)^В(i, j).
Массивы должны быть одинакового размера, за исключением
случая, когда один из массивов скаляр.
Пример
A = [2 3; 2 5];
% нажать клавишу Enter
B = [1 2; 3 2];
% нажать клавишу Enter
Знак (;) поставлен для того, чтобы не выводить данные матрицы в командное окно.
С = А.^В % нажать клавишу Enter
В командном окне будет
С =
2
9
8
25
13. Возведение в степень матрицы
В случае выполнения операции возведения в степень матрицы
A^P имеются следующие возможности:
a) если Р – положительное целое число, то матрица А перемножается Р раз;
b) если Р – отрицательное число, то матрица, обратная к А
перемножается Р раз;
c) для других значений Р сначала вычисляются собственные значения матрицы А и собственные векторы R, т.е.
[R, D] = eig(A), где библиотечная функция eig вычисляет
собственные значения матрицы А и записывает их по диагонали матрицы D, R – матрица собственных векторов матрицы А. Тогда операция возведения в степень P матрицы
A определяется как:
A^P= R*D.^P/R,
согласно обычным правилам возведения в степень матрицы.
69
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
Пример
A = [2 3; 2 5];
% нажать клавишу Enter
С = А^0.3 % нажать клавишу Enter
В командном окне будет
С =
1.0782 0.4561
0.3041 1.5343
14. Транспонирование массивов
В случае выполнения операции транспонирования массивов
A.' происходит обычная замена строк на столбцы.
Пример
A = [2 3; 2 5];
% нажать клавишу Enter
С = A.'
% нажать клавишу Enter
В командном окне будет
С =
2
2
3
5
15. Транспонирование матриц
В случае выполнения операции транспонирования матриц A',
кроме обычного транспонирования (замены строк на столбцы),
дополнительно выполняется комплексное сопряжение элементов
матрицы.
Пример
A = [2+i 3-2i; 2+3i 5+2i]; % нажать клавишу Enter
С = A'
% нажать клавишу Enter
В командном окне будет
С =
2-i
2-3i
3+2i 5-2i
2.4.2. Операции отношения
В MatLab используются следующие операции отношения.
Данные операции одинаковы и для массивов и для матриц.
A<B
% A меньше B
A <= B
% A меньше или равно B
A>B
% A больше B
A >= B
% A больше или равно B
70
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.2. Операции отношения
A == B
% A равно B
A ~= B
% A не равно B
Сформулируем ряд положений, которые необходимо знать при
использовании данных операций.
1. Операции отношения выполняются поэлементно. При сравнении двух массивов с помощью операций отношения получается массив того же размера, элементы которого равны единице,
если соотношение удовлетворяет условию и нулю, если нет.
Пример
A = [2 3; 2 5];
% нажать клавишу Enter
B = [1 2; 3 2];
% нажать клавишу Enter
С = А > В
% нажать клавишу Enter
В командном окне будет
С =
1
1
0
1
2. Операции <, < =, > =, > используются для сравнения только
действительных частей комплексных чисел.
Пример
A = [2+i 3+i; 2+2i 5-2i]; % нажать клавишу Enter
B = [1+3i 2+2i; 3-3i 2+i]; % нажать клавишу Enter
С = А > В
% нажать клавишу Enter
В командном окне будет
С =1
1
0
1
3. Операции ~ =, = = осуществляют сравнение как действительных, так и мнимых частей комплексных чисел.
Пример 1
A = [2+i 3+i; 2+2i 5-2i]; % нажать клавишу Enter
B = [2+i 2+2i; 3-3i 2+i];
% нажать клавишу Enter
С = А = = В
% нажать клавишу Enter
В командном окне будет
С =1
0
0
0
Пример 2
С =А ~ = В
% нажать клавишу Enter
В командном окне будет
71
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
4.
5.
С =0
1
1
1
Для сравнения двух строк следует использовать функцию
strcmp.
Пример 1
C = strcmp('abc','abc')
% нажать клавишу Enter
В командном окне будет
C=1
Пример 2
C = strcmp('abc','ab')
% нажать клавишу Enter
В командном окне будет
C=0
Если один из операторов соотношения скаляр, то он расширяется до размеров второго массива и после этого происходит
сравнение.
Пример
Х = 5;
% нажать клавишу Enter
А = [1 2 3;4 5 6;7 8 10];
% нажать клавишу Enter
X >= A
В командном окне будет
ans = 1
1
1
1
1
0
0
0
0
2.4.3. Логические операции
В MatLab используются следующие логические операции.
Данные операции одинаковы и для массивов и для матриц.
А&B – операция логического И (AND)
АB – операция логического ИЛИ (OR)
~A – операция логического НЕ (NOT)
XOR (A,B) – операция исключающего ИЛИ
Сформулируем ряд положений, которые необходимо знать при
использовании данных операций.
1. При работе с массивами операции применяются поэлементно.
2. Численное значение 0 соответствует Булеву значению FALSE,
любое другое численное значение соответствует Булеву значению TRUE (как в языке С++).
72
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.3. Логические операции
Таблица 2.1
Таблица истинности для логических операций
А
0
0
1
1
В
0
1
0
1
~A
1
1
0
0
A&B
0
0
0
1
АB
0
1
1
1
XOR (A,B)
0
1
1
0
Пример
A = [0 3; 2 8]; % нажать клавишу Enter
С =~ A
% нажать клавишу Enter
В командном окне будет
С =1
0
0
0
D =~ C
% нажать клавишу Enter
В командном окне будет
D=
0
1
1
1
Из примеров видно, что MatLab Булеву значению FALSE ставит в вычислениях ноль, а Булеву значению TRUE ставит в вычислениях единицу, хотя любое число воспринимается как TRUE.
3. Данные операции могут быть применены как для численных
матриц, так и для логических (см. справочник по логическим
функциям MatLab).
Пояснение
Матрицы, полученные в результате применения логических
операций или применения к обычным матрицам логических
функций (например, isprime (проверка чисел массива на простоту), isletter (проверка являются ли элементы массива, буквами)
и т. д.), являются логическими. Элементы в логической матрице
занимают в памяти один байт, элементы в числовой матрице занимают в памяти восемь байт. Элементы логической матрицы имеют тип logical, элементы обычной числовой матрицы имеют тип
double.
Пример (продолжим предыдущий пример)
H = isprime(A)
73
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
В командном окне будет
H= 0 1
1 0
То есть непростыми числами являются 0 и 8.
Теперь рассмотрим характеристики всех матриц A, C, D, H.
Для этого воспользуемся библиотечной командой whos. Наберем
данную команду в командном окне и получим характеристики всех
матриц.
whos
% нажать клавишу Enter
В командном окне получим
Name Size
Bytes Class
Attributes
H
2x2
4 logical
A
2x2
32 double
С
2x2
4 logical
D
2x2
4 logical
Из полученной таблицы видно, что все матрицы имеют размер
2x2. Матрицы Н, С, D – логические, каждый элемент в данных матрицах занимает в памяти один байт. Матрица А – обычная числовая, каждый элемент в данной матрице занимает в памяти восемь
байт. Однако, при обычных вычислениях следить за типом матриц,
как правило, не нужно.
2.4.4. Операция формирования массивов
Как было отмечено выше, массивы в MatLab могут быть образованы с помощью оператора (конструктора) квадратные скобки.
Пример 1
А = [1 2 3 4 5 6 7] % нажать клавишу Enter
В командном окне получим
А =
1 2 3 4 5 6 7
Однако, когда числа возрастают или убывают в массиве
с каким-либо шагом, то для формирования данного массива можно
использовать оператор двоеточие.
Пример 2
Сформируем массив подобный массиву А (пример выше) с помощью оператора двоеточие.
B = 1:1:7 % нажать клавишу Enter
74
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.4. Операция формирования массивов
В командном окне получим
В =
1 2 3 4 5 6 7
Сформулируем ряд положений, которые необходимо знать при
использовании данной операции.
1. Первое число в записи выше – начальный элемент массива,
второе – шаг изменения элементов массива, третье – конечный
элемент массива.
2. Если шаг изменения элементов массива единица его можно
не писать.
Пример 3
B1 = 1:7
В командном окне получим
В1 =
1 2 3 4 5 6 7
Массивы примеров 2 и 3 полностью эквивалентны.
3. Шаг при формировании массива может иметь как дробное, так
и отрицательное значение, в последнем случае конечный элемент должен быть меньше начального элемента
Пример 4
B1 = 4:-2:-4 % нажать клавишу Enter
В командном окне получим
А =
4 2
0 -2 -4
То что массив А, сформированный с помощью оператора квадратные скобки, полостью эквивалентен массиву, сформированному с помощь оператора двоеточие, видно из характеристик этих
массивов полученных командой whos.
Пример 5
whos
% нажать клавишу Enter
В командном окне получим
Name Size
Bytes Class
Attributes
A
1x7
56 double
B
1x7
56 double
Из таблицы выше видно, что массивы А. В полностью
эквивалентны.
75
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4. Операции в MatLab
2.4.5. Приоритет различных операций MatLab
Для того, чтобы понимать последовательность выполнения
различных операций в программах MatLab, необходимо знать их
приоритеты. Расположим все операции MatLab в последовательности убывания их приоритетов.
1 уровень:
a) операции транспонирования (/ ), (./),
b) операции возведения в степень (^ ), (.^).
2 уровень:
a) операции унарный плюс и минус (+А),( -А).
3 уровень:
a) операции умножения (*),(.*),
b) операции деления (\), (/), (.\), (./).
4 уровень:
a) операции сложения и вычитания (+), (-).
5 уровень:
a) операция формирования массивов (:).
6 уровень:
a) операции отношения (<), (<=), (>), (>=), (~ =), (= =).
7 уровень:
a) логическая операция NOT.
8 уровень:
b) логические операции (&), (), (XOR).
Сформулируем ряд замечаний, которые необходимо знать при
использовании приоритетов операций в MatLab.
Замечания
1. Внутри каждого уровня, операции имеют равный приоритет
и вычисляются в порядке следования слева на право.
2. Заданный по умолчанию порядок следования может быть изменен с помощью круглых скобок.
Пример
Расставить последовательность выполнения операций в примерах ниже и вычислить их.
1. 5*6^3>5+4==6^2+6|6/3*4&6+5*7
2. 6<7+4^3~=5-4/3&6*4/3\3*4|6+8
3. 2|~4^3+6*xor(4,0)&8|(4==2)-4
4. 5*6^3>5+4==6^(2+6)|6/3*4&6+5*7
76
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.4.6. Операции побитовой обработки
5.
6.
7.
8.
9.
10.
(6<7)+4^3~=5-4/3&6*4/(3\3)*4|(6+8)
1^5:9<7|8&5>=7+8&5^3
3*4+5/6\3|5<6&7>4&~6>7<2==7
(2|~4)^(3+6)*xor(4,0)&8|(4==2)-4
3-2*4/5\4>6<7==4|4~=7&6^3
(3*4+5)/6\(3|5<6)&7>4&~6>7<2==7
2.4.6. Операции побитовой обработки
Данные операции используются для работы с отдельными
битами чисел. Они реализуются в виде функций. Так как данные операции в наших программах использоваться не будут (они
в основном используются при системном программировании), то
они здесь не будут и рассматриваться (подробнее см. в справочнике
по функциям MatLab).
2.4.7. Операции обработки множеств
В MatLab качестве множеств используются или числовые массивы или массивы строк. Операции обработки множеств реализуются в виде функций. Так как данные операции в наших программах
использоваться не будут, то они здесь не будут и рассматриваться
(подробнее см. в справочнике по функциям MatLab).
2.5. Операторы MatLab
2.5.1. Операторы цикла
1. Цикл for
Оператор for задает фиксированное число циклов. В MatLab
цикл for может быть двух видов:
Первый вид оператора for
for i = a:b:c
<Команды программы>
еnd
В операторе выше переменные имеют следующий смысл:
77
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5. Операторы MatLab
i – переменная цикла;
a – начальное значение переменной цикла
b – шаг приращения переменной цикла
с – конечное значение переменной цикла
Рассмотрим на примере работу данного цикла.
Пример 1 (набрать в виде программы-сценария)
for i = 1:2:5
a = 4+i
end
Первый цикл
На первом цикле i = 1, затем будут выполнены команды внутри цикла, а = 4+1. После команды end выполнение цикла начнется сначала.
Второй цикл
На втором цикле переменная цикла увеличится на шаг
i = 1+2 = 3, затем будут выполнены команды внутри цикла, а = 4+3.
После команды end выполнение цикла начнется сначала.
Третий цикл
На третьем цикле переменная цикла еще увеличится на шаг
i = 3+2 = 5, затем будут выполнены команды внутри цикла, а = 4+5.
После команды end выполнение цикла начнется сначала.
Как и в предыдущих циклах, будет вычислена переменная
цикла i = 5+2 = 7. Вычисленное значение будет сравнено с конечным значением переменной цикла, так как в этом случае переменная цикла i = 7 будет больше конечного значения переменной цикла, то цикл выполняться больше не будет. Программа закончит
работу.
Сформулируем ряд положений, которые необходимо знать при
использовании данного оператора.
1. Шаг приращения переменной цикла может быть как положительным, так и отрицательным.
2. Если шаг приращения переменной цикла не пишется, то считается, что он равен единице.
Пример 2 (набрать в виде программы-сценария)
Рассмотрим пример суммирования чисел с использованием
цикла for. Найдем сумму чисел от единицы до четырех.
S=0
% начальное значение суммы
for i = 1:4
78
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.1. Операторы цикла
S = S+i
end
Рассмотрим работу данной программы.
Первый цикл
На первом цикле i = 1, затем будут выполнены команды внутри цикла, S = S+i = 0+1 = 1 (так как начальное значение S равно
нулю). После команды end выполнение цикла начнется сначала.
Второй цикл
На втором цикле переменная цикла увеличится на шаг
i = 1+1 = 2, затем будут выполнены команды внутри цикла,
S = S+i = 1+2 =3 (так как предыдущее значение S равно 1). После
команды end выполнение цикла начнется сначала.
Третий цикл
На третьем цикле переменная цикла еще увеличится на шаг
i = 2+1 = 3, затем будут выполнены команды внутри цикла,
S = S+i = 3+3 = 6 (так как предыдущее значение S равно 3). После
команды end выполнение цикла начнется сначала.
Четвертый цикл
На четвертом цикле переменная цикла еще увеличится на шаг
i = 3+1 = 4, затем будут выполнены команды внутри цикла,
S = S+i = 6+4 = 10 (так как предыдущее значение S равно 6). После
команды end выполнение цикла начнется сначала.
Больше цикл for выполняться не будет, так как переменная
цикла достигла конечного значения.
Данный пример очень характерен для использования цикла
for.
Пример 3 (набрать в виде программы-сценария)
Вычисление с помощью цикла for массивов значений
x(1) = 1
% первый элемент массива х
for i = 2:4
% i
последовательно принимает значения
2,3,4
x(i) = 2*x(i-1) % вычисление новых элементов массива х
end
Рассмотрим работу данной программы.
Пояснение
К элементам массивов обращаются с помощью оператора круглые скобки. Например, если дан массив А = [4 5 6], то, чтобы
взять второй элемент у данного массива, надо написать С = А(2),
79
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5. Операторы MatLab
при этом переменная С будет равна 5 (подробно индексация массивов будет рассмотрена в теме массивы ниже).
Первый цикл
На первом цикле i = 2, затем будут выполнены команды внутри цикла, х(2) = 2*х(1) = 2*1 = 2 (так как x(1) = 1). После команды
end выполнение цикла начнется сначала.
Второй цикл
На первом цикле i = 3, затем будут выполнены команды внутри цикла, х(3) = 2*х(2) = 2*2 = 4 (так как x(2) = 2). После команды
end выполнение цикла начнется сначала.
Третий цикл
На первом цикле i = 4, затем будут выполнены команды внутри цикла, х(4) = 2*х(3) = 2*4 = 8 (так как x(3) = 4). После команды
end выполнение цикла начнется сначала.
В результате выполнения данной программы получится вектор х со значениями х = [1 2 4].
Пример 4 (набрать в виде программы-сценария)
Данный пример разберите самостоятельно
x(5) = 1
% первый элемент массива х
for i = 4:-1:1
% отрицательное приращение
x(i) =2 *x(i-1)
end
Второй вид оператора for
for i = A
% А – матрица
<Команды программы>
end
В этом случае переменная цикла последовательно принимает
значения столбцов матрицы А, т.е. А(:,К) (при первом цикле К = 1,
при втором К = 2 и т. д.).
Пример 1 (набрать в виде программы-сценария)
Найти сумму элементов вектора x
х = [4 8 2]
% вектор
S=0
% начальное значение суммы
for i = x
S = S+i
end
Рассмотрим работу данной программы.
80
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.1. Операторы цикла
Первый цикл
На первом цикле i = 4, затем будут выполнены команды внутри цикла, S = S+i = 0+4 = 4 (так как начальное значение S равно
нулю). После команды end выполнение цикла начнется сначала.
Второй цикл
На втором цикле i = 8, затем будут выполнены команды внутри цикла, S = S+i = 4+8 = 12 (так как предыдущее значение S равно 4). После команды end выполнение цикла начнется сначала.
Третий цикл
На третьем цикле i = 2, затем будут выполнены команды внутри цикла, S = S+i = 12+2 = 14 (так как предыдущее значение S
равно 12). Цикл заканчивается.
Пример 2 (набрать в виде программы-сценария)
Найти число элементов вектора x
х = [4 8 2]
% вектор
S=0
% начальное значение суммы
for i = x
S = S+1
end
Рассмотрим работу данной программы.
Первый цикл
На первом цикле i = 4, затем будут выполнены команды внутри цикла, S = S+i = 0+1 = 1 (так как начальное значение S равно
нулю). После команды end выполнение цикла начнется сначала.
Второй цикл
На втором цикле i = 8, затем будут выполнены команды внутри цикла, S = S+i = 1+1 = 2 (так как предыдущее значение S равно
1). После команды end выполнение цикла начнется сначала.
Третий цикл
На третьем цикле i = 2, затем будут выполнены команды внутри цикла, S = S+i = 2+1 = 3 (так как предыдущее значение S равно
2). Цикл заканчивается.
Таким образом, получаем, что число элементов у вектора х
равно трем, как и должно быть.
Пример 3 (набрать в виде программы-сценария)
Данный пример разберите самостоятельно
X = [];
% пустой массив без элементов
for V = [0 2 3 1]
81
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5. Операторы MatLab
X = [X 2^V]
% добавление к массиву новых элементов
end
Цикл формирует вектор, элементами которого являются
числа 2V(i).
2. Цикл while
В операторе while число циклов заранее неизвестно, оно определяется в процессе выполнения программы.
Оператор цикла while имеет вид
while <логическое выражение>
<Команды программы>
end
Сформулируем ряд положений, которые необходимо знать при
использовании данного оператора.
1. Данный оператор выполняет неопределенное число циклов,
пока логическое выражение истинно.
2. Если логическое выражение использует массив, то все его элементы должны быть истинны, чтобы цикл продолжался.
Пример 1
while Х
% X массив
<Команды программы>
end
Эта программа эквивалентна программе
while all (Х)
Команды программы
end
Пояснение
Функция all – библиотечная функция, возвращает единицу
(истина), если все элементы матрицы Х отличны от нуля. Если же
хотя бы один элемент матрицы Х равен нулю, то функция возвращает нуль (лож).
Пример 2 (набрать в виде программы-сценария)
Определим точность, с которой вычисляет MatLab. То есть нам
надо узнать такое наименьшее число eps, для которого еще выполняется соотношение 1+eps >1.
Точность вычисления определяется тем, сколько значащих
цифр после точки удерживает MatLab в своих вычислениях. До82
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.1. Операторы цикла
пустим, точность вычисления MatLab – 10^(-16). Тогда, если eps
больше этого числа, прибавление его к единице увеличит результат, если eps меньше этого числа, то для MatLab eps будет равен
нулю (так как значащие цифры, меньшие 10^(-16), MatLab не учитывает) и, следовательно, прибавление eps к единице не увеличит
результат.
Напишем программу-сценарий для определения точности вычисления в пакете MatLab.
eps = 1;
% начальное значение переменной eps
while (1+eps) >1
eps = eps/2
% уменьшение величины переменной eps
на каждом шаге
end
eps = eps*2
% конечное значение переменной eps
Рассмотрим работу данной программы. В первой строке переменной eps присваивается начальное значение единица. Цикл
while……. еnd будет работать до тех пор, пока будет выполняться
условие (1+eps)>1. В строке eps = eps/2 переменная eps делится
пополам, и новое значение присваивается той же переменной eps.
Таким образом, на каждом цикле значение переменной eps уменьшается в два раза. Цикл будет работать до тех пор, пока значение
переменной eps не станет столь малым, что MatLab будет воспринимать его как ноль. После этого цикл закончится. В последней
строке переменная eps возвращается к последнему значению, которое воспринимается еще MatLab как не нуль. Полученное значение и будет давать точность, с которой вычисляет MatLab.
Пример 3 (набрать в виде программы-сценария)
В цикле вычисляется произведение чисел от единицы до n (то
есть n!) Надо найти такое наименьшее n для которого однако еще
выполняется условие n! >= 1010.
n = 1;
p = 1;
while p < 1.E10
n = n+1;
p = p*n;
end
n
83
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5. Операторы MatLab
Работу программы разобрать самостоятельно
Замечание
Операторы цикла могут иметь любую степень вложенности.
То есть циклы один в другой могут вкладываться любое число раз.
2.5.2. Оператор условия if
Оператор условия if может быть в трех видах.
Вид первый
if <логическое выражение>
<Команды программы>
end
Вид второй
if <логическое выражение>
<Команды программы 1>
else
<Команды программы 2>
end
Вид третий
if <логическое выражение 1>
<Команды программы 1>
elseif<логическое выражение 2>
<Команды программы 2>
elseif <логическое выражение3>
<Команды программы 3>
………………………………..
else
<Команды программы 4>
end
Сформулируем ряд положений, которые необходимо знать при
использовании данного оператора.
1. В операторе первого вида: если <логическое выражение>
верно, то выполняются <Команды программы>, если <логическое
выражение>, не верно, то оператор if вообще не выполняется.
84
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.2. Оператор условия if
2. В операторе второго вида: если <логическое выражение>
верно, то выполняются <Команды программы 1>, если <логическое выражение>, не верно, то выполняются <Команды программы 2>.
3. В операторе третьего вида может быть любое число командных слов elseif. Кроме того, командное слово else может
отсутствовать.
4. В операторе третьего вида: если <логическое выражение1>
верно, то выполняются <Команды программы 1>; если <логическое выражение1>, не верно, то проверяется <логическое выражение2>; если оно верно, то выполняются <Команды программы
2>; если <логическое выражение2>, не верно, то проверяется <логическое выражение 3> и т. д. Если все логические выражения
не верны, то выполняются <Команды программы 4>.
5. Обычно <логическое выражение>, как в операторе if, так
и в операторе while имеет следующий вид.
Выражение 1 <операция отношения> Выражение 2
Операциями отношения являются следующие операции (<,
<=, >, >=, = =,~ =). Однако это не обязательно.
6. Если логическое выражение – матрица, то оператор if выполняется, если все элементы этой матрицы отличны от нуля.
Пример
Пусть Х – матрица, полученная в результате вычисления
какого-либо логического выражения, тогда две программы ниже
эквивалентны.
if X
if all(X)
<Команды программы> ЭКВИВАЛЕНТНО <Команды программы>
end
end
all(X) – библиотечная функция, равная единице, если все элементы матрицы Х отличны от нуля, и нулю в противном случае.
7. Если в операторе
if A
<Команды программы 1>
else
<Команды программы 2>
end
массив А пустой, то будут выполнятся <Команды программы 2>.
85
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5. Операторы MatLab
Пояснение
Простейшим пустым массивом является массив А = [] (то есть
пустые квадратные скобки). Другие пустые массивы будут рассмотрены в параграфе 3.2. ниже. Там же будут рассмотрены случаи,
когда такие массивы используются в MatLab.
8. Данные операторы также могут иметь любую степень
вложенности.
Пример 1 (набрать в виде программы-сценария)
Напишем программу вычисления кусочной функции
sin(x) если
y= cos(x) если
если
x2
x<0
0≤x<2
x≥2
x=5;
if x<0
y=sin(x)
elseif (0<=x)&(x<2)
y=cos(x)
else
y=x^2
end
Рассмотрим работу данной программы. В зависимости от значения х в первой строчке программы будет вычисляться одна
из трех функций, входящих в кусочную функцию. Обратите внимание, что двойное неравенство 0 < x < 2 нельзя прямо писать
в программе в любом языке программирования, так как результат
будет неверным. Действительно, при х = 5 данное значение не принадлежит интервалу 0 < x < 2. Следовательно, в операторе elseif
логическое условие должно быть равно нулю (логическое условие
(0<= 5) & (5 < 2)= 0), но 0 < 5 < 2 =1. Таким образом, получается
не тот результат, который нужен. Т. к., выполняя это выражение
слева направо, получим 0 < 5 =1, а затем 1 < 2 =1.
2.5.3. Оператор переключатель switch
Когда в программе необходимо выполнить выбор из большого
число команд, лучше всего для этой цели использовать оператор
переключатель switch.
86
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.3. Оператор переключатель switch
В общем случае данный оператор имеет вид.
switch <выражение>
case <значение1>
<Команды программы 1>
case <значение2>
<Команды программы 2>
……………….
……………….
otherwise
<Команды программы 3>
end
Сформулируем ряд положений, которые необходимо знать при
использовании данного оператора.
1. <выражение> после оператора switch должно быть обязательно или скаляром, или строкой.
2. После оператора case на месте <значения 1, 2 и т. д.> должно
быть или число, или строка (или массив ячеек, содержащий
или числа или строки).
Пояснение
Массив объединяет в единый объект (не путать с программным объектом) различные числа. Например А = [ 3 5; 0.2 2.3].
Здесь создан массив чисел 2×2. В языке MatLab в единый объект
(не путать с программным объектом) аналогично можно объединить различные типы (числа, строки, и т. д.). Например В = {2 4;
'abc' 'cbd'}. Такое объединение называется массивом ячеек. Здесь
создан массив ячеек 2×2, содержащий два числа и две строки. Подробно массивы ячеек будут рассмотрены ниже.
3. При выполнении оператора switch сначала вычисляется
<выражение>, а затем полученное значение последовательно сравнивается со <значениями 1, 2, 3 и т. д.>. В случае совпадения выполняются команды программы после оператора
case, значение которого совпало с результатом вычисления
<выражение>.
4. В случае, если в качестве <значения 1, 2 и т. д.> используется
массив ячеек, следующие за ним команды программы выполняются, если выражение совпадает хотя бы с одним из значений из массива ячеек.
87
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5. Операторы MatLab
Пример 1 (набрать в виде программы-сценария)
switch input('введите значение')
case 1
'один'
case 0
'нуль'
otherwise
'другое значение'
end
Рассмотрим работу данной программы. input('введите значение') – библиотечная функция при ее выполнении на экране (в командном окне) появится фраза 'введите значение' и компьютер будет ждать ввода с клавиатуры. После того, как будет введено любое
число и нажата клавиша Enter, выражение после оператора switch
будет равно введенному значению. Затем оператор switch сравнивает введенное значение со значениями после командного слова
case. Например, если с клавиатуры будет введено число 1, то будут
выполнены команды после case 1, то есть в командном окне появиться слово 'один'. Если будет введено число не равное 0 или 1,
то выполнятся команды после командного слова otherwise, то есть
на экране появиться фраза 'другое значение'.
Пример 2 (набрать в виде программы-сценария)
switch input('введите значение')
сase 1
'один'
сase {2, 3, 4}
'два, три, четыре'
сase 5
'пять'
оtherwise
'что-то другое'
end
Работу программы разобрать самостоятельно. Обратите внимание, что используется массив ячеек {2, 3, 4}. Следовательно,
команды после сase {2, 3, 4} будут выполнены если с клавиатуры
будет введено одно из чисел 2, 3, 4.
88
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.4. Оператор прерывания break
2.5.4. Оператор прерывания break
Оператор break используется для прерывания выполнения циклов for и while. Обычно оператор break используется в сочетании
с оператором if.
Пример (набрать в виде программы-сценария)
Найти сумму всех вводимых с клавиатуры положительных
чисел. Условие окончания суммирования – ввод не положительного числа.
S = 0;
% начальное значение суммы
while 1
% бесконечный цикл
n = input('введите число')
if n <= 0, break, end
S = S+n;
% вычисление суммы
end
S
% вывод результата вычисления
Рассмотрим работу данной программы. Оператор while 1 называется бесконечным циклом, так как <логическое выражение> для
данного оператора равно единице (то есть истина). Следовательно,
данный цикл всегда будет выполняться. В третьей строке с клавиатуры вводится число. В четвертой строке проверяется, является ли
это число отрицательным или нет. Если число не положительное,
то цикл прерывается. Если введенное число положительное, то оно
суммируется в пятой строке.
2.5.5. Оператор возврата в вызывающую функцию
Если из первой функции вызывается вторая функция, то
возврат в первую функцию происходит при наступлении одного
из двух событий. Во-первых, если вторая функция закончит свою
работу. Во-вторых, если в процессе выполнения второй функции
встретится оператор return.
Таким образом, оператор return выполняет нормальный возврат в вызывающую функцию или возврат к режиму работы
с клавиатурой.
Подробно данный оператор будет рассмотрен после изучения
темы функции ниже.
89
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6. М-файлы
2.6. М-файлы
Программы, написанные на языке MatLab, называются
М-файлами, т.к. им присваивается расширение М. Существует два
вида М-файлов:
1. М-сценарии.
2. М-функции.
2.6.1. М-сценарии
М-сценарий – это просто последовательность команд языка
программирования MatLab.
После вызова из командно окна данного М-сценария, MatLab
последовательно читает команды сценария и их выполняет,
т.е. MatLab выполняет сценарий в режиме интерпретации (по
операторам).
Сценарий не создает свою рабочую область, а пользуется переменными из основной рабочей области, а также может создавать
новые переменные в основной рабочей области, которые остаются
в ней и после завершения работы сценария. Таким образом, хотя
М-сценарий не возвращает выходных аргументов (как настоящие программы-функции), тем не менее, переменные, созданные
во время работы сценария, могут быть использованы для дальнейших вычислений.
Пояснение
Переменные,
введенные
внутри
программы-функции
(М-функции), помешаются в специальную область памяти, называемую рабочей областью функции.
Переменные, введенные в командном окне, помешаются
в специальную область памяти, называемую основной рабочей
областью.
Так, как М-сценарий – это просто последовательность команд,
то его нельзя (в отличие от функции) использовать в качестве операнда в выражениях, а также в качестве аргументов функций.
Замечание
Если включен режим еcho on (команда еcho on (Enter) в командном окне), то команды сценария выводятся в командное окно,
90
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6.2. М-функции
а затем выполняются (эхо контроль), если нет, то в командное окно
выводятся только результаты выполнения команд сценария.
Пример
Везде выше в примерах, при изучении операторов создавались
М-сценарии. Напишем сценарий построения графика.
х = 0: 0.1:5
у = sin(x)
plot(x,y)
plot(x,y) – библиотечная функция для построения декартовых
графиков по точкам х,у. После набора данного текста в редакторе
его надо сохранить в М-файле под каким-либо именем, например
pet.m.
Чтобы запустить в работу данный сценарий, надо в командном
окне набрать имя сценария pet и нажать клавишу Enter. На экране
появится график.
2.6.2. М-функции
М-функции – это основные элементы в программировании
на языке MatLab. Они играют роль и подпрограмм и функций
в обычном структурном программировании.
В MatLab М-функции могут иметь произвольное число, как
входных, так и выходных параметров (в этом смысле они подобны
функциям языка С++). Кроме того, М-функции являются методами при объектно-ориентированном программировании.
М-функции создают свои рабочие области. Поэтому любая
переменная, определенная внутри М-функции, попадает в рабочую область этой функции и видна только для операторов этой
функции (т. е. может быть использована только в операторах этой
функции). При завершении работы М-функции ее рабочая область
также уничтожается.
Пояснение
Переменные, введенные внутри М-функции, помешаются
в специальную область памяти, называемую рабочей областью
функции.
91
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6. М-файлы
2.6.3. Структура М-функции
1.
2.
3.
4.
М-функция состоит из следующих частей.
Заголовок функции.
Первая строка комментария.
Собственно комментарий.
Тело функции.
1. Заголовок функции
Заголовок функции имеет вид:
function
[список
выходных
переменных]=<имя
функции>(список входных переменных).
Список выходных переменных (если их несколько) заключается в квадратные скобки. Если выходная переменная только одна,
то ее можно не заключать в квадратные скобки.
Список входных переменных всегда в круглых скобках (даже
если переменная одна).
Переменные списков отделяются запятыми.
Пример
Различные виды написания заголовков функции.
1. function y=average(x)
2. function [y, z]=tools (x1,x2,x3)
2. Первая строка комментария
Первая строка комментария определяет название функции
и содержит важную информацию об М-функции, поэтому она
должна быть тщательно составлена.
Первая строка функции выводится по команде help<имя каталога>, а также используется функцией поиска lookfor.
Пример 1
Обратимся к каталогу основных элементарных математических функций MatLab, то есть каталогу elfun. В командном окне
введем
>> help elfun
% нажать клавишу Enter
Elementary math functions.
Trigonometric.
sind
– Sine of argument in degrees.
sinh
– Hyperbolic sine.
92
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6.3. Структура М-функции
asin
– Inverse sine.
asind – Inverse sine, result in degrees.
В примере приведены только несколько строк из выведенного
каталога, так как весь каталог очень большой. Строки представляют собой первые строки комментариев из всех функций данного
каталога.
Пример 2
>> lookfor sin
% нажать клавишу Enter
По данной команде MatLab ищем слово sin во всех первых
строчках комментариев всех функций из списка каталогов Set
Path меню MatLab (Рис. 1.11).
3. Основной комментарий
Комментарий должен содержать инструкцию по использованию данной М-функции.
По команде help<имя функции> MatLab отображает строки
комментария, которые размещаются между строкой определения
функции (заголовком) и первой пустой строкой либо началом программы. Команда help<имя функции> игнорирует любые комментарии, размещенные вне этой области.
Замечание
Можно создать комментарий для целого каталога, если сформировать специальный файл с именем contents.m. Этот файл должен содержать только первые строки комментариев в функциях.
Тогда по команде help<имя каталога> MatLab будет выводить
строки именно этого файла. В отсутствие этого файла в каталоге,
MatLab выводит первые строки всех файлов каталога.
Пример
Получим комментарий для библиотечной функции all
>> help all
ALL True if all elements of a vector are nonzero.
For vectors, ALL(V) returns logical 1 (TRUE) if none of the elements
of the vector are zero. Otherwise it returns logical 0 (FALSE). For
matrices, ALL(X) operates on the columns of X, returning a row
vector of logical 1's and 0's. For N-D arrays, ALL(X) operates on
the first non-singleton dimension.
ALL(X,DIM) works down the dimension DIM. For example,
ALL(X,1) works down the first dimension (the rows) of X.
93
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6. М-файлы
Замечание
Как первую строку комментария, так и весь комментарий
можно и не писать, он никак не влияет на работу программы в целом. Однако по стандарту языка программирования MatLab писать комментарий нужно.
4. Тело функции
Тело функции содержит собственно программу на языке
MatLab. Кроме этого, в теле функции могут быть строки комментариев и пустые строки.
Пример 1
М-функция вычисления среднего значения вектора.
function y = average(x)
|заголовок
|функции
%AVERAGE – Среднее значение элементов вектора |1строка
|коммен|тария
%AVERAGE (Х), где Х – вектор. Вычисляет среднее |
%значение элементов вектора.
|коммен%Если входной аргумент не является вектором
| тарий
%генерируется ошибка
|
[m, n] = size(x);
|
if(~((m= =1)(n= =1)) (m= = 1)&(n= =1))
|
error ('Входной массив должен быть вектором')
|тело
|функции
end
|
S = 0
|
% начальное значение суммы элементов вектора
|
L = 0
|
% начальное значение числа элементов вектора
|
for i = x
|
S = S+i; % вычисление суммы элементов вектора |
L = L+1; % вычисление длины вектора
|
end
|
y = S/L; % вычисление выходного
|
% параметра функции
|
94
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6.4. Выполнение М-функций
Пояснение
[m, n] = size(x) – библиотечная функция вычисляет число
строк и столбцов матрицы.
Еrror ('Входной массив должен быть вектором') – библиотечная функция просто выводит строку 'Входной массив должен быть
вектором' и прерывает работу программы.
Надо отметить, что существуют библиотечные функции и для
вычисления суммы элементов вектора y = sum(x), и для вычисления длины вектора у = length(x). Все эти функции входят в состав
библиотек общего доступа MatLab и приведены в третьем томе
данного учебника. Библиотеки общего доступа MatLab необходимо один раз внимательно просмотреть, чтобы иметь представление обо всех функциях, входящих в эти библиотеки. Эти библиотеки нужны всем программистам, работающим в пакете MatLab,
независимо от области знаний, в которых они работают.
Работу данной программы разберите самостоятельно.
Пример 2
Вычисление факториала числа n
function f = fact(n)
|заголовок
% FACT – вычисление факториала
|первая
|строка
|коммен
|тария
% fact(n) возвращает n! числа n
| коммен
|тарий
P = 1 % начальное значение произведения
|
for i = 1:n
|
P = P*i; % вычисление произведения
|тело
|функции
end
|
f = P;
% выходной параметр функции |
Работу данной программы разберите самостоятельно.
2.6.4. Выполнение М-функций
М-функцию можно вызвать из командного окна системы
MatLab или из других М-файлов. При этом необходимо указать
95
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6. М-файлы
входные аргументы в круглых скобках, а выходные – в квадратных скобках.
Пример 1
Напишем очень простую функцию с несколькими входными
и выходными параметрами.
function [x, y, z] = myf(a, b, c)
x = a+b+c;
y = a-b-c;
z = a*b/c;
Данная М-функция, которой мы присвоили имя myf, имеет
три входных параметра (а, b, c) и три выходных параметра [x, y,
z]. Наберем эту программу-функцию в редакторе программ Editor.
Затем сохраним ее в файле с тем же именем, т.е., myf.
Замечание
Можно М-файлу присвоить другое имя, отличное от имени
М-функции, но тогда при вызове данной функции, например,
из командного окна, надо будет набирать не имя М-функции,
а имя М-файла, что вводит большую путаницу в использование
этой функции. Поэтому функцию лучше всего сохранять в файле
с тем же именем, как и имя самой функции.
Запустим данную функцию в работу из командного окна различными способами.
Способ 1 (без выходных параметров)
Входные аргументы при вызове функции всегда надо
задавать.
>> myf(2, 3, 4)
%нажать клавишу Enter
ans = 9
В результате внутренней переменной MatLab ans присвоено
значение первого выходного параметра х.
Способ 2 (с одним выходным параметром)
В случае одного выходного параметра его можно, как заключать в квадратные скобки так и не заключать.
>>g = myf(2, 3, 4)
%нажать клавишу Enter
g=9
В результате переменной g присвоено значение первого выходного параметра х.
Способ 3 (с двумя выходными параметрами)
>>[g, h] = myf(2, 3, 4)
%нажать клавишу Enter
96
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6.5. Поиск М-функций
g=9
h = -5
В результате переменной g присвоено значение первого выходного параметра х, а переменной h присвоено значение второго выходного параметра у.
Способ 4 (с тремя выходными параметрами)
>> [g, h, k] = myf(2, 3, 4)
%нажать клавишу Enter
g=9
h = -5
k = 1.5000
В результате переменной g присвоено значение первого выходного параметра х, переменной h присвоено значение второго выходного параметра у, а переменной k – значение третьего выходного параметра z.
2.6.5. Поиск М-функций
Когда мы набираем имя функции в командном окне и нажимаем клавишу Enter или М-функция запускается из другой
М-функции, то система MatLab начинает поиск данной функции
по всем каталогам MatLab.
В данном параграфе рассмотрим последовательность, в которой система MatLab производит поиск нужной функции.
Когда появляется новое имя, система MatLab делает проверку
в следующей последовательности.
3. Не является ли новое имя переменной.
4. Не является ли оно именем подфункции (см. ниже).
5. Не является ли оно именем функции из текущего каталога или
из его частного каталога private (см. ниже).
6. Не является ли оно именем функции в путях доступа системы
MatLab (File\Set Path…) (рис. 1.11).
7. В последнем случае система использует тот М-файл, который
она встретит первым в путях доступа (рис. 1.11). Таким образом, расположение каталогов в путях доступа MatLab имеет
значение, как для скорости поиска нужной функции, так и для
поиска нужной функции. В частности, текущий каталог и каталоги функций, с которыми приходится постоянно работать,
лучше расположить первыми в путях доступа (рис. 1.11).
97
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6. М-файлы
В случае дублирования имен функций система использует
первое имя в соответствии с вышеприведенной 4-уровневой иерархией. MatLab допускает переопределение функций в соответствии
с правилами объектно-ориентированного программирования
(см. ниже).
2.6.6. Подфункции
Начиная с версии MatLab 5.0, в М-файлы стало возможным
помешать несколько функций. Причем первая функция – это
основная функция, вызываемая по имени М-файла. Другие функции внутри файла – это подфункции, которые являются видимыми только, для основной функции и других подфункций этого же
файла. То есть подфункции могут вызываться только из основной
функции и других подфункций этого же файла.
Подфункции могут вызываться в любом порядке, в то время
как основная функция выполняется первой.
Пример
Первой в М-файле пишется основная функция
function [avg, pd] = nwt(u)
% NWT находит среднее и произведение для элементов вектора u
n = length(u);
% вычисление длины вектора u
(библиотечная функция)
avg =mean(u, n); % вызов подфункции вычисления
среднего
pd = prd(u);
% вызов подфункции вычисления
произведения
% первая подфункция вычисляет среднее для элементов
вектора
function m = mean(v, n)
% MEAN – вычисляет среднее
S=0;
for i = v
S = S+i;
end
m = S/n;
98
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.6.7. Частные каталоги
% вторая подфункция вычисляет произведение элементов
вектора
function m = prd(v)
% PRD – вычисляет произведение
P = 0;
for i = v
P = P*i;
end
m = P;
Замечание 1
Основная функция и каждая подфункция создают свою рабочую область для размещения своих переменных.
Замечание 2
Команда help<имя функции> выводит комментарии только
основной функции.
Замечание 3
Так как MatLab при поиске нужной М-функции, прежде всего,
проверяет, не является ли она подфункцией, то имена подфункций
могут совпадать с именами любых других функций.
2.6.7. Частные каталоги
Частные каталоги впервые были введены в версии MatLab
5.0.
Частный каталог представляет собой подкаталог с именем
private расположенный в каком-либо каталоге, содержащем
М-файлы, который в этом случае называется родительским.
М-файлы частного каталога доступны только М-файлам родительского каталога.
Поскольку файлы частного каталога невидимы вне родительского каталога, они могут иметь имена, совпадающие с именами
файлов других каталогов системы MatLab.
Это удобно в тех случаях, когда пользователь создает свою
собственную версию некоторой библиотечной функции и помещает ее в свой частный каталог. Так как из частного каталога функции вызываются первыми, то пользователь будет использовать
свою функцию, не уничтожая библиотечную функции с тем же
именем.
99
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.7. Переменные MatLab
2.6.8. Работа с М-функциями
Отметим ряд положений, которые необходимо знать при работе с М-функциями. При первом изучении языка программирования MatLab данный параграф можно пропустить.
1. При вызове М-функции система MatLab транслирует ее
в псевдокоды и загружает в память. То есть MatLab выполняет М-функцию целиком, а не отдельными операторами, как
М-сценарий.
2. Создание Р-кода
Можно М-функцию перевести в псевдокоды (откомпилировать)
и сохранять ее в таком виде, т.е. в виде Р-функции (так как
MatLab присваивает новому файлу расширение .р). Для этого
достаточно выполнить команду pcode average, при этом текстовая М-функция average.m будет переведена в Р-функцию,
содержащую псевдокоды (с именем average.p)
Однако это практически не ускоряет работу М-функции, поэтому компилировать М-функцию имеет смысл только в двух
случаях:
a) когда желательно скрыть текст М-функции;
b) когда выполняется много графических М-файлов, тогда
компилирование дает ускорение в работе.
3. Передача аргументов в М-функцию
С точки зрения программиста, система MatLab передает аргументы М-функцию по значению. На самом деле по значению передаются лишь те аргументы, которые изменяются при работе этой
функции. Если функция не изменяет значения аргумента, а только использует его для вычислений, то аргумент передается ссылкой, что позволяет оптимизировать использование памяти.
2.7. Переменные MatLab
В языке программирования MatLab различают четыре вида
переменных:
1. локальные переменные,
2. глобальные переменные,
3. сохраняемые переменные,
4. специальные переменные.
100
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.7.1. Локальные переменные
2.7.1. Локальные переменные
Локальные переменные это переменные, которые мы вводим
внутри какой-либо функции или в командном окне. Для локальных переменных в языке программирования MatLab, как и для
функций (в отличии, например, от языков программирования
С++, Рascal) не требуется предварительного объявления, они сразу
вводятся там, где они нужны.
Пример
function n = asdf(a,b)
Х = 4+a;
% введена локальная переменная Х
Y = 5*b;
% введена локальная переменная Y
C = X+Y; % введена локальная переменная C
n=C
Отметим ряд положений, которые необходимо знать при работе с локальными переменными.
1. Имена локальных переменных пишутся по общим правилам
написания идентификаторов.
2. Если переменная введена в какой-либо М-функции, то она
может быть использована (говорят, видна) только этой М-функции
(поэтому она и локальная). Она хранится в рабочей области этой
функции.
3. Если переменная введена в командном окне, то она видна только в командном окне и хранится в основной рабочей
области.
2.7.2. Глобальные переменные
Глобальная переменная – это переменная, которую можно использовать в нескольких М-функциях одновременно.
Отметим ряд положений, которые необходимо знать при работе с глобальными переменными.
1. Одну переменную можно объявить глобальной в нескольких
М-функциях, сценариях или командном окне. В этом случае
все М-функции будут пользоваться одной копией этой переменной. Присвоение значения этой переменой возможно в любой функции, где эта переменная объявлена глобальной при
101
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.7. Переменные MatLab
этом во всех других М-функциях (где определенна глобальная
переменная) значение ее изменится.
2. Хранятся глобальные переменные в специальной рабочей области, предназначенной для глобальных переменных.
3. Чтобы использовать глобальную переменную в какомлибо М-файле (сценарии, командном окне), ее необходимо
объявить.
Пример
global ALPHA BETA
Здесь объявлены две глобальные переменные ALPHA и BETA.
4. Если глобальная переменная в момент объявления не существует, то ей присваивается значение пустого массива.
5. Обычно для имен глобальных переменных используются
длинные содержательные названия и заглавные буквы, но это
не обязательно.
6. Ошибка при объявлении глобальной переменой возникает,
если уже существует переменная с таким же именем в какойлибо М-функции, где видна глобальная переменная.
Пример
Существуют две библиотечные функции MatLab tic, toc с помощью которых можно определить время выполнения любой
программы-функции MatLab.
Пусть мы имеем программу суммирования чисел от единицы до n,
function S = ssm(n)
S1 = 0;
for i = 1:n
S1 = S1+i;
end
S = S1.
Найдем время, которое необходимо компьютеру для нахождения суммы чисел от единицы до 1000000. Для этого составим
М-сценарий с использованием библиотечных функций tic, toc.
tic
% фиксация начала отсчета времени
S=ssm(1000000); % запуск функции суммирования чисел
L=toc
% фиксация конца отсчета времени
Сохраним данный М-сценарий в файле с именем myss, а затем
запустим его из командного окна.
102
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.7.3. Сохраняемые переменные
>> myss
L = 0.0106
Таким образом, время выполнения данной программыфункции 0.0106 секунд.
Данные функции можно написать самостоятельно, используя
глобальную переменную. Реализация функций tic через глобальную переменную будет (назовем нашу функцию tic1, чтобы не путать с аналогичной библиотечной функцией).
function tic1
global TTT
TTT = clock;
Реализация функций toc через глобальную переменную будет
(назовем нашу функцию toc1, чтобы не путать с аналогичной библиотечной функцией).
function t=toc1
global TTT
t=etime(clock, TTT);
end
Используем теперь в М-сценарии выше, для определения времени выполнения программы суммирования с помощью наших
функций tic1 и toc1 и получим примерно тот же результат.
Пояснение
При создании наших функций tic1 и toc1 были использованы
библиотечные функции clock и etime. Функция clock считывает
с внутренних часов компьютера текущее время и присваивает его
глобальной переменной ТТТ. Функция etime(t2,t1) находит разность между двумя значениями времени в секундах, то есть T = t2t1 и возвращает это значение в привычном для нас виде.
2.7.3. Сохраняемые переменные
Сохраняемые переменные являются чем-то средним между локальными и глобальными переменными. Значения у сохраняемых
переменных сохраняются между повторными вызовами одной
и той же М-функции.
В любом М-файле можно объявить сохраняемые переменные
командой
persistent VAR1 VAR2
103
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.7. Переменные MatLab
Здесь объявлены две сохраняемые переменные VAR1 и VAR2.
Отметим ряд положений, которые необходимо знать при работе с сохраняемыми переменными.
1. Если сохраняемая переменная в момент объявления не существует, то ей присваивается значение пустого массива.
2. Обычно в именах сохраняемых переменных используются заглавные буквы и длинные содержательные названия, но это
необязательно.
3. Если уже существует локальная переменная с таким же именем, то возникает ошибка.
Пример
function ggg(c)
persistent VA
VA = [VA c]
Если вызвать данную функцию из командного окна три раза
со следующими значениями входного параметра 3, 5, 7, то сохраняемая переменная VA станет равной вектору VA=[3 5 7].
2.7.4. Специальные переменные
В среде MatLab определены следующие специальные
переменные.
1. ans – если выходная переменная в выражении отсутствует, то
результат присваивается переменой ans.
Пример
X = 1;
2*X+1
В командном окне появится
ans = 3
2. i, j – переменные для обозначения мнимой единицы.
Пример
A = 2+3i, B = 2+3j, C = 2+3*i, D = 2+3*j
Все это эквивалентные записи одного и того же комплексного
числа.
3. eps – точность вычисления с плавающей точкой (определяется
длиной мантиссы и для PC eps=2.22E-016 (мантисса – область
памяти, где хранится дробная часть числа, 52 бита)).
104
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.7.4. Специальные переменные
4.
inf – символ бесконечности или точнее – символ переполнения
разрядной сетки (область памяти, где хранится показатель
степени числа).
1.0/0.0 – машина выдаст
Предупреждение: деление на нуль и ответ
ans = inf
аналогично
exp(1000)
ans = inf
5. NaN – результат, не представимый в виде числа, типа: 0/0,
inf/inf, 0*inf и т. д. (подробнее см. в справочнике).
6. pi – число π = 3.14…
7. realmax – максимальное число с плавающей точкой, представимое на компьютере (оно, прежде всего, определяется
числом бит отведенных под степень числа) для PC realmax =
1.79Е+308, любое число больше соответствует inf.
8. realmin – минимальное число с плавающей точкой, представимое на компьютере (оно, прежде всего, определяется числом
бит отведенных под степень числа) для PC realmin = 2.22Е308, любое число меньше соответствует 0.
9. computer – переменная для обозначения типа используемого
компьютера, для PC – PCWIN
10. version – переменная для хранения версии используемого пакета MatLab и т. д.
2.8. М-функция с произвольным числом входных и выходных
аргументов
Язык программирования MatLab (как и язык С++) позволяет
создавать функции с произвольным числом входных и выходных
аргументов. То есть для данных функций во время их написания
неизвестно, сколько же реально входных и выходных аргументов
у них будет на момент их вызова. Следовательно, должны быть библиотечные функции, которые бы вычисляли число входных и выходных аргументов у функции уже после ее запуска в работу. Такими библиотечными функциями в пакете MatLab являют функции:
nargin – позволяет определить количество входных аргументов в М-функции,
105
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.8. М-функция с произвольным числом входных и выходных аргументов
nargout – позволяет определить количество выходных аргументов в М-функции.
Это информация в дальнейшем может быть использована в операторах условия для изменения хода вычисления
в М-функциях.
Пример 1
function C = test1(a, b)
if (nargin= =1)
C =a.^2;
elseif (nargin= =2)
C=a+b
end
Данная функция не является функцией с произвольным числом входных и выходных аргументов. Тем не менее, в ней может
быть использована библиотечная функция nargin.
Если вызвать данную функцию с одним аргументом, например y = test1(5), то получим y = 25. Если вызвать данную функцию
с двумя аргументами, например, y = test1(5, 6), то получим y = 11.
Если вызывать ее с каким-либо другим числом аргументов, то получим сообщение об ошибке.
Пример 2
function [t, z] = test2(a, b)
if (nargout = = 1)
t = a+b;
elseif(nargout = = 2)
t = a;
z = a-b;
end
Замечание
Порядок следования аргументов в выходном списке имеет
большое значение. Если при обращении к М-функции выходной
аргумент не указан (или указан только один аргумент), то по умолчанию выводится первый аргумент (см пример выше). Для вывода
остальных аргументов надо организовать список этих аргументов
в квадратных скобках.
106
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.8.1. Список аргументов
2.8.1. Список аргументов
Для создания функций с произвольным числом входных и выходных аргументов в языке программирования MatLab существуют следующие переменные:
varargin – позволяет передать произвольное количество входных аргументов,
varargout– позволяет передать произвольное количество выходных аргументов.
Система MatLab упаковывает входные и выходные аргументы
в массивы ячеек varargin и varargout (подробно о массивах ячеек смотрите ниже). Каждый массив ячеек может содержать любое количество данных. Таким образом, с переменными varargin
и varargout надо работать как с массивами ячеек.
Краткие сведения о массивах ячеек
Массивы ячеек подобны обычным массивам чисел, но они могут объединять различные типы данных: числа, строки, обычные
массивы и т. д. Например, A = {2 'abc'; 5.6 [8 6]}. Если набрать
данное выражение в командном окне и нажать Enter, то на экране
появится массив ячеек вида.
A=
[ 2]
'abc'
[5.6000]
[1x2 double]
Таким образом, с помощью фигурных скобок создан массив
ячеек 2×2, содержащий два числа, строку и обычный числовой
массив из двух чисел.
Как известно, обычный массив чисел создается с помощью
квадратных скобок. Ниже показан пример создания обычного массива чисел в командном окне
>> B = [2 3; 5 8]
B=
2
3
5
8
Чтобы взять любой элемент из массива чисел используются
круглые скобки. Например
>> y = B(2,2)
y=8
107
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.8. М-функция с произвольным числом входных и выходных аргументов
То есть переменной y присвоен элемент из массива чисел B,
стоящий во второй строке и втором столбце.
Если надо взять полностью строку или столбец, то используется знак двоеточие
>> y = B(1,:)
y=
2
3
Взяты элементы первой строки и всех столбцов.
>> x = B(:,2)
x=
3
8
Взяты все строки второго столбца.
Для взятия элементов из массива ячеек используются фигурные скобки. Например:
>> x = A{2,1}
x = 5.6000
Чтобы взять элемент из матрицы, которая находиться в массиве ячеек A, надо использовать и фигурные и квадратные скобки.
Например:
>> z = A{2,2}(2)
z= 6
Таким образом, из матрицы, которая находится во второй
строке и втором столбце массива ячеек A, взят второй элемент.
Пример 1
Запишем функцию, которая бы суммировала все входные аргументы, причем число входных аргументов заранее не известно.
function S = ssm(varargin)
S1 = 0;
% начальное значение суммы
for i = 1: nargin
S1 = S1+ varargin{i}; %входные аргументы извлекаются
и суммируются
end
S = S1;
Проверьте данную функцию, запустив ее с двумя, тремя и т. д.
входными аргументами.
108
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.8.1. Список аргументов
Пример 2
В экспериментах часто приходится снимать различные зависимости по точкам. Например, изменение тока во времени. Следовательно, каждая экспериментальная точка будет содержать два
значения (время, ток). Эти два значения удобно записать в виде
матрицы с двумя элементами. Допустим, что по экспериментальным точкам нужно построить график данной экспериментальной
зависимости. Таким образом, надо создать М-функцию для построения графика экспериментальной зависимости, которая бы имела произвольное число входных аргументов (так как нам заранее
не неизвестно число экспериментальных точек), причем входные
аргументы должны быть виде матриц с двумя элементами. Данная
функция приведена ниже.
function tvar(varargin)
for i = 1: nargin
x(i) = varargin {i}(1); % извлечение первого элемента
из каждой матрицы
y(i) = varargin {i}(2); % извлечение второго элемента
из каждой матрицы
end
plot(x, y)
В М-функции выше извлекаемые из входных матриц элементы записываются в векторы x, y. Затем с помощью библиотечной
функции plot(x, y) строится декартов график по экспериментальным точкам.
Данную функцию можно воззвать с входным списком аргументов произвольной длины. Например:
tvar([1 3], [2 5], [4 8], [6 5], [7 2], [8 3])
В результате получим график экспериментальных точек
(рис. 2.4).
Пример 3
Данная функция на вход получает массив из двух столбцов,
где первый столбец – множество координат точек xi, а второй столбец – множество координат точек уi. Функция разбивает массив
на отдельные вектора по два элемента [xi, уi] и отдает их на выход.
Данная задача обратная задаче из примера 2.
function [varargout] = tvar2(array)
for i =1: nargout
109
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.8. М-функция с произвольным числом входных и выходных аргументов
Рис. 2.4. График экспериментальных точек
varargout{i}(1) = array(i, 1); % извлечение из каждой строки
первого элемента
varargout{i}(2) = array(i, 2); % извлечение из каждой строки
второго элемента
end
Работу функции разобрать самостоятельно.
Замечание
Если М-функция имеет и другие фиксированные аргументы,
кроме varargout и varargin, то аргументы varargout и varargin обязательно должны быть последними.
Пример
function [out1, out2] = example(a, b, varargin)
function [i, j , varargout] = exam (x1, x2, x3, y)
110
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.9.1. Функция eval ('try', 'catch')
2.9. Обработка ошибок и предупреждений в М-функциях
Средства обработки ошибок в системе MatLab позволяют прикладной программе проверять условия возникновения ошибки и в зависимости от ситуации или выдавать код ошибки или исправлять ее.
Основные средства обработки ошибок в системе MatLab.
1. Блок try…catch…end.
2. Функция eval('try', 'catch').
3. Переменная lasterr – возвращает строку, содержащую название последней ошибки.
2.9.1. Функция eval ('try', 'catch')
Здесь 'try' – стока, содержащая исполняемое выражение,
а 'catch' – строка, содержащая имя функции, которая будет вызвана для обработки ошибки, если она будет в выражении 'try'.
Если операция, определенная в строке 'try', выполняется
правильно, то функция eval просто возвращает результат. Если
генерируется ошибка, то вызывается функция 'catch', которая
определяет ошибку, по возможности ее устраняет и уже результат
возвращает.
2.9.2. Блок try…catch…end
Данный блок работает аналогично предыдущей функции.
В нормальном режиме выполняются только команды программы
между операторами try…catch, в случае же возникновения ошибки выполняются команды программы между операторами catch…
end.
Данные команды обычно работают в связке с функцией
lasterr.
Пример 1
Пусть вычисляется произведение матриц А*В. Возможная
ошибка может возникнуть из-за несогласованности размеров матриц А и В. Ниже функция catch (А, В) обрабатывает эту ситуацию. Обработка заключается в удалении лишних строк или столбцов у матриц. Например если у матрицы А больше столбцов, чем
нужно для того, чтобы было возможным перемножить матрицы
111
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.9. Обработка ошибок и предупреждений в М-функциях
А и B, то последние лишние столбцы удаляются. Аналогично, если
у матрицы B больше строк, чем нужно для перемножения, то последние лишние строки удаляются.
Прежде чем написать функцию обработки данной ошибки,
посмотрим, какое сообщение в случае ее возникновения выдает
MatLab. С этой целью в командном окне попробуем перемножить
следующие матрицы.
A = [1 4 5; 3 6 8]
B = [2 3; 4 7]
Данные матрицы перемножить нельзя. У матрицы A больше
столбцов, чем нужно для перемножения этих матриц. Тем не менее, выполним перемножение в командном окне. Затем посмотрим, какое сообщение содержит в себе переменная lasterr. Для
этого в командном окне наберем команду
>> c = lasterr
c=
Error using = => mtimes
Inner matrix dimensions must agree. Inner matrix dimensions
must agree.
Теперь мы знаем, какое сообщение надо анализировать в функции обработки catch (А, В). Напишем данную функцию.
function C = catch (A, B)
I = lasterr; % извлекает сообщение о последней ошибки
j = findstr(I, 'Inner matrix dimensions'); % сравнение фраз
if(~isempty(j))
[m, n] = size(A);
% определение размера матрицы A
[p, q] = size(B);
% определение размера матрицы B
if(n>p)
A(:,p+1:n) = [ ];
% удаление лишних столбцов матрицы A
elseif(n<p)
B(n+1:p,:) = [ ]; % удаление лишних строк матрицы B
end
C = A*B;
% перемножение исправленных матриц
else
C = 0;
% ответ если возникла другая ошибка
при перемножении
end
Сохраним данную программу в виде М-файла.
112
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.9.2. Блок try…catch…end
Пояснение
В программе использованы следующие библиотечные
функции.
j = findstr (I, 'Inner matrix dimensions') – данная функция
ищет в тексте I фразу 'Inner matrix dimensions', в случае, если она
найдет эту фразу, то выдает число символов в данной фразе, в противном случае выдает пустой массив [].
isempty(j) – данная функция проверяет, является ли массив j
пустым или нет. Если массив пустой, то функция выдает единицу
в противном случае ноль.
[m, n] = size(A) – данная функция находит размерность матрицы A, то есть число строк и столбцов.
Для удаления строк и столбцов в матрице в языке программирования MatLab используется присвоение пустого массива []. Например, если в двухмерной матрице A надо удалить второй столбец,
то пишут A(:,2) = [], что означает – любой элемент (знак двоеточие)
во втором столбце заменить на пустой массив, т.е. удалить. Если
же надо удалить строку то пишут A(3,:)=[], в результате удаляется
третья строка матрицы A.
A(:,p+1:n) = [ ] – данная команд означает, что в матрице A удаляются все столбцы в диапазоне p+1:n.
B(n+1:p,:) = [ ] – данная команд означает, что в матриц. В удаляются все строки в диапазоне n+1:p.
В остальном работу данной программы надо изучать
самостоятельно.
Пример 2
Сохраним данную M-функцию в файле catch. После этого в командном окне можно набрать код
A = [1 2 3; 6 7 2; 0 1 5];
B = [9 5 6; 0 4 9].
Для обработки ошибок можно использовать как функцию eval,
так и блок try…catch…end. Воспользуемся сначала функцией eval.
Наберем в командном окне команду
>>eval('A*B', 'catch(A,B)')
На экране получим
ans = 9
13 24
54 58 99
0
4
9
113
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.10. Вывод на экран ошибок и предупреждений
Пример 3
Воспользуемся теперь блоком try…catch…end. Для этого составим программу, которая бы вычисляла произведение матриц.
function C = ppr(A,B)
try
C = A*B;
catch
C = catch(A,B)
end
Если запустить данную программу с матрицами A, B выше, то
получим тот же результат как при использовании функции eval.
Пояснение
В данной программе сначала происходит перемножение
C = A*B в блоке try…catch, если ошибка не возникает, то результат
перемножения возвращается, как выходной параметр С. Если при
этом возникает ошибка, то выполняются команды в блоке catch…
end, то есть вызывается функция C = catch(A,B), и результат выполнения этой функции возвращается как выходной параметр С.
2.10. Вывод на экран ошибок и предупреждений
Функция вывода сообщений об ошибке имеет следующий
синтаксис:
еrror ('<Сообщение об ошибке>').
Если эта функция вызывается внутри М-файла, то ошибка отображается в командном окне, а выполнение М-файла
прекращается.
Пример
Допустим, в М-файл myf.m включен блок
if n<1
error ('n должно быть больше 1')
end
Тогда для n = 0 выполнение данного М-файла прекращается,
а на экране появится следующий текст:
myf
???Error using
n должно быть больше 1.
Функция вывода предупреждения имеет вид:
114
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.11.1. Вычисление строк
warning('<строка предупреждения>').
Она работает подобно предыдущей функции, за исключением того, что выполнение программы в случае предупреждения
не прекращается.
Пример
Допустим, в М-файл myf2.m включен блок
if n<1
warning ('n должно быть больше 1')
end
Тогда для n = 0 выполнение данного М-файла не прекращается, а на экране появится следующий текст:
Warning: n должно быть больше 1.
2.11. Функции вычисления строковых выражений
Возможность вычисления математических выражений, записанных в виде строк, придает языку MatLab дополнительную гибкость. Это позволяет конструировать математические выражения
в процессе решения самой задачи в зависимости от хода решения.
Кроме того, сами М-функции можно будет вызывать в зависимости
от ситуации. То есть в программировании появляются элементы
искусственного интеллекта (такими возможностями не обладают
наиболее распространенные универсальные языки программирования Basic, C++, Pascal). Напомним, что любая последовательность символов, заключенных в одинарные кавычки воспринимается MatLab как строка.
2.11.1. Вычисление строк
Для вычисления строк в MatLab используется библиотечная
функция eval в виде
eval('Выражение').
Строка 'Выражение' в функции eval может содержать любые
арифметические выражения, либо инструкции (операторы), либо
обращение к функции.
Пример 1
Напишем М-сценарий и сохраним его в М-файле vit.
115
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.11. Функции вычисления строковых выражений
for i=1:3
stt = input ('Введите арифметическое выражение \n', 'S');
y= eval(stt)
end
После запуска сценария в командном окне будем набирать любые арифметические выражения, например: 4 + 5, sin(3) + cos(4),
sin(1/3)+6^4. Тогда в командном окне получим
>> vit
Введите арифметическое выражение
4+5
y=9
Введите арифметическое выражение
sin(3)+cos(4)
y = -0.5125
Введите арифметическое выражение
sin(1/3)+6^4
y = 1.2963e+003
Пояснение
Библиотечная функция input служит для ввода с клавиатуры
различной информации. В случае, если функция содержит ключ
'S', то вводимая информация воспринимается как строка и присваивается переменной stt. Если функция не содержит этого ключа, то вводимая информация воспринимается как число (см. подробно библиотеки том 3 или help).
Команда \n в строке 'Введите арифметическое выражение \n'
означает переход на новую строку в командном окне (см. подробно:
библиотеки том 3 или help).
Пример 2
for i = 1:3
eval(['P' int2str(i),'=i.^2'])
end
на экране
p1 = 1
p2 = 4
p3 = 9
Пояснение
Библиотечная функция int2str(i) преобразует число i в строку.
В примере выше в данную функцию будут подставляться числа 1, 2,
116
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.11.2. Дуальность команд MatLab
3. Функция int2str(i) будет преобразовывать данные числа в строки '1', '2', '3'. С числами можно производить арифметические вычисления, со строками – нельзя. Однако строки можно объединять
с помощью квадратных скобок в более длинные строки, что и было
сделано внутри функции eval, а затем функция вычислила получившуюся строку (более подробно о работе со строками ниже).
2.11.2. Дуальность команд MatLab
Любая команда MatLab может быть записана также и как
функция. Однако только в том случае, если имена файлов в команде и переменных представляют собой строковые выражения.
Пример 1
Команда загрузки файла
load myfile
может быть также записана в виде вызова функции
load ('myfile')
Команда сохранения в файле myfile переменных VAR1 VAR2
save myfile VAR1 VAR2
может быть также записана в виде вызова функции.
save ('myfile', 'VAR1', 'VAR2')
Пример 2
Это позволяет, например единым циклом сохранять различные числа в различных файлах
file = 'data';
for i=1:3
j=i.^2;
save([file int2str(i)],'j')
end
В результате в файлах с именами data1, data2, data3 сохранены числа в виде строк '1', '4', '9'.
2.11.3. Вычисление функций по заданному имени
С помощью библиотечной функции feval можно вычислять
различные функции MatLab, используя их имена в виде строк.
Данная функция имеет вид:
117
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.11. Функции вычисления строковых выражений
feval('<имя функции>',x1,…xn)
где x1, …, xn – аргументы вычисляемой функции.
В отличие от функции eval, данная функция позволяет передать аргументы вызываемой функции. Функция feval более быстрая, чем eval, поэтому ее использование предпочтительнее.
Даная функция вместе с функцией input позволяет организовать сложные диалоги.
Пример
В данном примере есть возможность вводить с клавиатуры любую функцию и вычислить ее значение в любой точке x. Напишем
M-сценарий
for i = 1:3
k = input('Укажите имя функции \n', 'S');
x = input('Введите значение х \n');
feval(k, x)
end
Запустим сценарий и введем ряд функций и аргументов, получим на экране в командном окне.
Укажите имя функции
sin
Введите значение х
5
ans =
-0.9589
и т. д.
2.11.4. Ввод информации с клавиатуры
В MatLab для ввода информации с клавиатуры используется
функция input. Данная функция имеет вид:
n = input('сообщение')
Функция выводит на экран 'сообщение' и ждет ввода с клавиатуры числа или выражения. При вводе выражения функция вычисляет его и присваивает результат переменой n.
Функция может также возвращать не числовое, а строковое
выражение. Для ввода символьного выражения необходимо добавить строку 'S' к списку параметров функции.
118
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12.1. Обзор методов программирования
Пример
name = input('Введите адрес', 'S')
В результате переменной name будет присвоена введенная
строка.
Для создание паузы в MatLab используется функция рause.
Она применяется в двух видах:
рause(n) – данная функция задерживает выполнение алгоритма программы на n-секунд,
pause – останавливает выполнение алгоритма до тех пор, пока
не будет нажата какая-либо клавиша.
2.12. Структурное программирование
2.12.1. Обзор методов программирования
В настоящее время используются три метода программирования.
1. Структурное программирование.
2. Объектно-ориентированное программирование.
3. Визуальное программирование.
Структурное программирование возникло первым, когда возникли первые высокоуровневые языки программирования Basic,
Cu, Pascal и т. д. Однако данное программирование в той или иной
мере используется и сейчас. Во-первых, со структурного программирования, как наиболее простого, удобно начинать изучение
программирования вообще. Во-вторых, элементы структурного
программирования используются и в объектно-ориентированном
программировании, и в визуальном программировании.
Необходимость в структуризации программ возникла в связи
с увеличением их размеров. Если программа очень большая (на тысячи строк), то очень трудно проследить алгоритм этой программы,
а тем более найти ошибки и отладить программу. Поэтому возникла идея разбивать программу на более или менее независимые части, а затем писать и отлаживать каждую часть отдельно. Данные
части оформляются в виде независимых программ или функций
и называются подпрограммами. Написать и отладить подпрограмму значительно более простое дело, чем всю программы сразу, так
как подпрограммы всегда значительно меньше по объему.
119
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12. Структурное программирование
Расчленение всей большой программы на небольшие подпрограммы и является сутью структурного программирования.
Объектно-ориентированное программирование
Когда размеры программ превысили сотни тысяч строк, методы структурного программирования также оказались не эффективными. Так как, если даже разбить всю программу на подпрограммы, их будет так много, что трудно будет проследить за их
взаимодействием и найти ошибки. Поэтому потребовалось создание более крупных структурных объединений, с которыми было
бы легче работать. Таким крупным структурным программным
объединением стал программный объект.
Программный объект представляет собой объединение переменных и функций, но не произвольных переменных и функций,
а объединение по признаку принадлежности к определенному физическому объекту.
Например, необходимо написать интерфейс какой-либо программы. Интерфейс состоит из следующих физических объектов:
кнопки, меню, окна, панели и т. д. К каждому физическому объекту, например, к кнопке, пишется программный объект. Программный объект «кнопка» состоит из переменных, характеризующих
кнопку: длина кнопки, ширина, положение на экране, цвет и т. д.,
и функций, описывающих возможности кнопки. Каждая из этих
функций запускается в работу при наступлении определенных событий с кнопкой, например: нажатие мышкой на кнопку, изменение размеров, создание кнопки, уничтожение кнопки и т. д.
Структурно объект оформляется как замкнутая единица,
то есть к переменным объекта имеют доступ только функции объекта. Говорят, что объект обладает свойством инкапсуляции. Это
свойство дает ряд преимуществ. Во-первых, оно позволяет из сложной программы вынимать любой объект и заменять его на другой,
более совершенный, и при этом будет полная гарантия, что программа в целом будет работать правильно. В структурном программировании замена подфункции на другую, более совершенную
подфункцию не дает гарантии в правильности работы программы
в целом. Данное свойство позволяет постепенно совершенствовать
сложную программу, а не писать ее каждый раз с нуля. Во-вторых,
благодаря свойству инкапсуляции, программы можно писать промышленным, конвейерным способом, то есть отдельные группы
120
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12.1. Обзор методов программирования
могут писать свой объект, совершенно не зная его назначение в общей программе.
Собирать даже очень большую программу из объектов значительно проще, так как каждый программный объект соответствует
физическому объекту, а программа в целом передает физическую
структуру и принцип работы реальной физической программируемой системы.
Еще одним важным свойством объектов является наследование, то есть каждый новый, более совершенный объект, как правило, пишется не с нуля, а наследуется старый объект, к нему
только добавляются новые свойства и функции, что расширяет его
возможности. Это свойство облегчает создание новых, более совершенных объектов и, как предыдущее свойство, позволяет непрерывно совершенствовать программу в целом.
Визуальное программирование является развитием объектноориентированного программирования в сторону облегчения самого процесса программирования. Так как каждому программному объекту соответствует физический объект, то, следовательно,
программному объекту можно сопоставить картинку физического
объекта (пиктограмму). Таким образом, можно создавать не просто библиотеки объектов, а библиотеки объектов с пиктограммами. В этом случае написание программы будет сводиться к перетаскиванию мышкой нужных пиктограмм (вместе с объектом)
из библиотеки в редактор программ, при этом объект будет встраиваться внутрь общей программы. Конечно, написание программ
и в этом случае полностью не сводится только к перетаскиванию
нужных объектов (пиктограмм). Так как даже одинаковые объекты (например, кнопки) в разных программах выполняют разные действия. Поэтому после перетаскивания нужного объекта
из библиотеки необходимо вручную написать функции этого объекта, ответственные за определенные действия объекта. Однако
в целом визуальное программирование сильно облегчает написание программ, особенно типичных частей, таких как: интерфейс
программы и т. д.
121
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12. Структурное программирование
2.12.2. Метод структурного программирования
Теперь более подробно рассмотрим метод структурного
программирования.
Допустим, надо написать программу, на вход которой подаются векторы v1 и v2, а внутри программы вычисляются сумма средних значений этих векторов u1 и сумма медиан этих векторов u2.
Результаты этих вычислений являются выходными параметрами,
то есть u1, u2 – выходные параметры программы. Данную программу можно разбить на следующие подпрограммы.
Во-первых, так как внутри программы для каждого вектора
вычисляются среднее значение и медиана, то можно отдельно написать функцию, которые бы вычисляла среднее значение вектора, и функцию, которая бы вычисляла медиану вектора.
Во-вторых, при вычислении, как медианы, так и среднего значения вектора, надо знать длину вектора, следовательно, можно
отдельно написать функцию для вычисления длины вектора.
В-третьих, при вычислении медианы вектора элементы вектора надо пересортировать по их возрастанию, следовательно, отдельно можно написать функцию сортировки.
В итоге блок-схема нашей структурной программы будет
иметь вид.
Основная программа
1уровень
Вычисление среднего
Вычисление медианы
2уровень
Вычисление длины вектора
Сортировка элементов
3уровень
Рис. 2.5.Блок-схема программы
Таким образом, наша программа разбивается на основную
программу и четыре подпрограммы. Основная программа составляет первый уровень структурного разбиения. Подпрограммы,
вызываемые из основной программы, составляют второй уровень
122
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12.2. Метод структурного программирования
структурного разбиения. Подпрограммы, вызываемые из второго
уровня, составляют третий уровень структурного разбиения. Линиями указаны взаимосвязи программ.
В структурном программировании вся программа пишется
сверху вниз. То есть сначала пишется основная программа, а в качестве подпрограмм ставятся заглушки.
Пояснение
Заглушка – это пустая программа, то есть программа, состоящая только из заголовка и, возможно, выводящая на экран какуюлибо фразу, указывающую на то, что подпрограмма вызывалась.
Если подпрограмма, для которой написана заглушка, должна возвращать какие либо значения, то они просто вводятся программистом по его усмотрению.
После написания и отладки основной программы, пишутся последовательно подпрограммы второго уровня (вместо заглушек),
а в качестве подпрограмм третьего уровня пишутся опять-таки заглушки и т. д. сверху вниз.
Напишем данную программу.
Первый этап
Напишем основную программу, а в качестве подпрограмм напишем заглушки.
function [u1, u2] = myff(v1,v2)
% NYFF находит сумму средних и сумму медиан для векторов
v1 и v2
u1 = men(v1)+ men(v2);
% вычисление суммы средних
значений
u2 = med(v1)+ med(v2);
% вычисление суммы медиан
% заглушка для подпрограммы вычисления среднего
function u = men(v)
'среднее вычислено'
% фраза, выводящаяся на экран
и указывающая на то, что функция была вызвана
u=4;
% число, присвоенное выходному
параметру программистом произвольно
% заглушка для подпрограммы вычисления медианы
function u = med(v)
'медиана вычислена'
% фраза, выводящаяся на экран
и указывающая на то, что функция была вызвана
123
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12. Структурное программирование
u = 4;
% число, присвоенное выходному
параметру программистом произвольно
После написания первого этапа основная программа отлаживается. То есть она запускается в работу, и находятся синтаксические и логические ошибки. Ошибок в заглушках из-за их простоты
быть не может. В нашем случае основная программа несложная,
и ее отладка не представляет большого труда (ошибок может
и не быть). В реальных практических программах отладка программ, как правило, занимает от 60 до 99 % всех затрат времени
на создание программы.
Когда основная программа будет отлажена, то пишутся подпрограммы второго уровня, независимо от основной программы.
После отладки каждой подпрограммы второго уровня, соответствующая ей заглушка заменяется.
Второй этап
На данном этапе пишутся подпрограммы второго уровня и заглушки для подпрограмм третьего уровня
% подпрограмма вычисления среднего
function u = men(v)
% MEN – вычисляет среднее
n=lenn(v) % подпрограмма вычисляет длину вектора
S=0;
% начальное значение для суммы элементов вектора
for i = v
S = S+i;
end
u = S/n;
Теперь напишем подпрограмму вычисления медианы элементов вектора.
Пояснение
Для нахождения медианы вектора необходимо выполнить два
этапа.
1. Пересортировать элементы вектора в порядке их возрастания.
2. Если число элементов у вектора нечетное, то медианой является средний элемент. Если число элементов у вектора четное, то
медианой является полусумма средних элементов.
% подпрограмма вычисления медианы
function u = med(v)
124
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12.2. Метод структурного программирования
% MED – вычисляет медиану
n=lenn(v)
% подпрограмма вычисляет длину вектора
w= sortt (v); % подпрограмма сортирует элементы по
возрастанию
if round(n/2) = = (n/2)
u = (w (n/2)+w(n/2+1))/2;
else
u = w((n+1)/2);
end
Пояснение
Здесь использована библиотечная функция round (см. help
или справочник Часть 3), которая округляет число по обычным
математическим законам. Таким образом, если соотношение
round(n/2) == (n/2) верно, то число элементов у вектора четное,
в противном случае – нечетное.
Теперь напишем заглушки для функций третьего уровня.
% заглушка для подпрограммы вычисления длины вектора
function n=lenn(v)
'длина вычислена' % фраза, выводящаяся на экран и указывающая, на то, что функция была вызвана.
n=5; % число присвоенное выходному параметру программистом произвольно.
Замечание
Для проверки правильности работы программ, вызывающих
функцию lenn, не имеет значение, какое именно число возвращает
lenn, важно только знать это число и иметь возможность его изменять, чтобы проверить все возможные режимы работы вызывающей программы.
% заглушка для подпрограммы сортировки элементов
вектора
function w = sortt(v)
'сортировка'
% фраза, выводящаяся на экран и указывающая, на то, что функция была вызвана
w=v;
% возвращается тот же вектор
Замечание
При отладке вызывающей программы надо брать вектор уже
с пересортированными элементами.
125
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.12. Структурное программирование
После отладки функции второго этапа заменяют свои заглушки в основной программе, и пишутся функции третьего этапа.
Третий этап
На данном этапе пишутся подпрограммы третьего уровня.
% подпрограммы вычисления длины вектора
function n = lenn(v)
% LENN – вычисляет длину вектора
n = 0; % начальное значение
for i = v
n = n+1;
end
% подпрограмма сортировки элементов вектора
function w = sortt(v)
% SORTT – сортирует элементы вектора по возрастанию
n = lenn(v) % вычисление длины вектора
for i =1 :(n-1)
for j = 1: (n-1)
if v(j) > v(j+1)
p = v(j);
v(j) = v(j+1)
end
end
end
Замечания
1. В данной программе, если предыдущий элемент больше последующего, то есть соотношение v(j) > v(j+1) верно, происходит
перестановка предыдущего и последующего элементов.
2. Во внутреннем цикле for (при i = 1) происходит фактически
только сравнение первого элемента вектора со всеми остальными элементами, так как надо сравнить со всеми элементами не только первый элемент, то используется внешний цикл
for.
3. Названия данных функций выбраны так, чтобы они не совпадали с названиями аналогичных библиотечных функций.
Подробно данную M-функцию и M-функции выше можно изучить самостоятельно.
126
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.13.1. Векторизация циклов
2.13. Методы повышения эффективности обработки М-файлов
В MatLab используются следующие методы для повышения
быстродействия выполнения программ.
1. Векторизация циклов.
2. Предварительное размещение массивов.
3. Удаление ненужных переменных и функций и дефрагментация памяти.
2.13.1. Векторизация циклов
Под векторизацией циклов понимается преобразование циклов for и while к эквивалентным векторным или матричным выражениям. При этом векторизованные выражения выполняются
значительно быстрее, так как MatLab специально разработан для
работы с массивами.
Пример
Вычислить sin(x) на интервале [0 10] с шагом 0.01. Для вычисления можно использовать цикл
i = 0;
for t = 0:0.01:10
i = i+1;
y(i) = sin(t);
end
Однако данное вычисление можно выполнить и в векторной
форме
t = 0:0.01:10;
y = sin(t);
В последнем случае вычисление будет намного быстрее.
2.13.2. Предварительное размещение массивов
Для выделения динамической памяти Система MatLab использует стандартные функции языка Си malloc и free. Эти функции работают в относительно медленном темпе. В свою очередь,
для системы MatLab эта память выделяется намного быстрее.
Таким образом, использовать функции Си malloc и free надо как
127
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.13. Методы повышения эффективности обработки М-файлов
можно меньше. По мере выделения памяти пул может стать очень
большим. Чтобы поддерживать быстродействие, утилиты malloc
и free не возвращают использованную память операционной системе. Эти подпрограммы исходят из предположения, что, если
большой объем памяти потребовался один раз, то в нем возникнет
необходимость снова.
Побочный эффект этого алгоритма состоит в том, что, если
MatLab использовал некоторый объем памяти один раз, то он более
недоступен другим программам, даже если MatLab он уже не нужен. Память пула возвращается операционной системе только после завершения работы MatLab.
Из сказанного следует, что для ускорения работы программы
значительно лучше выделять место в памяти для больших массивов в самом начале работы программы (это сокращает число вызовов функций Си malloc).
Кроме того, предварительное выделение памяти позволяет избежать фрагментации памяти. Дело в том, что в ходе сеанса работы
с MatLab память может стать фрагментированной из-за работы механизмов динамического распределения и освобождения памяти.
Это приводит к появлению большого количества фрагментов свободной памяти. Однако, для загрузки массива нужен непрерывный кусок памяти. Поэтому возникает ситуация, когда свободной
памяти достаточно, а большой массив загрузить нельзя. Если в самом начале работы программы выделить память под большие массивы, то такой ситуации не может возникнуть никогда.
Предварительно память может быть выделена функциями.
1. Y = zeros(100,100) – память выделена под массив чисел. Это
библиотечная функция, которая создает массив 100x100 и заполняет его нулями.
2. Y(3) = struct('x', [1 3], 'y', [5 6]) – память выделена под структуру Y размера 1x3 с двумя полями (см. ниже ).
3. B = cell(2, 3) – память выделена под массив ячеек 2 x3 (см.
ниже).
128
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Проектные задания по модулю 2
2.13.3. Удаление ненужных переменных и функций из памяти
и ее дефрагментация
Переменные, будучи записанными в рабочую область, не удаляются из нее, даже если они уже не нужны. Аналогично и функции, отработав, не удаляются из памяти.
В связи с этим желательно ненужные переменные удалять
из памяти командой clear.
Пример.
1. clear VAR1 f1 f2 – удаляет переменные или функции с указанными именами из рабочей области.
2. clear x – данная команда для глобальной переменой х удаляет
ее только из текущей рабочей области, а в области глобальных
переменных она остается.
3. clear global x – удаляет x из области глобальных переменных.
4. clear function – удаляет из рабочей области все функции.
5. clear variables – удаляет из рабочей области все переменные.
6. clear all – удаляет из рабочей области и переменные,
и функции.
После удаления из памяти ненужных переменных и функций
желательно произвести дефрагментацию памяти командой pack.
Проектные задания по модулю 2
Задание 1
Написать программу суммирования чисел от единицы до n (n
– входной параметр функции).
Задание 2
Написать программу для вычисления произведения чисел
от единицы до n (n – входной параметр функции).
Задание 3
Написать программу суммирования чисел от единицы до n
с шагом k (n, k – входные параметры функции).
Задание 4
Написать программу для вычисления произведения чисел
от единицы до n с шагом k (n, k – входные параметры функции).
129
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Проектные задания по модулю 2
Задание 5
Написать программу суммирования элементов вектора u (u –
входной параметр функции).
Задание 6
Написать программу вычисления произведения элементов
вектора u (u – входной параметр функции).
Задание 7
Написать программу суммирования k первых элементов вектора u (если k меньше числа элементов вектора) и сумму всех элементов вектора u (если k больше числа элементов вектора) (u, k –
входные параметры функции).
Задание 8
Написать программу вычисления произведения k первых элементов вектора u (если k меньше числа элементов вектора) и произведение всех элементов вектора u (если k больше числа элементов
вектора) (u, k – входные параметры функции).
Задание 9
Написать программу суммирования элементов вектора u, начиная с первого элемента и с шагом k (u, k – входные параметры
функции).
Задание 10
Написать программу вычисления произведения элементов
вектора u, начиная с первого элемента и с шагом k (u, k – входные
параметры функции).
Задание11
Написать программу суммирования элементов вектора u,
начиная с элемента n и с шагом k (u, k, n – входные параметры
функции).
Задание 12
Написать программу вычисления произведения элементов
вектора u, начиная с элемента n и с шагом k (u, k, n – входные параметры функции).
Задание 13
Написать программу оценки точности вычисления в пакете MatLab, начиная оценку с числа N (N – входной параметр
функции).
130
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Проектные задания по модулю 2
Задание 14
Написать программу сортировки элементов вектора u по возрастанию элементов (u – входной параметр функции).
Задание 15
Написать программу вычисления длины вектора u (u – входной параметр функции).
Задание 16
Написать программу суммирования чисел вводимых с клавиатуры. В случае ввода отрицательного числа программа должна
прекратить работу.
Задание 17
Написать программу вычисления произведения чисел вводимых с клавиатуры. В случае ввода отрицательного числа программа должна прекратить работу.
Задание 18
Написать программы, аналогичные библиотечным функциям
tic и toc. То есть программы, с помощью которых можно было бы
вычислять время выполнения различных команд.
Задание 19
Написать программу вычисления медианы для элементов вектора u (u – входной параметр функции).
Задание 20
Написать программу вычисления среднего значения и дисперсии для элементов вектора u (u – входной параметр функции).
131
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 2
Тесты рубежного контроля модуля 2
1.
2.
3.
4.
5.
6.
7.
132
Чем в MatLab различаются понятия матрицы и массива?
a) способом выполнения математических операций;
b) способом записи;
c) способом выполнения операций сложения и вычитания;
d) расположением строк и столбцов.
Чем отделяются операторы в программах MatLab?
a) точкой;
b) пробелом;
c) запятой и точкой с запятой;
d) запятой и двоеточием.
Что такое идентификатор?
a) название переменной, функции, структуры и т. д.;
b) название только переменной;
c) название только функции;
d) название только переменной и функции.
Если после оператора стоит знак запятая, то что произойдет
при выполнении данного оператора?
a) результат выполнения не будет выведен в командное
окно;
b) результат выполнения будет присвоен выходному
параметру;
c) результат выполнения будет выведен в командное окно;
d) результат выполнения будет присвоен переменной ans.
Какое правило применимо при написании идентификатора?
a) заглавные и строчные буквы не различаются;
b) идентификатор пишется, начиная с любого знака;
c) надо различать заглавные и строчные буквы;
d) идентификатор пишется, начиная с цифры.
Для каких операций MatLab понятия матрицы и массива
различаются?
a) операций сложения;
b) операций сравнения;
c) логических операций;
d) операций произведения и деления.
Какой операции MatLab приоритет выше?
a) операции >, чем операции AND;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 2
8.
9.
10.
11.
12.
13.
14.
b) операции AND, чем операции >;
c) операции сложения, чем операции деления;
d) операции умножения, чем операции деления.
Вычислить выражение 8+5>4&4<3*5:
a) 0;
b) 4;
c) 1;
d) -1.
Вычислить выражение 8>2*5|8+5>5/7&4&4<3*5:
a) 1;
b) 0;
c) 3;
d) 2.
Что может быть в операторе for i=A на месте переменной А?
a) только диапазон;
b) диапазон и матрица;
c) только матрица;
d) строка.
Какое назначение оператора while?
a) это оператор цикла с определенным числом циклов;
b) это оператор переключатель;
c) это оператор цикла с неопределенным числом циклов;
d) это оператор условия.
Что может быть в операторе while A на месте переменной А?
a) условие;
b) оператор;
c) строка;
d) список.
Сколько может быть ключевых слов elseif в операторе if?
a) любое число;
b) одно;
c) два;
d) ни одного.
Что может быть в операторе switch A на месте переменной А?
a) скалярное выражение;
b) матрица;
c) массив;
d) матричное выражение.
133
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 2
15. Для чего служит оператор break?
a) выхода из программы;
b) прерывания циклов;
c) прерывания оператора условия;
d) переход в конец программы.
16. Что означает переменная inf?
a) действительная часть;
b) неопределенное число;
c) мнимая часть;
d) переполнение регистра.
17. Что означает переменная NaN?
a) действительная часть;
b) неопределенное число;
c) мнимая часть;
d) переполнение регистра.
18. В чем заключается сущность метода структурного
программирования?
a) в разбиении всей программы на операторы;
b) в использовании объектов;
c) в разбиении всей программы на подпрограммы;
d) в разбиении всей программы на циклы.
19. Для чего служит оператор try…catch…end?
a) для анализа циклов;
b) для обработки возможных ошибок;
c) для оптимизации структуры программы;
d) для вычисления строковых выражений.
20. Какая функция используется для вычисления строковых
выражений?
a) eval;
b) strsmp;
c) input;
d) feval.
21. Что понимается под термином «векторизация циклов»?
a) замена циклов векторными и матричными операциями;
b) преобразование векторных и матричных операций
в циклы;
c) обмен циклов;
d) вложение циклов.
134
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 2
22. Что представляет собой переменная varargin?
a) числовой массив;
b) массив строк;
c) массив ячеек;
d) число.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1. Иерархия типов данных в MatLab
МОДУЛЬ 3. ОСНОВНЫЕ ТИПЫ ДАННЫХ MATLAB
Комплексная цель:
- описать основные типы данных, используемых в языке программирования MatLab;
- описать основные приемы работы с этими типами данных.
3.1. Иерархия типов данных в MatLab
В MatLab определены 16 фундаментальных типов (или классов) данных, каждый из которых является многомерным массивом (рис. 3.1).
Пояснение
Тип определяет, сколько места в памяти занимает переменная
данного типа, и какой смысл у каждого бита, записанного в память
(это называется форматом числа).
array
char
numeric
double
sparse
cell
struct
logical
single
int8
int16
int32
int64
uint8
uint16
uint32
uint64
Рис. 3.1. Диаграмма иерархии типов данных
Замечания
1. Нельзя определять массивы типа numeric и array – это виртуальные массивы, они служат для группирования переменных по
определенному признаку.
2. В MatLab можно создавать свои типы данных (см. Часть 2
«Объектно-ориентированное программирование»).
3. На диаграмме линии указывают подчиненность типов. Например, тип numeric является родительским для типов double
и sparse.
136
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1. Иерархия типов данных в MatLab
3.1.1. Тип char
Сhar – тип строки. Строка представляет собой одномерный
массив символов. Каждый символ занимает в памяти два байта
и представлен в кодировке ASCII Unicode.
Создается массив символов с помощью одинарных кавычек.
Пример
A='abcde'
Переменная А равна массиву символов из 5 элементов, занимающих в памяти 10 байт. Подробно см. ниже.
3.1.2. Тип double
Числовые данные, с которыми оперирует MatLab на IBMсовместимом ПК, в памяти компьютера представлены вещественными или комплексными значениями типа double (двойная точность). Это означает, что каждое вещественное число занимает
8 байтов в оперативной памяти и принимает по модулю значения
из диапазона [10-308, 10+308]. Количество значащих десятичных
цифр при этом достигает 16–17. Комплексное число, представленное действительной и мнимой частями в таком же формате, занимает, соответственно, 16 байтов. Именно с такой точностью MatLab
выполняет все вычисления. Однако при отображении числовых
результатов на дисплее часть значащих цифр отбрасывается в соответствии с установленным форматом вывода.
По умолчанию система использует формат, обозначаемый служебным словом short (укороченный). Однако формат вывода числовых данных может быть и другим (табл. 3.1).
В табл. 3.1 использованы основные форматы вывода числовых
данных с фиксированной и плавающей запятой. Последний формат позволяет отображать числовые значения в виде подходящих
рациональных дробей с минимально возможными числителями
и знаменателями. Следует заметить, что значение переменной х
не зависит от установленного формата вывода.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1. Иерархия типов данных в MatLab
Таблица 3.1
Пример отображения числа
format short
x=sqrt(2)
х=
1.4142
format long
x=sqrt(2)
x=
1.41421356237310
format short e
x=sqrt(2)
x=
1.4142e+000
format long e
x=sqrt(2)
x=
1.414213562373095e+000
format rational
x=sqrt(2)
x=
1393/985
Формат вывода результатов вычислений может быть установлен как программным путем (именно это и продемонстрировано
в табл. 3.1), так и с помощью изменения параметров Command
Window (Окно команд). Для этого следует войти в меню File (Файл),
выбрать команду Preferences (Предпочтения), в раскрывшемся
диалоговом окне выделить пункт Command Window (Окно команд)
и установить нужный формат.
Данный тип является основным при всех вычислениях
в MatLab.
3.1.3. Тип sparse
Довольно много задач математической физики, теории прочности и пластичности приводят к решению специфических систем
линейных алгебраических уравнений с так называемыми ленточными или блочными матрицами. Кроме нескольких диагоналей
или небольших блоков, заполненных коэффициентами, в этих матрицах находится огромное число нулей. Держать их в оперативной памяти невыгодно, поэтому в ряде прикладных программ было
предложено хранить наряду со значениями ненулевых элементов
138
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1.4. Тип single
их индексы. Способы такого представления данных могут быть
разными. Например, можно хранить тройки (value, i, j). MatLab
использует более экономный вариант, при котором разреженная
матрица рассматривается как вектор-столбец, компонентами которого являются разреженные векторы-строки. Ненулевые компоненты разреженных строк требуют задания не двух индексов,
а одного, на чем, собственно, и экономится объем хранимой информации. На самом деле хранятся не индексы отдельных элементов
столбца, а диапазон индексов, соответствующий подряд идущим
ненулевым элементам.
Данный тип используется при решении отмеченных выше
задач.
3.1.4. Тип single
Тип single (одинарная точность) в полном формате появился, только начиная с версии MatLab 7. В отличие от данных типа
double, где каждый элемент массива представлен 8-байтным значением, в массивах типа single (single arrays) на каждую числовую
составляющую отводится по 4 байта и тем самым экономится 50 %
памяти. Однако диапазон представления числовых данных здесь
существенно ниже (1038 вместо 10308), да и точность вычислений
гарантирует получение, максимум, 7–8 значащих цифр вместо
15–16 в стандартном режиме. В отличие, от предыдущих версий
начиная с MatLab 7, разрешаются почти все арифметические операции и над вещественными данными с одинарной точностью. Воспринимают такие аргументы и многие элементарные функции.
При использовании в арифметических операциях одновременно
и значений типа single, и значений типа double получается результат вычисления типа single.
Пример
A = single(3) % создана переменная A занимающая в памяти
4 байта
С = single(5)+ single(6)+2 % переменная С будет типа single
Данный тип введен по аналогии существования такого типа
в других языках программирования (С++, Pascal и т. д.). Однако
его использование в вычислительных задачах крайне ограничено,
139
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1. Иерархия типов данных в MatLab
так как он дает очень низкую точность вычислений. Поэтому данный тип в MatLab, как мне кажется, надо воспринимать как экзотику, мало применимую на практике.
3.1.5. Целочисленные типы данных в MatLab
Во всех универсальных алгоритмических языках имеются
целочисленные типы данных. В MatLab до версии 7 были целочисленные типы данных со знаком (int8, int16, int32) и без знака (uint8, uint16, uint32). Эти типы данных допускали создание
и хранение числовой информации в виде одно-, двух- и четырехбайтовых форматов.
В MatLab, начиная с версии 7, включены восьмибайтовые целые типы данных int64 и uint64. Однако самое существенное нововведение в версии MatLab 7 в том, что для целых чисел определены
арифметические операции.
В предыдущих версиях целочисленные типы в основном предназначались только для эффективного хранения данных изображения в памяти. К данным этого типа можно было применять только
базовые операции индексации и изменения размеров, но с ними
нельзя было выполнять никаких математических операций.
Для конвертирования вещественных и комплексных чисел
типа double в любой из допустимых целых форматов используются функции, совпадающие по названию с соответствующим типом
(табл. 3.2).
Пример
A = int8(3)
% переменная А целочисленная и занимает
в памяти 1 байт
В = int32(3)
% переменна. В целочисленная и занимает
в памяти 4 байта
При использовании дробных чисел округление идет по обычным правилам
С = int8(2.1)
% переменная С = 2
D = int8(2.5)
% переменная D = 3
E = int8(-2.5)
% переменная E = -3
Если конвертируемый аргумент выходит за пределы допустимого диапазона, то MatLab возвращает левую или правую
границу.
140
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1.5. Целочисленные типы данных в MatLab
F1 = int8(550) % переменная F1 = 127
F2 = int8(-550) % переменная F2 = -128
Таблица 3.2
Описание целочисленных типов
Функция
int8
uint8
intl6
uintl6
int32
uint32
int64
uint64
double
single
Назначение
Диапазон допустимых
значений
Преобразование в формат однобайтовых це- от -128 до 127
лых чисел со знаком
Преобразование в формат однобайтовых це- от 0 до 255
лых чисел без знака
Преобразование в формат двухбайтовых це- от -32 768 до 32 767
лых чисел со знаком
Преобразование в формат двухбайтовых це- от 0 до 65 535
лых чисел без знака
Преобразование в формат четырехбайтовых от -2 147 483 648
целых чисел со знаком
до 2 147 483 647
Преобразование в формат четырехбайтовых от 0 до 4 294 967 295
целых чисел без знака
Преобразование в формат восьмибайтовых от – 2 63 до 263 – 1
целых чисел со знаком
Преобразование в формат восьмибайтовых от 0 до 264 – 1
целых чисел без знака
Преобразование
числового
аргумента от 2.225x10-308
в формат вещественного числа с удвоенной до 1.798x10+308
точностью
(по модулю)
Преобразование
числового
аргумента от 1.175x10-38
в формат вещественного числа с одинарной до 3.403x10+38
точностью
(по модулю)
Целочисленная арифметика в MatLab требует, чтобы матрицы
или скаляры были одного типа. То есть нельзя складывать однобайтовый скаляр или массив с двухбайтовым массивом. Однако,
если один операнд (скаляр или массив) имеет целый тип, то вторым операндом формулы может быть скаляр типа double. MatLab
выполняет такую операцию с удвоенной точностью и преобразует
результат к типу целочисленного операнда.
Так как в вычислительных процессах целые типы используются крайне редко, то их значение в MatLab небольшое. В основном они используются при обработке изображений.
141
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1. Иерархия типов данных в MatLab
3.1.6. Тип logical
Элементы логического массива занимают в памяти по одному
байту, в котором может находиться либо 1 (логическая истина),
либо 0 (логическая ложь).
Логические массивы появляются, как правило, в двух
случаях.
1. В результате выполнения операций отношения.
Пример 1
>> A = [2 4;5 8];
>> B = [4 7;8 5];
>> y = A > B
y=
0
0
0
1
>> whos
Name Size
Bytes Class
Attributes
A
2x2
32 double
B
2x2
32 double
y
2x2
4 logical
Таким образом, видно, что у нас в рабочей области два массива
типа double и один массив типа logical, который является результатом выполнения операции отношения.
2. В результате различных проверок, выполняемых с помощью стандартных библиотечных функций: isletter (проверка буква/цифра), isspace (проверка на пробел), isprime (проверка чисел
на простоту) и др. (см. Часть 3 справочник и help ).
Пример 2
>> A = [2 4;5 8];
>> isprime(A)
ans =
1
0
1
0
>> whos
Name
Size
Bytes Class
Attributes
A
2x2
32 double
ans
2x2
4 logical
142
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1.7. Создание массивов из данных разного типа
Таким образом, видно, что у нас в рабочей области один массив
типа double и один массив типа logical, который является результатом выполнения функции проверки isprime.
Другим способом создания логических массивов является использование логических констант true и false, эквивалентных однобайтовым числам 1 и 0.
Пример 3
>>x = [true false true]
х=
1
0
1
>> whos
Name
Size
Bytes Class
Attributes
х
1x3
3 logical
Для создания логических массивов, все элементы которых одновременно являются либо истиной, либо ложью, можно воспользоваться функциями true или false.
Пример 4
>> x = true(2)
х=
1
1
1
1
>> y = true(2,3)
y=
1
1
1
1
1
1
>> z = true([2 3])
z=
1
1
1
1
1
1
Замечание
Типы cell и struct будут подробно рассмотрены ниже.
3.1.7. Создание массивов из данных разного типа
Начиная с MatLab 7, разрешается формирование символьных,
числовых и логических массивов из комбинации данных разного
типа. При этом система руководствуется определением типа ре143
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2. Числовые массивы (тип double)
зультирующей матрицы по сочетаниям пар типов данных, представленным в табл. 3.3.
Таблица 3.3
Результирующий тип
Тип
сhar
int
single
double
logical
char
сhar
char
char
char
Запрещено
int
char
int
int
int
int
single
double
logical
char
char
Запрещено
int
int
int
single
single
single
single
double
double
single
double
logical
Пользоваться данными возможностями на практике не приходится. На данный момент это экзотические возможности MatLab.
Выводы
Наиболее часто используемыми типами данных в MatLab являются double, char, cell, struct. Ниже мы подробно рассмотрим
работу с этими типами данных.
3.2. Числовые массивы (тип double)
3.2.1. Пустые массивы
В ранних версиях допускалась единственная форма пустого
массива размерности 0x0, которая обозначалась пустыми скобками [ ]. Начиная с версии MatLab 5.0, стали использоваться пустые
массивы, в которых одна из размерностей, но не все, равнее нулю,
т.е. массивы вида:
1x0, 10x0x20, и т. д.
Квадратные скобки [ ] по-прежнему продолжают обозначать
массив размерности 0x0. Пустые массивы другого размера могут быть созданы с помощью библиотечных функций zeros, ones,
rand, eye.
Пример 1
E = zeros(0, 5)
% E – пустой массив 0x5.
Основное назначение пустых массивов состоит в том, чтобы
любая операция, которая определена для массивов (матриц) размера m x n, определяла правильный результат для случая, когда m
или n равно нулю.
144
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2.2. Общие сведения о массивах
Пример 2
При объединении матрицы А размера m x n и В размера
m x р т. е.
С = [A B] % объединение матриц см. ниже
Получается матрица С размера m x (n+р). Результат объединения должен быть правильным, если любой из параметров m, n и р
равен нулю.
Пояснение
Введение пустых матриц очень облегчает программирование
различных задач. Действительно пусть, согласно примеру выше,
мы в программе рассматриваем объединение двух матриц. Если
нет пустых матриц, то случай, когда матрица А не объединяется
ни с какой матрицей, надо рассматривать отдельно. В случае наличия пустых матриц этот случай можно рассматривать в общем цикле, например, полагая, что размерность p у матриц. В меняется
от нуля до некоторых значений в соответствии с условием задачи.
Это, несомненно, облегчает программирование вычислительных
задач при наличии в них матриц.
Замечание 1
в операторе
if A, S1, else, S0, end
Если А – пустой массив, то выполняются инструкции S0.
Замечание 2
Для следующих функций справедливы соотношения:
sum ([ ]) = 0;
prod ([ ]) = 1;
max ([ ]) = [ ];
min ([ ]) = [ ].
3.2.2. Общие сведения о массивах
1. Расположение массива в памяти
В памяти любой многомерный массив (см. ниже) располагается по столбцам, начиная с первого столбца на первой стороне
и т. д.
Пример 1
>>А = [1 2 3; 4 5 6; 7 8 9]
145
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2. Числовые массивы (тип double)
Поэтому элементу 8 в этом массиве можно обратиться двумя
способами:
А(3, 2) или А(6)
Замечание
Индексы массива в MatLab указываются в круглых скобках
через запятую.
2. Объединение массивов
Пусть
>>A = [1 2; 3 4],
с помощью квадратной скобки массивы можно объединить как
по строкам, так и по столбцам.
Пример 2
>. В = [А А+1; А+2 А*2]
В = 1
2 2
3
3
4 4
5
3
4 1
4
5
6 6
8
3.2.3. Создание многомерных массивов
1.
2.
3.
4.
Существует 4 способа создания массивов:
использование конструкторов массивов,
использование индексов,
использование специальных функций,
использование функции cat.
1. Использование конструкторов массивов
Конструктором (создателем) двумерный массив является оператор квадратные скобки.
Пример 1
A = [5 7 8; 0 1 9; 4 3 6]
A= 5
7
8
0
1
9
4
3
6
Между числами массива можно ставить или пробел или запятую. Точка с запятой означает переход на новую строку.
146
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2.3. Создание многомерных массивов
2. Использование индексов
Пример 2
Создадим трехмерный массив из массива определенного
выше.
A(:, :, 2) = [1 2 3; 4 5 6; 7 8 9]
Получим
A(:, :, 2) = 1
2 3
A(:, :, 1)= 5 7
8
4
5 6
0 1
9
7
8 9
4 3
6
Пояснение
Двоеточие означает все (любые) элементы, в частности A(:, :, 2)
– означает всем (любым) элементам строк и столбцов на второй стороне присвоить матрицу.
Пример 3
Пусть имеется двухмерный массив
А=[1 2; 3 4]
Создадим четырехмерный массив
А (:, :, 1, 2) = [5 6; 7 8]
А (:, :, 2, 1) = [7 8; 1 2]
А (:, :, 2, 2) = [3 4; 5 6]
3. Использование специальных функций
Функции zeros, ones, rand, randn – могут быть использованы
для создания многомерных массивов.
Пример 4
B = ones (3, 3, 2)
B(:, :, 1) = 1 1
1
B(:, :, 2)= 1
1 1
1 1
1
1
1 1
1 1
1
1
1 1
4. Использование функции cat
B = cat (dim, A1, A2,…),
где dim – номер размерности, вдоль которой размещаются массивы, A1, A2,… , то есть список двумерных массивов.
Пример 5
А = [1 2; 3 4]В = [6 7; 8 9]
С = cat (3, A, B) % массив С будет размерности 2×2×2
147
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2. Числовые массивы (тип double)
Пример 6
С = cat (4, A, B) % массив С будет размерности 2×2×1×2
С(:,:,1,1)= 1
2
C(:,:,1,2)= 6
7
3
4
8
9
Пример 7
С = cat (5, A, B) % массив С будет размерности 2×2×1×1×2
С(:,:,1,1,1)= 1
2
C(:,:,1,1,2)= 6
7
3
4
8
9
Пример 8
Можно формировать многомерные массивы и так:
A = cat (3, [1 2; 3 4], [5 6; 7 8])
B = cat (3, [6 8; 9 7], [3 4; 7 6])
B = cat (4, A, B, cat (3, [1 2; 4 8], [4 2; 3 1]))
3.2.4. Индексация массивов
Под индексацией массивов понимается извлечение из данных
массивов элементов или блоков. Для этого используется оператор
круглые скобки.
Пример 1
Пусть дан массив А.
А = [1 2 3; 4 5 6; 7 8 9]
Отдельные элементы или блоки можно извлечь из данного
массива следующим образом.
1) Извлечение отдельного элемента
В = А (1, 2) %. В = 2
2) Извлечение строки (столбца)
В = А (2, :) % . В = [4 5 6]
А (2, :) – означает извлечь все элементы второй строки
1 
В = А (:, 1) % B = 4 
7 
А (:, 1) – означает извлечь все элементы первого столбца
3) Извлечение блока
В = А (2:3, 1:2)
148
% B=
4 5
7 8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2.5. Добавление строк и столбцов
А (2:3, 1:2) – означает извлечь строки с 2 по 3 и столбцы
с 1 по 2.
4) Извлечение блока с произвольным шагом
В = А (1, 1:2:3) . В = 1 3
А (1, 1:2:3) – означает, извлечь из первой строки элементы начиная с первого, шагом 2 до элемента 3.
5) Использование векторов для индексации
В MatLab, где возможно использование диапазона (:), возможно использование и вектора. Следовательно, при индексации можно использовать и вектор.
1. В = А (2, [1 3]) %. В = 4 6
А (2, [1 3]) – означает из второй строки извлечь 1 и 3
элементы.
2. Пусть
А1=[1 2; 3 4]
B=A1([1 1 2],[2 1 2])
% B массив 3х3
B= 2 1 2
2 1 2
4 3 4
A1([1 1 2],[2 1 2]) означает – из первой строки матрицы А извлечь элементы с индексами 2, 1, 2 и поставить их в первую строку
матрицы В. Далее опять из первой строки матрицы А извлечь элементы с индексами 2, 1, 2 и поставить их во вторую строку матрицы В. Далее из второй строки извлечь элементы с индексами 2, 1, 2
и поставить их в третью строку матрицы В.
3.2.5. Добавление строк и столбцов
Чтобы добавить столбец (строку), достаточно присвоить значение элементу с индексом, выходящим за пределы массива.
Пример 1
А = [1 2 ; 4 5]
A= 1 2
4 5
Присвоение
А (2, 3) = 10 приводит к матрице 2х3
A=1
2 0
4
5 10
149
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2. Числовые массивы (тип double)
Как видно, неопределенные элементы заполняются нулями.
Пример 2
Можно присвоить и все значения строки или столбца.
B = [1 2 3; 4 5 6]
B(3,:)=[7 8 4]
B= 1
2
3
4
5
6
7
8
4
Замечание
Нельзя присваивать массивы различной размерности.
А2 (:, :, 1) = 1:10 – к двумерному массиву присваивается одномерный массив, при этом MatLab выдаст сообщение об ошибке. Однако можно сделать, например, такое присвоение:
А2(1, :, 1) = 1:5 % одномерный массив присваивается одномерному массиву.
А2 = 1 2 3 4 5
3.2.6. Удаление строк и столбцов
Используя понятие пустого массива, можно удалять строки,
столбцы или блоки.
Пример 1
A = [1 2 3; 4 5 6; 7 8 9]
Удалим третий столбец
А (:, 3) = [ ]
А= 1
2
3
4
7
8
Пример 2
A = [1 2 3; 4 5 6; 7 8 9]
Удалим вторую строку
А (2, :) = [ ]
А= 1
2 3
7
8 9
Пример 3
Однако таким образом удалить один элемент нельзя.
А (1, 2) = [ ] % выдается сообщение об ошибке
??? Indexed empty assignment is not allowed.
150
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2.7. Использование массивов в функциях
Запрещено присвоение пустой матрицы индексному
выражению.
Замечание
В силу сохранения в памяти массивов по столбцам (см. выше)
элементы массивов можно индексировать одним числом.
Поэтому использование единственного индекса позволяет удалять одиночные элементы или последовательности элементов, при
этом оставшиеся элементы преобразуются в вектор-строку.
Например, для массива
А = A = [1 2 3; 4 5 6; 7 8 9]
элемент А (1, 2) можно удалить следующим образом:
А (4) = [ ],
при этом получим вектор-строку А =[ 1 4 7 5 8 3 6 9]
3.2.7. Использование массивов в функциях
При использовании функций от массивов необходимо определить, какой массив нужен функции. Различные функции могут
работать:
1. с отдельными элементами,
2. со столбцами массивов,
3. с двумерными массивами (матрицами),
4. с многомерными массивами (матрицами).
1. Функции, работающие с отдельными элементами
К этим функциям относятся все математические функции,
операторы отношения, логические операторы и т. д.
2. Функции, работающие со столбцами массивов
Функции типа sum, mean, diff и т. д. по умолчанию используют в качестве аргумента первую размерность многомерного массива, значение которой не равно 1.
Замечание 1
Большинство таких функций позволяет пользователю указать
ту конкретную размерность, которую надо применять в качестве
входа.
Замечание 2
Есть и исключения. Например, функция cross использует в качестве входных аргументов векторы длиной 3.
151
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2. Числовые массивы (тип double)
3. Функции, работающие с матрицами
Функции линейной алгебры и матричные функции могут работать только с двумерными матрицами. Поэтому их можно применять только к двумерным подмножествам многомерного массива.
3.2.8. Библиотечные функции, связанные с массивами
Приведем здесь наиболее часто используемые функции, связанные с массивами (подробно – Часть 3 Справочника по функциям общего пользования).
С = cat (dim, A1, A2,А3…) – функция объединяет множество
исходных массивов A1, A2,А3… вдоль размерности dim. При этом
cat (1, A, B) – равносильно массиву [A; B]
cat (2, A, B) – равносильно массиву [A B]
Функции характеристики массивов
1. whos – дает информацию о типе массива и испоьзуемой памяти. (Можно использовать интерактивное окно workspace);
2. n=ndims (A) – дает количество размерностей многомерного
массива;
3. d=size (A) – возвращает вектор-строку длиной ndims (A), каждый элемент которой указывает размер массива по соответствующей размерности;
4. n=length (A) – равен max(size(A)) для непустых массивов
и нулю для пустых. Для векторов вычисляет длину вектора.
Пример
А = [1 2 3; 4 5 6]
n = ndims (A)
% n=2
d = size (A)
% d=2 3
n = length (A)
% n=3
Подробней (см. Часть 3 Справочник)
Функции преобразования массивов
1. B = repmat (A, [m n p…]) формирует многомерный массив
сформированный из m×n×p блоков А.
Пример
A = [1 2; 3 4]
B = repmat (A, [2 2])
B= 1 2 1 2
152
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.2.8. Библиотечные функции, связанные с массивами
3 4 3 4
1 2 1 2
3 4 3 4
2. B = reshape (A, [s1 s2 s3…]) изменяет размер массива А, причем в этом случае общее количество элементов должно оставаться
неизменным.
Пример
A = [1 2; 3 4]
A (:, :, 2) = [5 6; 7 8]
B = reshape (A, [2 4])
B= 1
2 5 6
3
4 7 8
3. B = shiftdim (A, n) сдвигает n размерностей многомерного
массива:
1. при n > 0 происходит сдвиг на n-размерностей влево, а n-первых
размерностей подставляются в конец;
2. при n < 0 выполняется сдвиг на n размерностей вправо,
а n-первых размерностей дополняются единицами.
4. B = squeeze (A) возвращает массив B с теми же элементами,
что и А, но в котором удалены размерности равные 1.
5. B = permute (A, <вектор перестановок>)
А = ipermute (В, <вектор перестановок>)
Первая функция осуществляет перестановку размерностей
массива А в соответствии с порядком, определенным вектором
перестановок.
Вторая функция осуществляет обратную перестановку.
Пример
Используя библиотечную функцию rand, создадим массив размерности 1×2×3×4 со случайными числами.
A = rand (1, 2, 3, 4);
Переставим размерности
B = permute (A, [3 2 1 4]);
size (B)
ans =
3 2 1 4
Вернем перестановку размерностей назад
C = ipermute (B, [3 2 1 4]);
Воспользуемся библиотечной функцией isequal для проверки
эквивалентности матриц А, С
153
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.3. Строки
isequal (A, C)
ans = 1
3.3. Строки
В MatLab под строками понимаются одномерные массивы элементами, которых являются символы, то есть объекты типа char
(занимающие в памяти два байта). Поэтому к строкам можно применять все изученные выше операции.
3.3.1. Создание строк
Конструктором (создателем) строки является оператор одинарные кавычки.
Пример 1
A='abcdef' % создана строка из 6 элементов типа char
>> whos
Name
Size
Bytes Class
Attributes
A
1x6
12 char
Пример 2
Для создания данной строки можно воспользоваться и квадратными скобками
А1 = ['a' 'b' 'c' 'd' 'e' 'f'] % создана строка из 6 элементов
типа char
Из данного примера непосредственно видно, что строка это
одномерная матрица из символов.
Со строками можно создавать и двухмерные массивы. Однако
строки в этих массивах должны быть равной длины, в противном
случае MatLab выдает сообщение об ошибке.
Пример 3
A = ['abc'; 'sdf'; 'kgd']
>>whos
Name
Size
Bytes Class
Attributes
A
3x3
18 char
Из таблицы видно, что создан массив А размером 3x3 типа
char.
154
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.3.2. Индексация строк
3.3.2. Индексация строк
В силу того, что строка понимается как массив, то и индексация строк выполняется точно так же как в массиве.
Пример 1
A = 'abcdefghjklzxcvbn'
B1 = A(3)
% B1='c'
B2 = A(2:7)
% B2='bcdefg'
B3 = A(1:2:10)
% B3= 'acegj'
B4 = A([2 1 6])
% B4= 'baf'
Пример 2
Аналогично можно индексировать и двухмерные массивы
A = ['abc'; 'sdf'; 'kgd']
C1 = A(2,3)
% C1='f'
C2 = A(1,:)
% C2='abc'
C3 = A(:,2)
% C3=['a'; 's'; 'k']
и т. д.
3.3.3. Добавление символов
Происходит точно также как в массиве
Пример 1
A = 'abc'
>> A(5) = 'f'
A=
abc f
Из примера видно, что пропущенные символы заполняются
пробелами
Пример 2
Объединение строк
A = 'abc'
B = 'sdf'
C = [A B]
% C = 'abcsdf'
3.3.4. Удаление символов
Для удаления символов можно использовать или пустые одинарные кавычки или пустые квадратные скобки.
155
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.3. Строки
Пример
A = 'abc'
>> A(1) = ' '
A=
bc
В строке А удален первый символ
B = 'abcghd'
>>B(3:5) = []
B=
abd
3.3.5. Библиотечные функции, связанные со строками
Приведем здесь наиболее часто используемые функции, связанные со строками (подробно – Часть 3 Справочника по функциям общего пользования).
Пояснение
Так как компьютер работает только с числами, то каждому
символу соответствует определенное число (код). Компьютер работает с этими кодами, а на экране коды типа char показываются
в виде символов в соответствии с кодовой таблицей. На каждый
символ во внутреннем представлении типа char отводится по 2
байта. Существует множество кодовых таблиц. В MatLab символы представлены в кодировке ASCII Unicode. В Windows используется однобайтовая кодировка ASCII (а точнее кодовая страница
1251). Однако для чисел и для букв латинского алфавита коды
совпадают.
Для преобразования символов в числовой код можно воспользоваться любым целым форматом — uint8, intl6, uintl6, int32,
uint32. Однако типы int8 или uint8 не могут вывести все коды
двухбайтовой кодировки (в частности коды русских букв)
Пример 1
int8('A') = 65 int8('B') = 66 ... int8('Z') = 90
int8('a') = 97 int8('b') = 98 ... int8('z') = 122
Однако для русских букв получаем
int8('я') = 127 uint8('H') = 255
156
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.3.5. Библиотечные функции, связанные со строками
Так как код выходит за пределы допустимого однобайтового
интервала, то результат заменяется соответствующим граничным
значением, то есть код показан неверно.
Пример 2
intl6('A') = 1040 intl6('B') = 1041 i n t l 6 ( ' Я ' ) = 1 0 7 1
intl6('E') = 1025
intl6('a') = 072
intl6('я') = 1103
intl6('e') = 1105
Функция intl6 правильно выводит коды русских букв.
Обратное преобразование кодов в символы выполняет функция char.
Пример 3
Буквы латинского алфавита
char(65) = A char(66) = B
char(90) = Z
char(97) = a
char(98) = b
char 122) = z
Буквы русского алфавита
char(1040) = A char(1041) = E
char
(1071)
= Я
char(1025) = Е
char(1072) = a char(1105) = e
char(1103) = я Функции
массивов
Со строками работают многие функции числовых массивов.
1. X = length ('ABC') % X = 3
2. S = ['ABCВ'; 'fghk'];
[m, n] = size(S) % m = 2, n = 4
3. Y = repmat('A',3,2)
Y = AAA
AAA и т. д.
4.
5.
6.
Функции сравнения символьных данных
y = strcmp(S1,S2) – производит посимвольную проверку на равенство или неравенство всех элементов сравниваемых операндов S1,S2, в случае совпадения y = 1, в противном случае
y = 0.
y = strcmpi(S1,S2) – выполняет аналогичное сравнение как
выше, игнорируя разницу между кодами больших и малых
букв.
y = strncmp(S1,S2,n) – сравнивает только заданное количество
начальных символов n.
157
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.3. Строки
7.
y = strncmpi(S1,S2,n) – сочетает в себе возможности двух предыдущих функций.
Примеры 4
S1 = 'ABGH';
S2 = 'ABgh';
S3 = 'ABbc';
Сравнение на абсолютное совпадение всех символов
Y = strcmp(S1,S2) % Y = 0
Сравнение с игнорированием разницы между большими и малыми буквами
Y = strcmpi(SI,S2) % Y = 1
Сравнение на абсолютное совпадение первых 2 символов
Y = strncmp(Sl,S2,2)
%Y=1
Функции поиска и замены
Y = strfind(S1,S2) предназначены для поиска всех вхождений
строки S2 в строку S1. Результат поиска – это номер символа, начиная с которого строка S2 начинает совпадать с частью
строки S1. В случае нескольких совпадений результат – числовой массив типа double, каждый элемент которого определяет
индекс символа, с которого обнаружено очередное вхождение.
В случае не совпадения возвращается пустой массив.
9. Y = findstr(S1,S2) аналогична предыдущей но порядок строк
S1,S2 не имеет значения. Меньшая строка ищется в большей
строке.
10. Y = strrep(Str1, Str2, Str3) предназначена для поиска в строке
Str1 всех вхождений заданной цепочки символов Str2 и замены каждой из них новым значением Str3. Если поиск не увенчался успехом, то функция strrep возвращает строку Str1.
Пример 5
Sl = 'AB';
S2 = 'CABG';
S3 = 'DABABK';
Y = findstr(S1,S2) % Y = 2. Порядок операндов роли
не играет
Y = findstr(S2,S1) % Y = 2. Порядок операндов роли
не играет
Y = strfind(S1,S2) % Y = []. Порядок операндов важен
8.
158
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.3.5. Библиотечные функции, связанные со строками
Y = strfind(S2,SI) % Y = 2. Порядок операндов важен
Y = findstr(S3,S1) % Y = [2 4] Множественное вхождение
Пример 6
S = 'AB57AB39';
Y = strrep(S,' AB', 'GGG') % Y = 'GGG57GGG39'
Y = strrep(S, 'AC', 'ABCD') % Y = 'AB57AB39' строка таже
Функции преобразования строк и чисел
11. S = num2str(Y) – преобразует число Y в строку символов S,
причем оставляет в дробной части не более четырех символов.
S = num2str(Y, n) – преобразует число Y в строку символов S.
Оставляет в дробной части n-1 символов.
12. S = int2str(Y) – преобразует целое число Y в строку символов
S. Если число Y дробное, то функция сначала округляет число
до целого а затем преобразует.
Пример 7
S = num2str(pi)
% Возвращает только четыре
символа после запятой
S = 3.1416
% Строка
>>whos
Name
Size
Bytes Class Attributes
S
1x6
12 char
Из таблицы видно, что S не число, а строка символов.
S = num2str(pi,10)
% Возвращает 10-1 символов
после запятой
S = 3.141592654
% Строка
S = int2str([0.5 1.8 4.3])
% S=[0 2 4]
Функции обратного преобразования
13. Y = str2double(S) преобразует строку символов S в число Y.
В строке могут быть использованы все допустимые знаки:
цифры, точка, плюс или минус, буква е, предшествующая порядку числа, запятые, разделяющие число тысяч, буквы i или
j, символизирующие мнимую часть комплексного числа.
14. Y = str2num(S) – аналогична предыдущей, но позволяет преобразовать числовые данные, представленные элементами символьного массива.
159
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.4. Структуры
Пример 8
Y = str2double('3.14159265')
Y = 3.1415
Y = str2double('le6')
Y = 1000000
S = ['1 2' ; '3 4']
Y = str2num(S)
Y= 1 2
3 4
Получился массив чисел 2х2.
3.4. Структуры
Структуры – это массивы с именными полями. Структура
может объединять элементы различных типов (строки, числовые
массивы, массивы ячеек, структуры, объекты). Общий вид структуры A следующий.
A=
<имя_поля1>| <значение1>
<имя_поля2>| <значение2>
<имя_поля3>| <значение3>
..……………………и т. д.
3.4.1. Создание структур
1.
2.
Структура может быть создана двумя способами:
с использованием операторов присвоения,
с использованием функции struct.
1. Использование операторов присвоения
Чтобы сформировать простейшую структуру 1×1, надо присвоить значения соответствующим полям. Обращение к полям структуры (индексация) выполняется с помощью оператора точка (см.
ниже).
Пример 1
pat.name = 'John Doe';
160
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.4.1. Создание структур
pat.bil = 127;
pat.test = [1 2; 3 4];
Вызовем полученную структуру в командное окно
>> pat
pat =
name : 'John Doe'
bil
: 127
test : [2x2 double]
Таким образом, получена структура pat размера 1×1.
Пример 2
Расширим структуру до размера 1×2.
pat (2).name = 'Ann Lanc'
pat (2).bil = 28.5
pat (2).test = [5 6; 7 8]
Вызовем полученную структуру в командное окно
>>pat =
1x2 struct array with fields:
bil
test
name
Подобным образом можно расширять структуру и дальше, создавая массив структур.
2. Использование функции struct
Функция struct имеет вид.
pat = struct ('<имя_поля1>', <значение1>, '<имя_поля2>',
<значение>, …)
Пример 3
pat = struct ('name', 'John Doe', 'bil', 127, 'test', [1 2; 3 4])
В результате будет создана структура pat, как выше в примере 1. Расширим структуру до размера 1×2.
pat (2) = struct ('name', 'Ann Lanc', 'bil', 28.5, 'test', [5 6; 7 8])
В результате будет создана структура pat как выше в примере 2.
Замечание
Полями структуры в свою очередь может быть структура
1. создадим ее по первому способу
pat.tt.s1 = [7 8; 9 6]
161
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.4. Структуры
pat.tt.s2 = [1 1; 3 1]
т.е. в структуре pat содержится структура tt с полями s1 и s2.
2. создадим ее по второму способу
pat = struct ('name', 'John Doe', 'tt', struct ('s1', [7 8; 9 6], 's2',
[1 1; 3 1])
3.4.2. Добавление и удаление полей структуры
1. Для введения нового поля достаточно просто присвоить новому полю значение.
Пример 4
Для структуры pat 1×2 (см. выше) достаточно сделать
присвоение
pat (1).bb = 20.
При этом не присвоенные поля bb получат значение пустого
массива, т.е. pat (2).bb будет равно пустому массиву.
2. Для удаления полей из структур предназначена функция
rmfield. Для удаления поля 'name' из структуры pat надо применить следующую команду
pat = rmfield (pat, 'name')
3.4.3 Индексация структур
Рассмотрим примеры обращения к элементам структуры раt
размером 1×2 из примера 2.
Пример 5
b = pat (1).test (1, 2)
%b=2
b = pat (1).tt.s1 (2, 2)
%b=6
и т. д.
Замечание
Как и при работе с многомерными массивами, здесь можно выделять блоки аналогичным образом.
3.4.4. Замечание по использованию структур
1.
162
Запись в виде
>>[pat.bil]
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.4.5. Функции, связанные со структурами
ans =
128
28.5
означает массив всех значений поля bil в структуре pat.
2. Организация одних и тех же данных в структуре может быть
различной. Рассмотрим запись изображения состоявшего
из 128×128 точек, причем для каждой точки указаны яркости трех цветов: красного (RED), зеленого (GREEN) и синего
(BLUE), т.е. заданы три матрицы цвета.
RED = [0.1 0.9…;
GREEN = [0.7 0.6…;
BLUE = [0.6 0.5…;
0.7 0.6…;
0.2 0.3…;
0.3 0.4…;
…………
………..
………..
…………]
………..]
……….]
При этом данные в массиве можно организовать двумя
способами
a) матричная организация
A.r = RED
A.g = GREEN
A.b = BLUE
В этом подходе удобно выделять целые массивы для отображения и фильтрации и выполнять другие функции над
изображением;
b) поэлементная организация
for i=1:128
for j=1:128
B(i, j).r = RED (i, j)
B(i, j).g = GREEN (i, j)
B(i, j).b = BLUE (i, j)
end
end
При такой организации структуры удобно работать с отдельными точками. Какой из подходов реализовать в конкретном случае зависит от решаемой задачи.
3.4.5. Функции, связанные со структурами
Приведем здесь наиболее часто используемые функции, связанные со структурами (подробно – Часть 3 Справочника по функциям общего пользования).
163
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5. Массивы ячеек
1.
s = struct ('<имя_поля1>', <значение>, '<имя_поля2>',
<значение>,…)
В результате создается структура s.
2. s = rmfield (s, '<поле>')
В результате в структуре s будет удалено поле с именем
'<поле>'.
3. n = fieldnames (s)
Функция возвращает все поля структуры s с их значениями.
4. k = isstruct (s)
Функция возвращает k=1, если s – структура и 0 в противном
случае.
5. k = isfield (s, '<поле>')
Функция возвращает k=1, если в структуре s есть поле с именем '<поле>'.
6. F = getfield (s, '<поле>') эквивалентно F = S.поле
7. s = setfield (s, '<поле>', V) эквивалентно s.поле = V.
3.5. Массивы ячеек
Массив ячеек – это массив, в котором элементами являются
ячейки. Они могут содержать любые типы данных: числовые матрицы, строки, структуры и массивы ячеек.
3.5.1. Создание массивов ячеек
1.
2.
3.
4.
Массив ячеек может быть создан 4 способами, используя:
конструктор массива ячеек,
оператор присвоения,
функцию cell,
функцию cat.
1. Использование конструктора массива ячеек
Фигурные скобки являются конструктором (создателем) массива ячеек, подобно тому, как квадратные скобки являются конструктором числовых массивов.
Пример 1
A = {[1 2; 3 4].'Test'; 3+7i 1:10}
Создан двумерный массив ячеек.
164
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5.1. Создание массивов ячеек
Ячейка также может быть массивом ячеек
A = {[1 2 3] {'Ann' 1+3i}; 15 'Bad'}
Создан двумерный массив ячеек, одна из ячеек которого в свою
очередь является массивом ячеек.
2. Использование оператора присвоения
Здесь возможны два способа указания элементов.
а) индексацией ячеек. Если мы хотим извлечь ячейку с её содержимым, то ее индекс пишется в круглых скобках. Эта индексация называется индексацией ячеек;
б) индексацией содержимого. Если мы хотим извлечь только
содержимое ячейки, то ее индекс пишется в фигурных скобках.
Эта индексация называется индексацией содержимого.
Пример 2 (индексация ячеек)
A (1, 1) = {[1 2; 3 4]};
A (1, 2) = {'Test'};
A (2, 1) = {3+7i};
A (2, 2) = {1:10i}
В результате создан двумерный массив ячеек
A = [2×2 double]
'Test'
3.00+7.00i
[1×10 double]
Замечание
Обозначение {} соответствует пустому массиву ячеек, точно так
же, как [] соответсвует пустому числовому массиву.
Пример 3 (индексация содержимого)
A {1, 1} = [1 2; 3 4];
% Справа присваивается только
содержимое
A {1, 2} = 'Test';
A {2, 1} = 3+7i;
A {2, 2] = 1:10;
Создан тот же двумерный массив.
Замечание
MatLab генерирует ошибку, если имя массива ячеек совпадает
с именем числового массива.
3. Использование функции cell
Функция cell создает шаблон массива ячеек, заполняя его пустыми ячейками.
165
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5. Массивы ячеек
B = cell (2, 3)
B = [] [] []
[] [] []
Далее, используя оператор присвоения, можно заполнить
ячейки.
B {1, 3} = 1:3 и т. д.
Можно также создавать вложенные массивы ячеек.
B {1, 2} = cell (2, 2)
Вложение можно сделать и с использованием конструктора.
4. Использование функции cat
Для формирования многомерных массивов ячеек также можно использовать функцию cat.
Пример 4
A {1, 1} = 'Name';
A {1, 2} = [2 4; 1 5];
A {2, 1} = 2-4i;
A {1, 2} = 7;
B {1, 1} = 'Name2';
B {1, 2} = [3 5];
B {2, 1} = 0:3i;
B {1, 2} = 3;
C = cat (3, A, B) – в результате будет сформирован трехмерный
массив ячеек, объединяя массивы A, B вдоль 3-й размерности.
Замечание
C = [A B] – создается массив ячеек 2×4 (объединение вдоль 1-й
размерности)
C = [A; B] – создается массив ячеек 4×2
Замечание
Можно создать массив ячеек, содержащих структуры.
Пример 5
st = cell (1, 2)
st{1}.lab = 12;
st{1}.obs = [1 2; 3 4];
st{2}.xd = [2 3; 4 5];
st{2}.yd = [5 7 8];
st{2}.zd = 3 + I;
166
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5.2. Добавление и удаление ячеек
Создан массив из двух ячеек, в каждой из которых находится
структура.
3.5.2. Добавление и удаление ячеек
1. Для добавления столбца (строки) достаточно присвоить значение ячейки с индексом, выходящим за пределы массива.
Пример 6
A = {[1 2] 'Test'; 3+7i 1:10}
% массив ячеек 2×2.
Присвоение
A {1, 3} = 5; приведет к массиву ячеек 2×3. При этом ячейки,
которым не присвоено значение, будут пустыми
A = [1×2 double]
'Test'
5
[3+7i]
[1×10 double]
[ ] – пустая ячейка
2. Для удаления столбца (строки) массива ячеек достаточно
присвоить пустую числовую матрицу.
Пример 7
A (2,:) = [ ]
A=
[1×2 double]
'Test'
5
удалена вторая строка в массиве ячеек А.
Замечание
Таким образом, при удалении ячеек фигурные скобки вообще
не применяются в операторах присваивания.
3.5.3. Индексация массива ячеек
При индексации также можно использовать либо индексацию
ячеек, либо индексацию содержимого.
1. Индексация ячеек
Индексация ячеек используется для извлечения из массива ячеек: ячейки, строки, столбца или блока ячеек вместе
с содержимым.
Пример 8
A = {1 2 3; 4 5 6; 7 8 9}
B = A (2:3, 2:3)
B = [5] [6]
[8] [9]
167
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5. Массивы ячеек
2. Индексация содержимого
Индексация содержимого используется для извлечения из ячеек их содержимого, а также целых списков значений (см. ниже).
Пример 9
A = {[1 2; 3 4] {[5 2; 7 3] 'Test'; [2-4i 5] {1 7 [ ]}}}
Данный массив ячеек имеет 3 уровня вложенности. Извлечем
содержимое из разных уровней вложенности.
>>B = A {1, 1}
B= 1
2
3
4
C = A {1, 1} (2, 2)
% C =4
D = A {1, 2} {1, 1} (1, 1)
% D=5
и т. д.
3.5.4. Список значений
Если из серии ячеек извлечь содержимое, то оно образует список значений.
Пример 10
A=
{[1 2],
'Test',
3+2i,
17};
A {:} =
[1 2]
'Test'
3+2i
17
Список значений непосредственно получить и использовать
нельзя т.к. он содержит разные типы данных. Список значений
используется:
1. как список входных переменных в функциях;
2. как список выходных переменных в функциях;
3. как список в квадратных скобках при формировании массива;
4. как список в фигурных скобках при формировании массива
ячеек;
5. как список операций вывода на экран терминала.
Пример 11
Пусть задан массив ячеек
C {1} = [ 1 2 3];
C {2} = [1 0 1];
C {3} = 1 : 5;
C {4} = [9 8 7];
C {5} = 3;
168
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5.4. Список значений
Используем списки значений из данного массива ячеек в следующих случаях.
1. Как список входных переменных функции
d=conv(C {1:2}) % свертка векторов (для полиномов)
2. Как список выходных переменных функции
[D{1:2}] = eig ([1 2 3; 4 5 6; 7 8 9])
D=
[3×3 double] [3×3 double]
Пояснение
Библиотечная функция eig(А) находит собственные векторы
и собственные значения матрицы А.
D{1} – собственные векторы матрицы
D{2} – собственные значения матрицы
3. Формирование численного массива
B = [C{1:2}]
% B = [1 2 3 1 0 1] – численный массив
B = [C{1}; C{2}]
В= 1
2
3
1
0
1
В результате сформирован двухмерный численный массив
4. Формирование массива ячеек
B = {C{:}}
При этом массив ячее. В будет полностью совпадать с массивом ячеек С.
5. Как список операций вывода в командное окно
C {2 : 4}
ans = 1 0 1
ans = 1 2 3 4 5
ans = 9 8 7
Замечание
Списки значений могут быть получены и из структур. Списки
значений для структур – это объединение одноименных полей.
169
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5. Массивы ячеек
S.name =
S(1).name
S(2).name
…
S(end).name
Списки значений для массива ячеек – это объединение содержимого ячеек.
C {:} =
C{1}
C{2}
…
C {end}
Можно выделять списком и часть полей и часть содержимого
ячеек
S (m:n).name
C{m:n}
3.5.5. Преимущество использования массива ячеек
Когда требуется доступ одновременно к нескольким полям,
лучше использовать массивы ячеек. Например, если данные организованы в виде структуры TEST, то для обращения к двум полям
требуется два оператора присвоения.
newd = TEST.meas
name = TEST.name
Если данные организованы в виде массива ячеек TEST, то для
обращения к двум полям требуется всего один оператор установления соответствия
[newd, name] = deal (TEST {1:2}) % (см. ниже)
3.5.6. Функции, связанные с массивами ячеек
Функции создания и отображения массива ячеек
C = cell (m, n, p…) создает шаблон массива ячеек
сelldisp (C) выводит на экран содержания всех ячеек массива
ячеек С (если просто написать С без точки с запятой, то выводится краткое содержание. Например, для массивов только
размер).
3. сellplot (C) выводит графическое изображение массива ячеек.
4. [Y1, Y2, Y3 …] = deal (X)
[Y1, Y2, Y3 …] = deal (X1, X2, X3…)
В первом случае серии массивов Y1, Y2, Y3 … присваивается
массив Х. Во втором случае одним равенством делается серия присвоений Y1 = X1, Y2 = X2, Y3 = X3…, что значительно быстрей.
1.
2.
170
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5.6. Функции, связанные с массивами ячеек
Данную функцию очень полезно применять при работе со списками в следующих случаях:
1. Присваивается всем полям структуры S один массив
[S.field] = deal (X)
Если структура S ещё не существует, то надо использовать
оператор
[S (1:m).field] = deal (X)
для указания, сколько полей надо создать в структуре S
2. То же и для массива ячеек
[Y{:}] = deal (X)
[Y{1:m}] = deal (X)
3. Копирование между структурами и массивами ячеек
[X{:}] = deal (A.field)
[X(1:m)] = deal (A.field)
[A.field] = deal (X{:})
[A (1:m).field] = deal (X{:})
4. Копирование содержимого массива ячеек или полей в отдельные переменные
[Y1, Y2, Y3 …] = deal (X{:})
[Y1, Y2, Y3 …] = deal (A.field)
Преобразование между различными типами данных
1. C = cellstr (S)
Функция преобразует массив строк S в массив ячеек С.
Пример 1
S = ['abcg'; 'defg'; 'filh'] – задан массив строк 3×4
С = cellstr (S) – получится массив ячеек 3×1
Обратное преобразование
D = [C{1}; C{2}; C{3}]
2. C = num2cell (A) – преобразует числовой массив А в массив
ячеек, размещая каждый элемент массива А в отдельной ячейке.
C = num2cell (A, dims) – все элементы по размерности dims будут помещаться в одну ячейку.
Пример 2
A = [1 2; 3 4]
C = num2cell (A, 2);
celldisp (C);
ans{1} = 1 2
ans{2} = 3 4
171
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Проектные задания по модулю 3
Обратное преобразование
D = [C{1}; C{2}]
3. S = cell2struct (C, fields, dim) – функция преобразует массив
ячеек С в массив структур S, объединяя в одно поле данные вдоль
размерности dim. (field – это массив строк или массив строковых
ячеек)
Пример
C = {'tree', 37 , 'bir'};
f = {'cat', 'heig', 'name'};
s = cell2struct (C, f, 2);
s=
cat: 'tree'
heig: 37
name: 'bir'
4. C = struct2cell (S) – преобразует массив структур S размера
m×n (с р-полями) в массив ячеек С размера р×m×n.
5. k = iscell (C) – возвращает 1, если С – массив ячеек, в противном случае возвращает нуль.
Проектные задания по модулю 3
Задание 1
Продемонстрировать на примерах все приемы удаления (строк,
столбцов, блоков, элементов и т. д.) в матрице.
Задание 2
Продемонстрировать на примерах все приемы индексации
матрицы.
Задание 3
Продемонстрировать на примерах все приемы создания
матрице.
Задание 4
Продемонстрировать на примерах все приемы расширения
и объединения матриц.
Задание 5
Продемонстрировать на примерах все приемы создания строк
и массивов строк.
172
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Проектные задания по модулю 3
Задание 6
Продемонстрировать на примерах все приемы индексации
строк и массивов строк.
Задание 7
Продемонстрировать на примерах все приемы удаления элементов строк и массивов строк.
Задание 8
Продемонстрировать на примерах все приемы расширения
и объединения строк и массивов строк.
Задание 9
Продемонстрировать на примерах все приемы удаления (строк,
столбцов, блоков, элементов и т. д.) в массиве ячеек.
Задание 10
Продемонстрировать на примерах все приемы индексации
массива ячеек.
Задание 11
Продемонстрировать на примерах все приемы создания массива ячеек.
Задание 12
Продемонстрировать на примерах все приемы расширения
и объединения массива ячеек.
Задание13
Продемонстрировать на примерах все приемы создания структур и массивов структур.
Задание 14
Продемонстрировать на примерах все приемы индексации
структур и массивов структур.
Задание 15
Продемонстрировать на примерах все приемы удаления элементов структур и массивов структур.
Задание 16
Продемонстрировать на примерах все приемы расширения
и объединения структур и массивов структур.
Задание 17
Продемонстрировать на примерах использование списка
значений.
173
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 3
Задание 18
Продемонстрировать на примерах использование целочисленных типов данных.
Задание 19
Продемонстрировать на примерах использование логического
типа данных.
Задание 20
Продемонстрировать на примерах преобразование между различными типами данных.
Задание 21
Продемонстрировать на примерах использование векторов
при индексации элементов массива.
Задание 22
Продемонстрировать на примерах использование операции
«двоеточие» при индексации элементов массива.
Тесты рубежного контроля модуля 3
1.
2.
3.
4.
174
Сколько байтов отводится под число в типе данных double?
a) 2;
b) 4;
c) 6;
d) 8.
Сколько байтов отводится в типе данных char?
a) 2;
b) 4;
c) 6;
d) 8.
Сколько байтов отводится под число в типе данных single?
a) 2;
b) 4;
c) 6;
d) 8.
Сколько байтов отводится под число в типе данных sparse?
a) 2;
b) 4;
c) 6;
d) 8.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 3
5.
Сколько байтов отводится под число в типе данных single?
a) 2;
b) 4;
c) 6;
d) 8.
6. Сколько байтов отводится под число в типе данных int8?
a) 2;
b) 4;
c) 6;
d) 8.
7. Сколько байтов отводится под число в типе данных logical?
a) 2;
b) 4;
c) 6;
d) 1.
8. Сколько байтов отводится под число в типе данных int32?
a) 2;
b) 4;
c) 6;
d) зависит от размера массива.
9. Сколько байтов отводится под число в типе данных cell?
a) 2;
b) 4;
c) зависит от размера массива;
d) 8.
10. Какой конструктор используется при создании числовых
массивов?
a) одинарные кавычки;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
11. Какой конструктор используется при создании массивов
ячеек?
a) одинарные кавычки;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
175
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 3
12. Какой конструктор используется при создании строк?
a) одинарные кавычки;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
13. Какой конструктор используется при создании структур?
a) struct;
b) string;
c) фигурные скобки;
d) cell.
14. Какая матрица используется для удаления элементов
массива?
a) нулевая;
b) пустая;
c) единичная;
d) отрицательная.
15. Какой символ используется для индексации полей структур?
a) точка;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
16. Какой символ используется для индексации элементов
массива?
a) точка;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
17. Какой символ используется для индексации ячеек массива
ячеек?
a) точка;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
18. Какой символ используется для индексации содержимого массива ячеек?
a) точка;
b) круглые скобки;
c) фигурные скобки;
176
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Тесты рубежного контроля модуля 3
d) квадратные скобки.
19. Какой символ используется для индексации символов
строки?
a) точка;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
20. Какой символ используется для объединения массивов?
a) точка;
b) круглые скобки;
c) фигурные скобки;
d) квадратные скобки.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
1.
2.
3.
4.
5.
6.
Потёмкин В. Г. Вычисления в среде MatLab. – М.: ДИАЛОГМИФИ, 2004. – 720 с.
Кетков Ю. Л., Кетков А. Ю., Шульц М. М. Matlab 7: программирование численных методов. – СПб.: БХВ-Петербург,
2005. – 752 с.
Лазарев Ю. Моделирование процессов и систем в Matlab. –
СПБ.: Питер; Киев: Издательская группа BHV, 2005. – 512 с.
Никитина Н. Ш. Математическая статистика для экономистов. – М.: ИНФРА-М; Новосибирск: Изд-во НГТУ,
2001. – 170 с.
Ануфриев И. Е., Смирнов А. Б., Смирнова Е. Н. MatLab 7. – СПб.:
БХВ-Петербург, 2005. – 1104 с.
Дьяконов В. П. MatLab 6.5 SP1/7.0 Основы применения. –
М.: СОЛОН-Пресc, 2005. – 800 c.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Содержание
ВВЕДЕНИЕ.......................................................................... 3
МОДУЛЬ 1. ВОЗМОЖНОСТИ ПАКЕТА MATLAB...................... 4
1.1. Какой язык программирования выбрать?........................... 4
1.2. Пакет MatLab................................................................. 8
1.2.1. Место пакета MatLab среди пакетов для
математических и научных расчетов..................... 8
1.2.2. Использование пакета MatLab для
решенияэкономических задач.............................14
1.2.3. Возможности пакета MatLab.............................. 17
1.2.4. Библиотеки общего назначения MatLab................20
1.2.5. Инструменты MatLab.........................................21
1.2.6. Связи MatLab....................................................23
1.2.7. Программы внедрения.......................................24
1.2.8. Прикладные библиотеки MatLab.........................25
1.3. Пакет визуального программирования Simulink................ 31
1.3.1. Инструменты Simulink.......................................32
1.3.2. Библиотеки блоков Simulink...............................34
1.4. Интерфейс MatLab........................................................ 35
1.5. Как изучать пакет MatLab.............................................. 50
Проектные задания по модулю 1........................................... 51
Тест рубежного контроля модуля 1.........................................52
МОДУЛЬ 2. ЯЗЫК ПРОГРАММИРОВАНИЯ MATLAB............ 56
2.1. Работа в командном окне............................................... 56
2.2. Программирование в пакете MatLab................................ 59
2.3. Правила написания программ......................................... 60
2.4. Операции в MatLab........................................................ 63
2.4.1. Арифметические операции................................ 63
2.4.2. Операции отношения........................................ 70
2.4.3. Логические операции.........................................72
2.4.4. Операция формирования массивов.......................74
2.4.5. Приоритет различных операций MatLab.............. 76
2.4.6. Операции побитовой обработки.......................... 77
2.4.7. Операции обработки множеств........................... 77
2.5. Операторы MatLab........................................................ 77
2.5.1. Операторы цикла.............................................. 77
2.5.2. Оператор условия if...........................................84
2.5.3. Оператор переключатель switch.......................... 86
179
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2.5.4. Оператор прерывания break............................... 89
2.5.5. Оператор возврата в вызывающую функцию........ 89
2.6. М-файлы..................................................................... 90
2.6.1. М-сценарии..................................................... 90
2.6.2. М-функции...................................................... 91
2.6.3. Структура М-функции...................................... 92
2.6.4. Выполнение М-функций.................................... 95
2.6.5. Поиск М-функций............................................ 97
2.6.6. Подфункции.................................................... 98
2.6.7. Частные каталоги............................................. 99
2.6.8. Работа с М-функциями..................................... 100
2.7. Переменные MatLab..................................................... 100
2.7.1. Локальные переменные.................................... 101
2.7.2. Глобальные переменные................................... 101
2.7.3. Сохраняемые переменные................................. 103
2.7.4. Специальные переменные................................. 104
2.8. М-функция с произвольным числом входных
и выходных аргументов................................................ 105
2.8.1. Список аргументов.......................................... 107
2.9. Обработка ошибок и предупреждений в М-функциях........ 111
2.9.1. Функция eval ('try', 'catch').............................. 111
2.9.2. Блок try…catch…end........................................ 111
2.10. Вывод на экран ошибок и предупреждений.................... 114
2.11. Функции вычисления строковых выражений................. 115
2.11.1. Вычисление строк.......................................... 115
2.11.2. Дуальность команд MatLab............................. 117
2.11.3. Вычисление функций по заданному имени........ 117
2.11.4. Ввод информации с клавиатуры....................... 118
2.12. Структурное программирование................................... 119
2.12.1. Обзор методов программирования.................... 119
2.12.2. Метод структурного программирования............ 122
2.13. Методы повышения эффективности обработки М-файлов.127
2.13.1. Векторизация циклов..................................... 127
2.13.2. Предварительное размещение массивов............ 127
2.13.3. Удаление ненужных переменных и функций
из памяти и ее дефрагментация......................... 129
Проектные задания по модулю 2.......................................... 129
Тесты рубежного контроля модуля 2..................................... 132
МОДУЛЬ 3. ОСНОВНЫЕ ТИПЫ ДАННЫХ MATLAB............. 136
3.1. Иерархия типов данных в MatLab.................................. 136
180
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.1.1. Тип char......................................................... 137
3.1.2. Тип double...................................................... 137
3.1.3. Тип sparse...................................................... 138
3.1.4. Тип single....................................................... 139
3.1.5. Целочисленные типы данных в MatLab.............. 140
3.1.6. Тип logical...................................................... 142
3.1.7. Создание массивов из данных разного типа......... 143
3.2. Числовые массивы (тип double)...................................... 144
3.2.1. Пустые массивы.............................................. 144
3.2.2. Общие сведения о массивах............................... 145
3.2.3. Создание многомерных массивов....................... 146
3.2.4. Индексация массивов....................................... 148
3.2.5. Добавление строк и столбцов............................. 149
3.2.6. Удаление строк и столбцов................................ 150
3.2.7. Использование массивов в функциях................. 151
3.2.8. Библиотечные функции, связанные с массивами. 152
3.3. Строки....................................................................... 154
3.3.1. Создание строк................................................ 154
3.3.2. Индексация строк. .......................................... 155
3.3.3. Добавление символов....................................... 155
3.3.4. Удаление символов.......................................... 155
3.3.5. Библиотечные функции, связанные со строками.. 156
3.4. Структуры.................................................................. 160
3.4.1. Создание структур........................................... 160
3.4.2. Добавление и удаление полей структуры............ 162
3.4.3 Индексация структур........................................ 162
3.4.4. Замечание по использованию структур............... 162
3.4.5. Функции, связанные со структурами................. 163
3.5. Массивы ячеек............................................................ 164
3.5.1. Создание массивов ячеек.................................. 164
3.5.2. Добавление и удаление ячеек............................ 167
3.5.3. Индексация массива ячеек............................... 167
3.5.4. Список значений............................................. 168
3.5.5. Преимущество использования массива ячеек...... 170
3.5.6. Функции, связанные с массивами ячеек............. 170
Проектные задания по модулю 3.......................................... 172
Тесты рубежного контроля модуля 3..................................... 174
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА..................................... 178
181
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Учебное издание
Галушкин Николай Ефимович
Высокоуровневые методы
программирования:
язык программирования
MatLab
Редактор Л. В. Попова
Редактор
В. Попова
Корректор А. В.Л.
Наседкина
Компьютерная версткаА.
А.В.
Ю.
Зацаринный
Корректор
Наседкина
Дизайнер
обложки
Киреев
Компьютерная
верстка
А.А.
Ю.В.Зацаринный
Дизайнер обложки John Doe
Сдано в набор 14.02.11. Подписано в печать 10.03.11.
Сдано в набор 00.00.2011. Подписано в печать 00.00.2011.
Формат 60 × 84 1/16. Бумага офсетная. Гарнитура Школьная.
Формат 60 × 84 1/16
. Бумага офсетная. Гарнитура Школьная.
Печать офсетная. Усл. печ. л. 10,58. Уч.-изд. л. 14,5.
Печать офсетная. Усл. печ. л. 0,00. Уч.-изд. л. 0,00.
Тираж 500 (I-й завод 50) экз. Заказ № 1622.
Тираж 000 экз. Заказ № 0000.
Издательство Южного
Издательство
Южногофедерального
федеральногоуниверситета.
университета.
Отпечатано в типографии ЮФУ.
Отпечатано в типографии ЮФУ.
344090,344090,
г. Ростов-на-Дону,
пр. Стачки,
Тел.
247-80-51.
г. Ростов-на-Дону,
пр. 200/1.
Стачки,
200/1.
Тел. (863) 247-80-51
Download