Министерство образования и науки Украины Одесская национальная академия связи им. А.С.Попова ________________________________________________________________________________________________________________________ Кафедра информационных технологий Основные принципы работы в системе Matlab Методические указания к практическим и лабораторным занятиям по дисциплине «Программные пакеты проектирования телекомуникационных систем» для студентов заочной формы обучения направления бакалаврской подготовки “Телекоммуникации” Одесса 2015 УДК 004.43 План УМИ 2014 г. Рецензент: к.т.н., доцент каф. КИТ ПиВ, Флейта Ю.В. Основные принципы работы в системе Matlab: Методические указания к практическим и лабораторным занятиям по дисциплине «Программные пакеты проектирования телекомуникационных систем» / Л.Н. Буката, И.Г. Швайко. – Одесса:ОНАС им. А.С. Попова, 2014.-с.102. Для проектирования телекомукационных ситем используют различные программные пакеты. В данном методическом пособии мы рассмотрим один из таких программных пакетов – пакет Matlab. Методические указания содержат краткие теоретические сведения об основных понятиях и принципах работы в среде Matlab. В соответствии с учебным планом дисциплины «Программные пакеты» в методических указаниях также приведены индивидуальные задания для выполнения лабораторных работ и комплексного задания. Для приобретения практических навыков в пособии приведено много примеров для решения задач. Методические указания будут полезны студентам для закрепления лекционного материала, а также при самостоятельной подготовке к практическим занятиям и выполнению лабораторных работ. Методические указания предназначены для приобретения теоретических и практических знаний студентами академии, которые изучают дисциплины “Программные пакеты”, «Численные методы» и “Программирование инженерных задач”. Это пособие будет также полезным аспирантам и научным сотрудникам, которым необходимо решать научные и технические задачи с использованием среды Matlab, так как он включает в себя вычисления, визуализацию и программирование в удобной среде, где задачи и решения выражаются в форме, близкой к математической. ОДОБРЕНО на заседании кафедры информационных технологий и рекомендовано к печати. Протокол № 2 от 05.10.2014 г. ЗАТВЕРДЖЕНО методическим советом академии связи. Протокол № 10/14 от 04. 07.2014р. 4 ПРЕДИСЛОВИЕ − − − − − − Matlab – это высокопроизводительный язык для технических расчетов. Типичное использование MATLAB - это: математические вычисления; создание алгоритмов; моделирование; анализ данных, исследования и визуализация; научная и инженерная графика; разработка приложений, включая создание графического интерфейса. Цель изучения дисциплины – формирование базовых знаний и умений, необходимых для технических расчетов и решения различных инженерных задач для отрасли связи с помощью компьютера, на знакомом материале (информатики, математики, механики, физики, теории цепей) научить студента пользоваться высокоуровневыми средствами программирования и осваивать предоставленные средства. Наличие в системе возможности визуального программирования интерфейса позволяет говорить о том, что данная система является простой и практичной моделью работы с более сложными системами. Вторая важнейшая задача – самостоятельно выполняя все более сложные задания, продвинуться в понимании изученного материала, получая не только теоретические знания, но и визуальные образы изучаемых процессов и явлений. 5 1. РАБОЧАЯ СРЕДА MATLAB Чтобы запустить программу дважды щелкните на иконку . Перед Вами откроется рабочая среда, изображенная на рис. 1.1. Интерфейс MatLab многооконный и имеет несколько средств прямого доступа к различным компонентам системы. Следует обратить внимание на следующие кнопки панели инструментов: New M-file − выводит пустое окно редактора m-файлов; Open file − открывает окно для загрузки файлов Matlab; Simulink − открывает окно браузера библиотек Simulink; Help − открывает окно справки. Эти функции дублируются в очень простом меню системы MatLab. В левой части окна системы появились окна со вкладками Launch Pad/Workspace доступа к компонентам системы и вкладками текущей директории Current Directory и истории сессии History. Они обеспечивают оперативный контроль за состоянием системы. Окна интерфейса MatLab могут быть включены или отключены из пункта меню View. Вся работа организуется через командное окно (Command Window), которое появляется при запуске программы. В процессе работы данные располагаются в памяти (Workspace) в виде матриц. Рисунок 1.1 – Окно рабочей среды MatLab 6 Если в рабочей среде MatLab отсутствуют некоторые окна, приведенные на рисунке, то следует в меню View выбрать соответствующие пункты: Command Window, Command History, Current Directory, Workspase, Launch Pad. Команды следует набирать в командном окне. Символ « >> », обозначающий приглашение к вводу командной строки, набирать не нужно. Для просмотра рабочей области используют полосы прокрутки или клавиши Home, End для перемещения влево или вправо и PageUp, PageDown для перемещения вверх или вниз. Если пропала командная строка с мигающим курсором, просто нажмите Enter. Чтобы программа MatLab выполнила команду или вычислила выражение важно помнить, что набор любой команды или выражения должен заканчиваться нажатием на Enter. Простейшие вычисления Наберите в командной строке 1+2 и нажмите Enter. В результате в командном окне MatLab отражается следующее: Рисунок 1.2 – Демонстрация выполнения команды присваивания Программа MatLab сначала вычислила сумму 1+2, затем записала результат в специальную переменную ans и вывела ее значение, равное 3, в командное окно. Ниже ответа расположена командная строка с мигающим курсором, обозначающая, что MatLab готов к дальнейшим вычислениям и можно набирать новые выражения и находить их значения. Если требуется продолжить работу с предыдущим выражением, например, вычислить (1+2)/4.5, то проще всего воспользоваться уже имеющимся результатом, который хранится в переменной ans. Наберите ans/4.5 (при вводе десятичных дробей используется точка) и нажмите Enter, получается Рисунок 1.3 – Графическое представление метода главных компонент 7 Рассмотрим пример с заданными значениями: >> a=-1.3; b=0.91; c=0.75; x=2.32; k=7; >> y=sin((a–x)/c))+1e4*((a–k*x^2)/(2*b))^1/3)+… cos(k+x^2)/tan(3) – (b*c)/(a*x) >> y=-1.45e+4–2.51e4i После окончания сеанса работы с системой MatLab все ранее вычисленные переменные теряются. Чтобы сохранить в файле на диске компьютера содержимое рабочего пространства системы MatLab, нужно выполнить команду меню File \Save Workspace As … . По умолчанию расширение имени файла mat, поэтому такие файлы принято называть МАТфайлами. Теперь можно закрыть MatLab. В следующем сеансе работы для восстановления значений переменных следует открыть этот сохраненный файл при помощи подпункта Open меню File. Теперь все переменные, определенные в прошлом сеансе, опять стали доступными. Их можно использовать во вновь вводимых командах. Имена переменных должны начинаться с буквы. Знак « = » соответствует операции присваивания. Нажатие клавиши Enter заставляет систему вычислить выражение и показать результат. Если запись оператора не заканчивается символом «;», то результат выводится в командное окно, в противном случае – не выводится. Если оператор не содержит знака присваивания « = », то значение результата присваивается системной переменной ans (см. рис. 1.2). Информация об использованных переменных в течение текущего сеанса работы представлена в окне Workspace в следующих полях: − Name – имя переменной; − Value – значение переменной; − Size – размерность массива; − Bytes – объем занимаемой памяти; − Class – тип переменной (по умолчанию все числовые переменные представляются с двойной точностью - double array). Для просмотра значения любой переменной из текущего рабочего пространства системы достаточно набрать ее имя и нажать клавишу Enter. В арифметических выражениях применяются следующие знаки операций: +, - – сложение, вычитание; *– умножение; / – деление слева направо; \ – деление справа налево; ^ – возведение в степень. Система MatLab работает как с действительными, так и с комплексными числами. Перед использованием операций с комплексными числами необходимо определить переменную i = sqrt(–1) или j = sqrt(–1). При делении нуля на ноль получается NaN (не число). При вычислении, например, MatLab переходит в область комплексных чисел: 8 >> sqrt(-3.0) ans = 0 + 1.7321i При наборе комплексных чисел в командной строке можно использовать i либо j, а сами числа при умножении, делении и возведении в степень необходимо заключать в скобки: >> (2.1 + 3.2i)*2 + (4.2 + 1.7i)^2 ans = 18.9500 + 20.6800i иначе умножаться и возводиться в степень будет только мнимая часть. Для вычисления комплексно-сопряженного числа применяется апостроф, который следует набирать сразу за числом без пробела: >> 2 – 3i' ans = 2.0000 + 3.0000i Для вычисления комплексно-сопряженного выражения его необходимо заключить в круглые скобки: >> ((3.2 + 1.5i)*2 + 4.2 + 7.9i)' ans = 10.6000 – 10.9000i MatLab позволяет использовать комплексные числа в качестве аргументов встроенных элементарных функций: >> sin(2 + 3i) ans = 9.1545 – 4.1689i Система MatLab также позволяет вычислять различные математические функции, информацию о встроенных элементарных функциях можно получить соответственно по командам: >> help elfun и >> help specfun Элементарные алгебраические функции (табл. 1) имеют в качестве аргумента одно или два действительных (x, y), или одно комплексное (z) число. Таблица 1 − Элементарные алгебраические функции Функция Описание abs(z), abs(x), Вычисление модуля комплексного числа z или абсолютного значения действительного числа x angle(z) Вычисление аргумента z sqrt(z), sqrt(x) Вычисление квадратного корня чисел z и x real(z) Вычисление действительной части комплексного числа z imag(z) Вычисление мнимой части комплексного числа z round(x) Округление до целого fix(x) Округление до ближайшего целого в сторону нуля rem(x, y) Вычисление остатка от деления x на y exp(z) Вычисление е в степени x.( экспоненциальная функция) log(z) Вычисление натурального логарифма числа x log10(z) Вычисление десятичного логарифма числа x Система MatLab предоставляет возможности для вычисления тригонометрических функций переменной x (см. табл. 2). 9 Таблица 2 − Тригонометрические функции Функция Описание sin(x) Вычисление синуса cos(x) Вычисление косинуса tan(x) Вычисление тангенса asin(x) Вычисление арксинуса acos(x) Вычисление арккосинуса atan(x) Вычисление арктангенса atan2(y, x) Вычисление арктангенса по координатам точки Для вычисления математического выражения следует набрать его в соответствии с правилами MatLab. Например, необходимо вычислить значение выражения e- 2.5 (ln(11.3))0.3 sin 2.45 cos 3.78 tg3.3 В командной строке это выражение выглядит следующим образом: >> exp(-2.5) * log(11.3) ^ 0.3 - sqrt((sin(2.45 * pi) + ... cos(3.78 * pi)) / tan(3.3)) При записи длинного выражения для переноса части его на другую строчку используется троеточие (после предварительного пробела). По нажатию клавиши Enter ответ выводится в командное окно: ans = -3.2105 В приведенном выражении использованы следующие встроенные функции MatLab: вычисление экспоненты, натурального логарифма, квадратного корня и тригонометрических функций. Аргументы функций берутся в круглые скобки, имена функций набираются строчными буквами. Приоритет выполнения арифметических операций в порядке убывания следующий: возведение в степень, умножение и деление, сложение и вычитание. Для изменения этого порядка следования необходимо использовать круглые скобки. Поскольку MatLab запоминает все вводимые команды, то их можно повторно занести в командную строку без набора, а с использованием служебных клавиш , . Все расчеты в MatLab выполняются с двойной точностью, а для представления чисел на экране имеются разные форматы. Нужный формат вывода устанавливается в опциях диалогового окна Preferences, вызываемого через меню Files/Preferences либо при помощи команды format. Например, для установки длинного с плавающей точкой формата выводов результатов вычислений следует в командной строке ввести команду format long e: >> format long e >> 1.25/3.11 ans = 4.019292604501608e-001 10 Получить информацию о форматах можно с помощью команды: >> help format. Существуют следующие способы представления чисел (табл. 3). Таблица 3 − Форматы вывода на экран Формат Представление short short e rat long long e hex Число отображается с 4-мя цифрами после десятичной точки или в формате short e Число в экспоненциальной форме с мантиссой из 5-ти цифр и показателем из 3-х цифр Представление в виде рационального дробного числа Число с 16 – десятичными цифрами Число в экспоненциальной форме с мантиссой из 16-ти цифр и показателем из 3-х цифр Число в шестнадцатиричной форме Переменные в MatLab не нужно предварительно описывать, указывая их тип. Все данные хранятся в виде массивов: числовые переменные (внутренний тип numeriс), текстовые строки (char), ячейки (сеll) и структуры (struct). Двумерный массив – это матрица, одномерный – вектор, а скаляр – матрица размера 1x1. Имя переменной должно начинаться с буквы, за ней могут идти буквы, цифры и символ подчеркивания. Допустимы имена любой длины, но MatLab идентифицирует их по первым 31 символам и различает большие и малые буквы. В MatLab имеется ряд констант (табл. 4). Таблица 4 – Зарезервированные имена констант Имя Описание ans i, j pi eps realmax realmin inf NaN end Результат последней операции Мнимая единица Число Машинная точность Максимальное вещественное число Минимальное вещественное число Бесконечность Нечисловая переменная Наибольшее значение индекса размерности массива Отметим, что имя NaN (Not-a-Number) зарезервировано для результата операций 0/0, 0*inf, inf-inf и т.п. В табл.5 дано назначение специальных символов. 11 Таблица 5 − Специальные символы Символ Назначение Знак процента означает начало комментария % Пробел служит для разделения элементов матриц Запятая применяется для разделения элементов матриц и оператора , в строке ввода Точка с запятой отделяет строки матриц, а точка с запятой в конце ; оператора (команды) отменяет вывод результата на экран Двоеточие используется для указания диапазона (интервала изменения величины) и в качестве знака групповой операции над : элементами матриц Круглые скобки применяются для задания порядка выполнения математических операций, а также для указания аргументов () функций и индексов матриц Точка отделяет дробную часть числа от целой его части, а также . применяется в составе комбинированных знаков (.*, .^, ./, .\) Три точки и более в конце строки отмечают продолжение … выражения на следующей строчке [] Квадратные скобки используются при задании матриц и векторов Апостроф указывает на символьные строки, а для включения самого апострофа в символьную строку нужно поставить два апострофа ’ подряд Для вывода в командное окно имен используемых переменных служит команда who, а более подробную информацию о переменных в виде таблицы, аналогичной таблице окна Workspace, позволяет получить команда whos. Для освобождения из памяти всех переменных используется команда clear без аргументов. Для удаления из памяти определенного перечня переменных необходимо указать их в аргументах данной функции. Например: >> clear a1 a3 >> who Your variables are: a2 Узнать о факте занятости переменной можно функцией exist, указав имя переменной в апострофах во входном аргументе: >> exist('d7') ans = 0 Если ответ – (0) – ноль, то имя этой переменной не конфликтует с зарезервированными словами MatLab. Если возвращаемое значение равно единице - такая переменная уже определена в рабочей среде. В MatLab имеется возможность записывать исполняемые команды и результаты в текстовый файл (вести журнал работы), который потом можно 12 прочитать или распечатать из текстового редактора. Для начала ведения журнала служит команда diary. В качестве аргумента команды diary следует задать имя файла, в котором будет храниться журнал работы. Набираемые далее команды и результаты их исполнения будут записываться в этот файл, например последовательность команд (рис. 1.4) производит Рисунок 1.4 – Ведение журнала с помощью команды diary следующие действия: 1. открывает журнал в файле exampl-1.txt; 2. производит вычисления; 3. сохраняет все переменные в MAT файле work-1.mat; 4. сохраняет журнал в файле exampl-1.txt в подкаталоге work корневого каталога MatLab и закрывает MatLab. Если посмотреть содержимое файла exampl-1.txt в каком-нибудь текстовом редакторе, то в файле окажется следующий текст: a1=3; a2=2.5; a3=a1+a2 a3 = 5.5000 save work-1 quit 13 Лабораторная работа № 1 Вычисление значений функций и переменных Цель работы: знакомство с работой в среде MatLab. Контрольные вопросы 1. Что такое "рабочая среда MATLAB"? 2. Какое назначение окна Command Windows? 3. С помощью какой команды устанавливается формат чисел? 4. Какое назначение служебных клавиш , ? 5. Перечислите основные системные переменные MatLab. 6. Как можно получить информацию о встроенных элементарных функциях? 7. Приведите примеры математических функций системы MatLab. 8. Как используется команда diary? 9. Какая особенность хранения переменных в файлах с расширением mat? Лабораторное задание 1. Cоздать свою папку для работы в Matlab. 2. Вызвать Matlab. 3. Установить в качестве рабочей свою папку, вместо стандартной папки Matlab\work (по умолчанию), изменив вверху содержание строки Current Directory. 4. Ознакомиться с окнами Matlab. Используя команду View, научиться удалять и добавлять окна. 5. Перейти в окно Command Windows. Вычислить: - сумму и разность любых двух чисел без присвоения значений переменным; - произведение и частное от деления любых двух чисел – с присвоением значений переменным; - проверить результаты вычислений 1/0 и 0/0. 6. Посмотреть список элементарных математических функций (Переписать в протокол названия основных элементарных функций). 7. Вычислить заданные функции (по индивидуальному заданию, (см. табл 1.1) и записать результаты вычислений в протокол). 8. Организовать сохранение протокола вашей работы в Вашей папке. 9. Посмотреть список переменных рабочей области. 10. Сохранить результаты вычислений по формулам. 11. Очистить рабочую область данных. 12. Загрузить значения переменных, сохраненных в файле. 13. Очистить командное окно. 14 Таблица 1.1 − Варианты индивидуальных заданий № 1 1 Выражение 2 y a2 b2 sin kx 10 45 k 2 tg3k sin kx bc . e kx 2 0.32 x 3 4 x b 6 y 10 sin i 0.32 x 3 b b cosia 3 10 2 xk ax3 b y tgik 10 e 3 . ( a b ) 2 ( a b) 2 4 5 6 7 8 9 10 11 12 4 2 3 y y sin 2i ln kx sin 7 y 10 4 y i 5; b 2.35; 5 c d (a c) 2 x a2 3 10 e ix c d a2 3 (a c) 2 a 25.2; x 0.1; k 2. a 1.25; d 2.5; i 5; . 10 4 a b 3 x a 2 c 3 x. coskx ax a b ln 3 e kx 2 2 2 3 b kx ax b ba abc 0.7abc 10 4 5 coskx . kx 2.4 sin 7 y sin ax a kx 2 cos kx 2 bc 10 4 3 c 2b tg 3 ax ln x a 2 10 4 c 2 y 0.47 x cos2 k 2 0.47 x 7 x 3 1.5(a b) 2 i (a x 2 ) cos7 3 y 10 a b a bc 5 ix 2 a 2 bc y ( x d )( x 2 b 2 ) 10 3 tgkn coskx . sin 5 x 2 b 2 cd 2 cosi ax d kx y 10 4 6 . 2 sin kx (a b) ( a b) 2 3 Переменные 3 a 1.3; b 2.42; c 0.83; x 1.5; k 2. a 3.5; b 0.7; i 2; x 0.8. c 0.05; x 1.35. a 0.93; b 5.61; c 0.31; x 2.5; k 2. b 0.35; a 3.5; x 1.523; k 2. a 1.7; b 1.25; c 0.3; x 2.5; k 3. a 1.3; b 0.91; c 0.75; x 2.32; k 8. c 1.52; a 2.4; x 0.29; k 3. a 2.5; b 1.35; i 3; c 0.72; x 2.75. d 1.25; b 0.75; n 4; c 2.2; x 0.32; k 2. d 0.01; b 1.25; a 4.72; i 2; x 2.25; k 3. 15 № 13 14 Выражение ( x a) 3 x 4 d 5 x a y cosk ( x a) 10 . k ( x a) 3 2.4b d 0.95; b 0.05; a 3.25; e kx c 2 y ax b ln kx 10 3 2157 . sin kx c 1.72; b 0.31; a 2.01; 4 5 15 Окончание таблицы 1.1 Переменные 2 3 1 10 4 e kx cos ( x 2 b) 9 sin 3 2 . ( x b) n y x2 b 0.4 x 16 y 3 x 2 c 2 ; x e mk ;c cos 2 m k 2 17 y arctg 3 р ; р x 2 a 2 ; x a b 18 y x3 / t 2 ; x e 19 y a sin 2 b b cos 2 a ; a 3 b c ; b x 20 y arctg 3 x 2 ; x p k ; k 21 y cos2 a sin b ; a 22 y sin 3 a cos2 x ; a c k 2 ; c arctg x 23 ye 24 y a cos x b sin x ; x 3 a b ; a t 2b 25 x pa ; t p3 a 3 p t2 x ; b x 4 m2 cos x ; x a с3 ; a sin5 b y x sin a b cos x ; a lg x ; b x p 3 26 y lg a lg b; a x 2 b 2 ; x eb N 27 y ln x t ; x t 2 p ; t p 2 M 28 y e ab ;a lg t b 2 ;t b 2 bx 29 y 3 x 2 c 2 ; x e mk ;c cos 2 m k 2 30 y x 2 3 x ; x cos2 b sin 2 a ; a b t 2 x 8.2; k 4. x 0.48; k 3. x 2.5; b 0.04; k 3; n 5. k =2 ; m =1.8 а =7 ; b =2.3 а =2 ; p =1.6 х =1.52 ; c=5 t =4.1 ; p =3 m=2 ; x=1.1 k =7.2 ; x =0.5 b =3 ; c =1.7 t = 2.2 ; b =3 х = 11 ; p = 2.6 N = 7.1 ; b =3 M = 3.8 ; p =2 b =2 ; х =1.2 k =2 ; m =1.8 b =7.1; t =2 16 2. РАБОТА С ГРАФИКОЙ СРЕДСТВАМИ MATLAB Основные теоретические сведения Одно из достоинств системы MatLab – обилие средств графики, начиная от команд построения простых графиков функций одной переменной в декартовой системе координат и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI). Для отображения функций одной переменной у(х) используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси – горизонтальная X и вертикальная Y, и задаются координаты х и у, определяющие узловые точки функции у(х). Поскольку MatLab – матричная система, совокупность точек у(х) задается векторами X и Y одинакового размера. Команда plot (X, Y) служит для построения графиков функций в декартовой системе координат, координаты точек (х, у) берутся из векторов одинакового размера Y и X. Если X или Y – матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы. Функция plot имеет различные формы, связанные с входными параметрами, например plot(y) создает кусочно-линейный график зависимости элементов y от их индексов. Если в качестве аргументов заданы два вектора, то plot(x,y) создаст график зависимости y от x. Например, для построения графика функции sin в интервале от 0 до 2π, сделаем следующее Программа построила график зависимости, который отображается в окне Figure 1 (рис. 2.1). Рисунок 2.1 – График зависимости y=f(x) построенный функцией plot(x,y) 17 Приведеный ниже пример иллюстрирует построение графиков двух функций – sin(x) и cos(x), значения которых содержатся в матрице Y, а значения аргумента x сохраняются в векторе Х: » х = [0 1 2 3 4 5]; » Y = [sin(x) cos(x)]; » plot(x, Y) На рис. 2.2 приведен график функци для этого примера. На нем четко видно,что графики складываются из отрезков. Рисунок 2.2 − Графики двух функций в декартовой системе координат Для того, чтобы функция была непрерывной линей, следует увеличить количество узловых точек, например задать x = 0 : 0.01 : 5 (рис. 2.3). Рисунок 2.3 − График непрерывной функции 18 Команда plot(y) – строит график y(n), где значения аргумента n это индексы элементов вектора y, a ось абсцисс представляет собой соответсвующий элемент. Если y содержит комплексные элементы, то выполняется команда plot(real(y), imag(y)). Пример использования команды plot(y): » х = 2*pi : 0.02*pi : 2*pi; » y = sin(x) + i*cos(3*x); » plot(y) Соответствующий график приведен на рис. 2. 4. Рисунок 2.4 − График функции, который изображает вектор y с комплексними элементами Построим график двух функций: y1 = 200 sin(x)/x; y2 = x2. Для этого создадим М-файл, который вычисляет значения этих функций: function y = myfun(x) % Вычисление двух функций % y(1) = 200 sin(x)/x, y(2) = x2. y(:,1) = 200*sin(x) . / x; y(:,2) = x . 2; Теперь построим графики этих функций в интервале [-20 20] с разбиением интервала минимум на 50 частей и так, чтобы <приращение угла> не превышало 2. Результат изображен на рис. 2.5. » fplot('myfun', [-20 20], 50, 2), grid » set(gcf,'color','white'); title('Графік функции "MYFUN"') 19 Рисунок 2.5 – График двух функций: y1 = 200 sin(x)/x; y2 = x2 Команда plot(X, Y, S) аналогична команде plot(X, Y), но тип линии графика можно задавать с помощью строковой константы S. Значениями константы S могут быть следующие символы, которые приведены в табл. 2.1. Таблица 2.1 – Задание типа линии Маркер типа линии Маркер Тип линии Непрерывная -Штриховая : Пурктирная (точками) -. Штрих-пунктирная Маркер цвета графика Маркер Цвет графика c Голубой m Фиолетовый y Желтый r Красный g Зеленый b Синий w Белый k Черный Тип проставляемой точки Маркер Тип точки . Точка + Плюс * Звездочкой о Кружком (указывается латинская буква о) х Крестиком (указывается латинская буква x) 20 Таким образом, с помощью строковой константы S можно изменять цвет линии, представлять узловые точки различными отметками (точка, окружность, крест, треугольник с разной ориентацией вершины и т. д.) и менять тип линии графика. Команда рlot(X1, Y1, S1, Х2, Y2, S2, ХЗ, Y3, S3,...) строит на одном графике ряд линий, представленных данными вида (X, Y, S), где X и Y – векторы или матрицы, a S — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. При отсутствии указания на цвет линий и точек он выбирается автоматически из таблицы цветов (белый исключается). Если линий больше шести, то выбор цветов повторяется. Рассмотрим пример построения графиков трех функций с разными стилями представления каждого из них (рис. 2.6): >> x = –2*pi : 0.1*pi : 2*pi; >> y1 = sin(x); >> y2 = sin(x).^2; >> y3 = sin(x).^3; >> plot(x, y1, '-m', x, y2, '-.+r', х, y3, '--ok') Из рисунка видно, что график функции y1 строится сплошной линией, график у2 строится пунктирной линей с маркерами в виде знака “плюс”, а график у3 строится штриховой линией с кружочками. Рисунок 2.6 − Вид трех функций на одном графике с разными стилями линий Для построения графика в полярной системе координат используется функция polar. 21 Рассмотрим пример построения графиков в полярной системе координат (рис. 2.7): phi=0:0.001:2*pi; >> z=sin(3*phi); >> polar(phi,z) 90 1 120 60 0.8 0.6 150 30 0.4 0.2 180 0 210 330 240 300 270 Рисунок 2.7 − Вид функции в полярной системе координат Трехмерные поверхности обычно описываются функцией двух переменных z(x, у). Специфика построения трехмерных графиков требует не просто задания ряда значений х и у, т. е. векторов х и у. Она требует определения для X и Y двумерных массивов – матриц. Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid записывается в следующих формах: – [X,Y,Z] = meshgrid(x, y, z) – возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков; – [X,Y] = meshgrid(x, y) — преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора х, а столбцы Y — копиями вектора у. Команда plot3(...) является аналогом команды plot(...), но относится к функции двух переменных z(x, у). Она строит аксонометрическое изображение трехмерных поверхностей и представлена следующими формами: – plot3(x, y, z) — строит массив точек, представленных векторами х, у и z, соединяя их отрезками прямых. Эта команда имеет ограниченное применение; – plot3(X, Y, Z, S) – обеспечивает построения со спецификацией стиля линий и точек; 22 – plot3(x1, y1, z1, s1, х2, у2, z2, s2,...) – строит на одном рисунке графики нескольких функций z1(x1,y1), z2(x2,y2) и т. д. со спецификацией линий и маркеров каждой из них. Наиболее наглядными являются сетчатые графики поверхностей с заданной или функциональной окраской. В названии их команд присутствует слово mesh. Имеются три группы таких команд: – mesh(X, Y, Z, C) – выводит в графическое окно сетчатую поверхность Z(X,Y) с цветами узлов поверхности, заданными массивом С; – mesh(X, Y, Z) – аналог предшествующей команды при C = Z. Ниже приводится пример применения команды mesh: >> [X, Y]=meshgrid([-3:0.15:3]); >> Z=X.^2+Y.^2; >> mesh(X, Y, Z) Рисунок 2.8 – График поверхности, созданный командой mesh(X,Y,Z) После того как график уже построен, MatLab позволяет выполнить его форматирование или оформление в нужном виде. Для установки над графиком титульной надписи используется следующая команда title('string') – установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'. Для установки надписей возле осей х, у и z используются следующие команды: xlabel('String'), ylabel('String'), zlabel('String'). 23 Рисунок 2.9 – Установка надписей с использованием команды: xlabel('String'), ylabel('String'), zlabel('String') Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда text: – text(X,Y, 'string') – добавляет в двумерный график текст, заданный строковой константой 'string', так что начало текста расположено в точке с координатами (X, Y). Если X и Y заданы как одномерные массивы, то надпись помещается во все позиции [x(i), y(i)]; – text(X,Y, Z, 'string') – добавляет в трехмерный график текст, заданный строковой константой 'string', так что начало текста расположено в позиции, заданной координатами X, Y и Z. Очень удобный способ ввода текста предоставляет команда gtext: – gtext('string') – задает выводимый на график текст в виде строковой константы 'string' и выводит на график перемещаемый мышью маркер в виде крестика. Установив маркер в нужное место, достаточно щелкнуть любой кнопкой мыши для вывода текста. Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды legend: legend(stringl, string2,…, strings) – добавляет к текущему графику легенду в виде строк, указанных в списке параметров (рис. 2.10); >> legend('график') 24 Рисунок 2.10 – График с пояснениями legend (Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos: Pos = 0 – лучшее место, выбираемое автоматически; Pos = l – верхний правый угол; Pos = 2 – верхний левый угол; Pos = 3 – нижний левый угол; Pos = 4 – нижний правый угол; Pos = -l – справа от графика. При добавлении легенды следует учесть, что порядок и количество аргументов команды legend должны соответствовать порядку вывода графиков и их количеству. Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса axis меняют эту ситуацию: –axis([XMIN XMAX YMIN YMAX]) – установка диапазонов координат по осям х и у для текущего двумерного графика; –axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) – установка диапазонов координат по осям х, у и z текущего трехмерного графика; – axis auto – установка параметров осей по умолчанию. При построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды grid позволяют задавать построение сетки или отменять это построение: –grid on – добавляет сетку к текущему графику; –grid off – отключает сетку. Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда 25 продолжения графических построений hold. Она используется в следующих формах: –hold on – обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже существующим; –hold off – отменяет режим продолжения графических построений. Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды subplot, применяемые перед построением графиков: –subplot(m, n, p) – разбивает графическое окно на m×n подокон, при этом m – число подокон по горизонтали; n – число подокон по вертикали, а р – номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам). Проиллюстрируем работу функции subplot (см рис. 2.11): >> subplot(3, 2, 1); plot (x,y); >> subplot(3, 2, 4); plot (x,y); >> subplot(3, 2, 5); plot (x,y); 1 2 3 4 5 6 Рисунок 2.11 – Работа функции subplot Было сформировано три строки и два столбца полей для вывода графиков. Обращение к каждому конкретному полю происходит с указанием его номера. Нумерация происходит слева направо и снизу вверх. 26 Лабораторная работа № 2 РАБОТА С ГРАФИКОЙ В MATLAB Цель работы: изучение основных операторов графики системы MatLab и создание программ, реализующих графический вывод Контрольные вопросы 1. С помощью какой команды осуществляется построение графиков в декартовой системе координат? 2. Для чего служит команда mesh? 3. Как осуществляется задание надписей? 4. Для чего используется команда grid? 5. Как осуществляется разбивка окна на меньшие окна? 6. Для чего используется команда hold? Лабораторное задание 1. Составить и отладить программы для вывода графиков функций f1, f2, f3 соответственно индивидуальному заданию (табл. 2.1). Вывод графиков должен быть осуществлен в одном окне, графики должны быть подписаны, отмасштабированы. Таблица 2.1 – Варианты заданий f1 f2 f3 f4 Номер варианта 1 2 3 4 5 2 sin( x) cos(x) cos(r ) / r 1 x x 2 2 x e cos2 (r ) / r x sin( x) cos(x) 3 cos(x) x 2 x 2 lg( x) cos(r 2 ) / r sin( x) x cos(r ) / r 2 x2 sin( x) x cos( r ) / r 2 sin( r 2 ) / r sin( x) * x 2 x 2 lg( x) sin( x) * x sin 2 ( x) cos2 ( x) x sin( r ) / r 2 10 sin( x) * e x sin( x) * x 2 sin( x) * x r cos(r ) / r 11 sin 2 ( x) cos2 ( x) cos(x) x 2 x 2 lg( x) r cos2 (r ) / r 12 sin 2 ( x) x 2 sin 2 ( x) x sin( x) x r cos(r 2 ) / r 13 sin( x) e x x * sin( x) 14 sin( x) cos(x) cos(x) * x 2 r cos( r ) / r 15 sin 2 ( x) sin( x) x 2 x 2 lg( x) sin( x) * x sin( x) e x x * sin( x) sin( x) x 2 x * cos(x) sin( x) x 2 7 xe x sin( x) * cos(x) 8 sin( x)e x 9 4 5 6 cos(x) * x 2 sin( x) x 2 sin 2 (r ) / r sin( r ) / r 2 r cos(r ) / r 2 2 sin 2 (r ) / r 27 2. Составить и отладить программы для вывода графика трехмерной поверхности для функции f4 ( r x y ) задания из табл. 2.1. 3. Написать файл-функцию для вычисления кусочно-заданной функции (табл. 2.2) и построить ее график. 2 2 Таблица 2.2 – Варианты заданий кусочно-заданной функции № варианта 1 1 3 Функция 2 1 x2 ,x 0 4 1 x y 2 2 x sin x , x 0 3 x 3 sin 2 (2 x) ,x 0 1 cos2 x y 2 2 x sin x , x 0 3 x № варианта 3 2 4 Функция 4 3 sin x cos2 x, x 0 y 3 1 x4 ln( x 5) , x 0 3x 2 ,x 0 2 1 x y 2x 1 ,x 0 0 . 5 x e x2 1 2 x 2 sin 2 x , x 0 y 2 x ,x 0 3 2 e 0.5 x 1 x ,x 0 y 1 3x 3 1 x 2 , x 0 5 3 sin 2 x ,x 0 y 1 x2 2 x 2 cos2 x, x 0 6 7 1 x2 , x 0 y 1 x ,x 0 3 1 e 0. 2 x 1 8 9 1 x ,x 0 2 x y 1 x ,x 0 2 cos3 x 1 x , x 1 3 2 1 x x y 4 1 cos x , x 1 3 x 1 x ,x 0 y 3 1 x2 x 2e 2 x , x 0 10 3 1 x2 , x 0 y 2 1 x sin x ,x 0 1 ex 12 2 ln(1 x 2 ), x 1 y 3 2 5 ( 1 cos x ) , x 1 14 3x 1 x 2 , x 0 y 2 x 2 cos xe , x 0 11 13 28 Окончание таблицы 2.2 1 2 x 2 sin 2 x , x 0 y 2 x ,x 0 3 2 e 0.5 x 15 1 x2 , x 0 y 1 x ,x 0 3 1 e 0. 2 x 1 16 17 1 x3 ,x 0 4 y 4 x2 2 x cos x , x 0 5 x 18 2 x2 ,x 0 4 y 1 x2 3 x sin x , x 0 3 x 19 4 ln( 1 x 2 ), x 1 y 3 2 5 ( 2 cos x ) , x 1 20 1 x2 ,x 0 4 y 1 x2 2 x sin x , x 0 3 x 21 2 x ,x 0 y 1 3x ,x 0 3 1 x 4 2 x 1 , x 0 y 1 3x ,x 0 3 2 x 9 22 1 x 1 , x 0 y 1 4x ,x 0 3 1 x 8 7 x3 ,x 0 4 y 4 x2 x sin x , x 0 5 x 3 sin 2 (2 x) ,x 0 2 y 1 cos 2x 2 x sin x , x 0 3 x 1 x2 , x 0 y 1 x ,x 0 3 1 e 0. 2 x 1 26 1 x2 , x 0 y 1 x ,x 0 3 1 e 0. 2 x 1 28 7 x2 , x 0 3 x y 3 1 e 0.2 x 2 , x 0 30 7 sin 2 (2 x) ,x 0 2 2 cos x y 2 4 x sin x , x 0 2 x 4 x3 ,x 0 4 2 x y 2 x sin x , x 0 9 x 23 25 27 29 24 29 3. ПРОГРАММИРОВАНИЕ В СРЕДЕ MATLAB. СОЗДАНИЕ И РЕДАКТИРОВАНИЕ М-ФАЙЛОВ Редактор М-файлов Самым удобным способом выполнения групп команд MatLab является использование М-файлов, в которых можно набирать команды, выполнять их все сразу или частями, сохранять в файле и использовать в дальнейшем. Для работы с М-файлами предназначен редактор М-файлов. С его помощью можно создавать собственные функции и вызывать их, в том числе и из командного окна. Пользовательские программы в MatLab оформляются в виде М-файлов, которые можно запускать из рабочей среды или из редактора. Встроенный в MatLab редактор М-файлов позволяет не только набирать текст программы, запускать ее целиком или частями, но и отлаживать алгоритм. Новый М-файл открывается по командам главного меню File/New/M-file или комбинации клавиш Ctrl+N. Новый файл открывается в окне редактора Мфайлов, которое изображено на рис.3.1. Рисунок 3.1 - Окно редактора М-файлов Вид строки и панели инструментов зависит от ширины окна. В качестве примера в редакторе можно набрать следующую программу: a1 = 3; a2 = 2.5; b1 = a1 + a2 % сложение a3 = 2.6; a4 = 1.7; b2 = a3 – a4 % вычитание Перед запуском программы ее следует сохранить по командам главного меню File/SaveAs под именем, например, Prim1.m. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню 30 Debug, или нажать клавишу F5. Но делать предварительное сохранение как отдельную операцию не обязательно. Допустимо сразу раскрыть меню Debug, в котором опция Run в этом случае заменяется опцией Save and Run, что позволяет запустить программу, предварительно сохранив ее автоматически. Таким образом, файл можно запустить сразу после редактирования (если не требуется ему присвоить новое имя) нажатием клавиши F5. Редактор позволяет выполнять часть команд файла. Например, можно выполнить первые три команды файла Prim1.m, выделив их с помощью мыши и выбрав опцию Evaluate Selection меню Text или нажав клавишу F9. Аналогично можно выполнить оставшиеся три команды примера. Редактор–отладчик m–файлов выполняет синтаксическую проверку программного кода по мере ввода текста. При этом используется следующее цветовое выделение: –ключевые слова языка программирования – синий цвет; –операторы, константы и переменные – черный цвет; - комментарии после знака % – зеленый цвет; - символьные переменные (в апострофах) – коричневый цвет; - синтаксические ошибки – красный цвет. Благодаря цветовому выделению вероятность синтаксических ошибок резко снижается. Для исключения части исполняемого кода без его удаления или в случае длинного комментария можно использовать блок комментариев, начинающийся со строки из двух символов %{ (знак процента и открывающейся фигурной скобки) и заканчивающийся строкой из двух символов %} (закрывающейся фигурной скобки и знак процента). Существующий М-файл открывается опцией File/Open рабочей среды или редактора М-файлов. Открыть файл в редакторе можно и командой edit из командной строки, указав в качестве аргумента имя файла, например, >> edit prim1.m Команда edit без аргумента открывает редактор и создает новый файл без имени. Если введена команда edit с именем несуществующего файла, то редактор воспринимает это как запрос на создание нового М-файла с указанным именем. В редакторе может быть одновременно открыто несколько файлов. MatLab позволяет менять способ отображения файлов в редакторе. По умолчанию окно Editor редактора одно, и при открытии каждого нового файла оно снабжается закладкой внизу рабочей области с именем файла. Последние пять кнопок на панели инструментов позволяют выбрать способ расположения окон с файлами в рабочей области редактора. Например, ее можно разделить по горизонтали или по вертикали. Инструменты Dock и UnDock (расположены в правой части строки меню) позволяют открыть каждый файл в своем окне редактора или, наоборот, встроить его в другое окно редактора. Для изменения настроек редактора М-файлов следует выбрать в меню File редактора или рабочей среды опцию Preferences. В левой части окна настроек отображены названия компонент, часть которых представлена 31 раскрывающимся списком, позволяющим перейти к требуемой группе свойств. Для использования редактора М-файлов без запуска MatLab расширение m в Windows должно быть ассоциировано с приложением meditor.exe. В этом случае файл откроется в редакторе по двойному нажатию мышью по имени Мфайла. Файл можно редактировать, но не выполнять. М-файлы бывают двух типов: файл-программы (файл-сценарии) (Script M-Files), содержащие последовательность команд, и файл-функции (Function M-Files), в которых описываются функции, определяемые пользователем. Файл-программы Он имеет следующую структуру: %Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями Важны следующие свойства файлов – сценариев: 1) они не имеют входных и выходных аргументов; 2) работают с данными из рабочей области; 3) в процессе выполнения не компилируются; 4) представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии. Рассмотрим следующий файл-сценарий (рис. 3.2): Рисунок 3.2 – Создание файла-сценария в MatLab Первые три строки здесь – это комментарий, остальные – тело файла. Обратите внимание на возможность задания комментария на русском языке. Знак % в комментариях должен начинаться с первой позиции строки. Необходимо отметить, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и xmах, 32 использованным в теле файла. Это следствие первого свойства файловсценариев – они работают с данными из рабочей области. Имена файловсценариев нельзя использовать в качестве параметров функций, поскольку файлы–сценарии не возвращают значений. Можно сказать, что файл–сценарий – это простейшая программа на языке программирования MatLab. Файл–программы запускаются из редактора М-файлов, из командной строки или другой файл-программы (при этом в качестве команды используется имя М-файла без расширения). MatLab выполняет следующее: 1. Проверяет, является ли введенная команда именем какой-либо из переменных, определенных в рабочей среде. Если введена переменная, то выводится ее значение. 2. Если введена не переменная, MatLab ищет введенную команду среди встроенных функций и, при положительном результате, выполняет функцию. 3. Если введена не переменная и не встроенная функция, то MatLab отыскивает М-файл с названием команды и расширением m. Если файл не найден в текущем каталоге, то MatLab просматривает каталоги, установленные в пути поиска. Если ни одно из вышеперечисленных действий не привело к успеху, то в командное окно выводится сообщение об ошибке. Узнать факт занятости имени можно по команде exist. Текущий каталог и пути поиска можно установить при помощи команд интерфейса рабочей среды. Содержимое текущего каталога отображается в окне Current Directory с одноименной вкладкой. Текущий каталог устанавливается выбором из раскрывающегося списка Current Directory на панели инструментов рабочей среды MatLab. Если в списке нет нужного каталога, то его можно добавить в диалоговом окне Browse for Folder, которое появляется после нажатия на кнопку, расположенную справа от списка. Пути поиска файлов определяются в диалоговом окне Set Patch навигатора путей (File/Set Patch). Рекомендуется хранить собственные файлы вне подкаталога toolbox основного каталога MatLab, так как эти файлы могут быть уничтожены при переустановке MatLab, а также по причине особенности использования файлов в этом подкаталоге. Действия по установке путей дублируются командами. Текущий каталог устанавливается командой cd, например >> cd c:\students\ztk21 или >> cd('c:\students\ztk21'). Для добавления каталогов в пути поиска служит команда addpath, которая по умолчанию помещает каталог в начало списка поиска, например, >> addpath c:\magisters Для добавления каталога в конец списка следует использовать параметр –end: >> addpath c:\specialists –end Результат выполнения можно проверить при помощи path, которая возвращает список каталогов, входящих в пути поиска. 33 Для удаления каталога из списка путей поиска предназначена функция rmpath: >> rmpath c:\bacalavrs или >> rmpath ('c:\ bacalavrs'). Файл-функции Файл-функции выполняют необходимые действия с входными аргументами и возвращают результат в выходных аргументах. Идентификация файла как функции выполняется установкой слова function в первой строке, т.е. заголовке функции: Структура такого модуля с одним выходным параметром выглядит следующим образом: function var = f_name(Cпиcoк_napaмeтpов) %Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями vаr=выражение Например, function f = myfun(x) f = exp(-x) * sqrt((x^2 + 1) / (x^4 + 0.1)); В заголовке функции также размещаются имя функции и списки входных и выходных аргументов. Входные аргументы записываются в круглых скобках после имени функции (в примере – это x). Выходной аргумент указывается слева от знака равенства в заголовке функции (в примере – это f). После заголовка размещается тело файл-функции – один или несколько операторов. Использовать файл-функцию можно так же, как и встроенные функции, например >> y = myfun(1.3) y= 0.2600 Каталог, в котором содержатся файл-функции, должен быть текущим, или путь к нему должен быть добавлен в пути поиска. Использование файл-функций упрощает визуализацию результатов математических действий. Например, требуется определить значение функции myfun на отрезке [0, 4]. Из командной строки это выглядит следующим образом (результат выполнения показан на рис. 3.3): >> x = 0 : 0.5 : 4; >> y = myfun(x); >> plot(x, y) 34 Рисунок 3.3– Пример использования plot Но аналогичную задачу можно решить при помощи функции fplot, которой требуется указать имя файл-функции myfun или указать на нее (с оператором @ перед именем функции) и границы отрезка для построения графика: >> fplot('myfun', [0 4]) или >> fplot(@myfun, [0 4]). Результат выполнения показан на рис. 3.4. Рисунок 3.4 – Пример использования fplot График, построенный fplot, более точно отражает поведение функции, так как алгоритм автоматически подбирает шаг аргумента, уменьшая его на участках быстрого изменения исследуемой функции. Если функция имеет несколько входных аргументов, то они размещаются в списке через запятую. Если список выходных аргументов пуст, то файл-функция не будет возвращать никаких значений. Если функция имеет несколько выходных аргументов (вектор-функция), то они добавляются через запятую в список выходных аргументов. Например, файл-функция для перевода времени, заданного в секундах, в часы, минуты и секунды: function [hour, minute, second] = hms(sec) hour = floor(sec/3600); minute = floor((sec – hour*3600)/60); 35 second = sec – hour*3600 – minute*60; При вызове файл-функции с несколькими выходными аргументами результат следует записывать в вектор соответствующий длины: >> [H, M, S] = hms(10000) H= 2 M= 46 S= 40 Файл-функции можно сопроводить комментариями. Все комментарии после заголовка и до тела функции или пустой строки выводятся в командное окно по команде help. Например: function [hour, minute, second] = hms(sec) % hms – перевод секунд в часы, минуты и секунды % [hour, minute, second] = hms(sec) % sec – число секунд % hour – число полных часов % minute – число полных минут % second – остаток секунд hour = floor(sec/3600); minute = floor((sec – hour*3600)/60); second = sec – hour*3600 – minute*60; Первая строка комментариев после заголовка функции называется H1line и используется при поиске командой lookfor. Эта команда ищет указанное слово в строках H1-line всех файл-функций в каталогах, указанных в путях поиска, в том числе, и в текущем каталоге. Для организации диалогового ввода и вывода используются следующие операторы, представленные в табл. 3.1. Таблица 3.1 – Операторы диалогового ввода/вывода Оператор Синтаксис INPUT x = input(‘<приглашение>’) DISP disp (<переменная или текст в апострофах>) Назначение Для ввода данных с клавиатуры Для вывода на дисплей Приведем простой пример диалоговой программы, которая служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r (рис. 3.5). 36 Рисунок 3.5 – Пример диалоговой программы Для организации ветвлений служат условные операторы. Конструкции условных операторов: 1) if <условие> <операторы> end Операторы (тело выражения) выполняются только в том случае, если условие истинно, если условие ложно, то тело выражения не выполняется. 2) if <условие> <операторы 1> else <операторы 2> end Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения блока операторов, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего блока, выходу из конструкции if-elseif-else и переходу к оператору, следующему за end. У последней ветви else не должно быть никакого условия. Операторы, находящиеся между else и end, работают в том случае, если все условия оказались невыполненными. Например, требуется написать файл-функцию для вычисления кусочнозаданной функции (рис. 3.6). 37 1 e 1 x , x 1; f ( x) x 2 x 2,1 x 2; 2 x, x 2. Рисунок 3.6 – Листинг программы для вычисления значения функции В системе MatLab могут применяться следующие операторы сравнения, приведенные в табл. 3.2. Таблица 3.2 – Операторы сравнения Символ Назначение < Меньше >= Больше или равно > Больше <= Меньше или равно == Равно ~= Не равно Имя функции lt ge gt le eq ne Операции (= =, ~=) проводят сравнение вещественных и мнимых частей комплексных чисел, а операции (>, <, >=, <=) – только вещественных частей. Логические операции можно записывать в виде функций (табл. 3.3). Таблица 3.3 – Логические операции Символ Назначение Имя функции & Логическое «и» and | Логическое «или» or ~ Отрицание not Результатом логических операций являются числа 0 (false) и 1(true). 38 В системе MatLab есть две разновидности операторов цикла – условный и арифметический. Для повторения операторов нефиксированное число раз используется оператор цикла с предусловием: Оператор цикла while while <условие> <операторы> end Операторы выполняются, если переменная <условие> имеет ненулевые элементы. Рассмотрим пример на вычисление суммы, похожий на пример из предыдущего пункта. Требуется найти сумму ряда для заданного x (разложение в ряд sin(x)): . Сумму можно накапливать до тех пор, пока слагаемые являются не слишком маленькими, скажем больше по модулю 10-10. Решаем задачу с применением цикла while, который работает, пока выполняется условие цикла: while условие цикла команды MatLab end Листинг файл-функции mysin, вычисляющей синус разложением в ряд: function S = mysin(x) % Вычисление синуса разложением в ряд % Использование: y = mysin(x), -pi<x<pi S = 0; k = 0; while abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10 S = S + (-1)^k*x.^(2*k+1)/factorial(2*k+1); k = k + 1; end Арифметический оператор цикла имеет следующий вид: for <имя> = <НЗ>: <Шаг>: <КЗ> <операторы> end, где <имя> – имя управляющей переменной цикла; <НЗ> – начальное значение управляющей переменной; <КЗ> – конечное значение управляющей переменной; <Шаг> – приращение значений переменной <имя> в ходе ее изменения от значения <НЗ> до значения <КЗ>. Если параметр <Шаг> не указан, по умолчанию его значение принимается равным единице. 39 При работе с циклом for допустимо использование оператора прерывания цикла break. При работе данного оператора работа цикла завершается, и управление передается на следующий после конца цикла оператор. Пример 1 – программа с циклами: сlear x1=1:0.01:pi; y1=sin(x1); k=3; x=1:0.01:pi n=length(x); n slag=1; y2=1; for i=2:k slag=slag.*(-x.^2)./((2.*i-2)*(2.*i-1)); y2=y2+slag; end; y2 [x' y1' y2'] plot(x1,y1,'r') hold on plot(x,y2,'g:') Рисунок 3.7 – Результат работы прогаммы 1 40 Пример 2 – программа с циклами: clear x1=1:0.01:pi; y1=sin(x1); k=3; x=1:0.1:pi; n=length(x); n for m=1:n slag(m)=x(m); y2(m)=x(m); for i=2:k slag(m)=slag(m).*(-x(m).^2)./((2.*i-2)*(2.*i-1)); y2(m)=y2(m)+slag(m); end; end; n2=length(y2); n2 y2; [x' y2'] plot(x1,y1,'r') hold on plot(x,y2,'g:') hold off Рисунок 3.8 – Результат работы прогаммы 2 41 Пример 3:Напишите файл-программу для вычисления суммы 10 S k 1 1 k! Алгоритм вычисления суммы использует накопление результата, т.е. сначала сумма равна нулю (S = 0), затем в переменную k заносится единица, вычисляется 1/k!, добавляется к S и результат снова заносится в S. Далее k увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/10!. Файл-программа Prim3, приведенная в следующем листинге, вычисляет искомую сумму. Листинг файл-программы Prim3 для вычисления суммы: % файл-программа для вычисления суммы % 1/1!+1/2!+ … +1/10! % Обнуление S для накопления суммы S = 0; % накопление суммы в цикле for k = 1:10 S = S + 1/factorial(k); End % вывод результата в командное окно S Набрать файл-программу в редакторе М-файлов, сохранить её в текущем каталоге в файле Prim3.m и выполнить. Результат отобразится в командном окне, так как в последней строке файл–программы S содержится без точки с запятой для вывода значения переменной S. S= 1.7183 Пример 4: табулирование с условием, интегрирование Листинг файл-программы: clear x=0:0.05:4; a=x<=2; for i=1:length(a) if a(i) y(i)=x(i); else y(i)=3.*x(i); end; end; [x' y'] figure(1) plot(x,y,'r') % вывод графика функции дифференцирование и 42 s=trapz(x,y) s2=quad(@funs,0,4,1e-4) figure(2) f1=diff(funs(x)); x1=x(1:end-1) plot(x1,f1) % вывод графика производной Рисунок 3.9 – График функции Рисунок 3.10 – График производной Ход работы программы может определяться значением некоторой переменной (переключателя) т.е. способ ветвления программы основан на использовании оператора переключения switch. Оператор switch содержит блоки, начинающиеся со слова case, после каждого case записывается через пробел, то значение переключателя, при котором выполняется данный блок. Последний блок начинается со слова otherwise, его операторы работают в том случае, когда ни один из блоков case не был выполнен. Если хотя бы один из блоков case выполнен, то происходит выход из оператора switсh и переход к оператору, следующему за end. 43 Предположим, что требуется найти количество единиц и минус единиц в заданном массиве и, кроме того, найти сумму всех элементов, отличных от единицы и минус единицы. Листинг программы содержит файл–функцию, которая по заданному массиву возвращает число минус единиц в первом выходном аргументе, число единиц – во втором, а сумму – в третьем (рис.3.11). Рисунок 3.11 – Листинг программы Для остановки программы используется оператор pause. используется в следующих формах: a) pause — останавливает вычисления до нажатия любой клавиши; b) pause(N) — останавливает вычисления на N секунд; c) pause on — включает режим отработки пауз; d) pause off — выключает режим отработки пауз. Он Оператор прерывания цикла break При организации циклических вычислений следует заботиться о том, чтобы внутри цикла не возникло ошибок. Например, пусть задан массив x, состоящий из целых чисел, и требуется сформировать новый массив y по правилу y(i) = x(i+1)/x(i). Очевидно, что задача может быть решена при помощи цикла for. Но если один из элементов исходного массива равен нулю, то при делении получится inf, и последующие вычисления могут оказаться бесполезными. Предотвратить эту ситуацию можно выходом из цикла, если текущее значение x(i) равно нулю. Следующий фрагмент программы демонстрирует использование оператора break для прерывания цикла: 44 for x = 1:20 z = x-8; if z==0 break end y = x/z end Как только переменная z принимает значение 0, цикл прерывается. Оператор break позволяет досрочно прервать выполнение циклов for и while. Вне этих циклов оператор break не работает. Если оператор break применяется во вложенном цикле, то он осуществляет выход только из внутреннего цикла. 45 Лабораторная работа № 3 ПРОГРАММИРОВАНИЕ В СРЕДЕ MATLAB Цель работы: ознакомиться с операциями отношения, логическими операциями и условными операторами, приобрести навыки их использования при разветвленных и циклических вычислениях. Контрольные вопросы 1. Как осуществляется диалоговый ввод и вывод? 2. Для чего используются условные операторы? 3. Чем отличаются файлы-сценарии от файлов?. 4. Как осуществляется диалоговый ввод и вывод? 5. Для чего используются условные операторы? 6. Чем отличаются файлы-сценарии от файлов-функций? Лабораторное задание 1. Из файла-сценария с помощью функции диалогового ввода ввести с клавиатуры все необходимые данные. Выполнить расчет с использованием условных операторов и вывести результаты в командное окно (табл. 3.1). Таблица 3.1 − Варианты заданий № Задание варианта 1 Найти сумму положительных из четырех заданных переменных. 2 Найти максимальное значение из четырех заданных переменных и вывести ее 3 Заданы четыре переменные. Наименьшую из них заменить на сумму остальных 4 Заданы четыре переменные. Подсчитать количество отрицательных и количество нулевых из них 5 Найти произведение отрицательных из четырех заданных переменных 6 Заданы две фигуры: квадрат задан длиной стороны, а круг – длиной радиуса. Определить, какая из них имеет большую площадь и во сколько 7 Заданы четыре переменные. Все отрицательные из них заменить абсолютными значениями и увеличить в 2 раза 8 Заданы четыре переменные, подсчитать количество равных нулю, положительных и отрицательных 9 Даны четыре переменные. Найти среди них переменные, наиболее близкие по значению к x 10 Заданы четыре переменные. Все положительные из них заменить отрицательными значениями, умноженными на 5 11 Найти минимальное и максимальное значения из четырех 46 заданных переменных 12 Заданы четыре значения. Определить какие из них целые 13 Заданы четыре переменные. Подсчитать количество и произведение значений, попавших в интервал [1 5]. 14 Заданы четыре переменные. Подсчитать количество отрицательных и количество нулевых из них. 15 Найти произведение отрицательных из четырех заданных переменных 2. Написать файл-функцию с использованием операторов ветвления и циклов, на основании вариантов задания, представленных в табл.3.2. Таблица 3.2 – Варианты заданий № Вход. Формируемый массив массив 1 A33 aij , i j B33 , bij 2 a ji , i j 2 A3 3 A33 4 A33 5 A33 6 A33 7 A33 Задача Сформировать массив А1 из минимальных элементов строк матрицы А и массив В1 из минимальных элементов строк матрицы В. Среди элементов А1 и В1 найти максимальный 2 B3 , bi sin( i ), i 13 Сформировать массив С – сумму элементов массивов А и В. Найти максимальное значение массивов А, В, С. B33 , bij sin( i) * sin( j ) Определить минимальные элементы в матрицах А и В (mА и mВ). Вычислить i 13, j 13. С=А*В*mА*mВ массив А1 из 2 * i 3 * j, i j, Сформировать B33 , bij максимальных элементов строк 5 * i 2 * j, иначе. матрицы А и массив В1 из максимальных элементов строк матрицы В. Упорядочить массив А1 по возрастанию, а массив В1 – по убыванию B3 , bi sin( i ) cos(i ) Определить максимальные элементы в матрице А и массиве В (mА и mВ). i 13. Вычислить С=А*В*mА*mВ B3 , bi log( 2i cos(i )), Сформировать массив А1 из средних значений элементов строк матрицы А. i 13. Упорядочить массив А1 по возрастанию, а В – по убыванию. Осуществить поэлементное умножение А1 и В строку матрицы А, B3 , bi sin(ln( i ) cos(i )), Заменить содержащую максимальный элемент, i 13. массивом В. Вычислить сумму элементов полученной матрицы 47 8 A3 1 cos(i j ), i j, Массив А упорядочить по возрастанию B33 , bij и заменить им последнюю строку 1 sin(i j ), иначе. матрицы В 9 A3 10 A33 11 A33 B3 , bi i * log(i 2 ) sin( i ),Упорядочить по возрастанию массивы А и В. Осуществить поэлементное деление i 13. упорядоченных массивов. Определить произведение элементов результирующего массива B3 , bi i * sin( j ) * log( i ) Вычислить произведение элементов матрицы А (рА) и сумму элементов i 13 матрицы В (сВ). Вычислить матрицу С=рА*сВ*А*В' Определить минимальные элементы в B3 , bi i * sin( i ) j * cos(i ) матрицах А и В (mА и mВ). Вычислить С=А*В*mА*mВ i 13, j 13. 12 A33 13 A33 14 A3 B33 , 15 A3 i cos(i j ), i j, bij j sin(i j ), иначе. i 1 3, j 1 3. B3 , 16 A33 17 A33 Сформировать массив А1 из элементов строк bi sin( 2i) cos(3i) максимальных матрицы А. Осуществить поэлементное i 13. умножение А1*В. Упорядочить массив А1 по возрастанию Заменить строку матрицы А, B3 , bi sin(ln( i) i * cos(i)) содержащую минимальный элемент, массивом В. Вычислить произведение i 13. элементов полученной матрицы B3 , Массив А упорядочить по убыванию и заменить им первую строку матрицы В Сформировать массив С – произведение элементов массивов А и В. Найти bi cos(i 2 ), i 13. максимальные и минимальные значения массивов А, В, С B3 , bi i * sin( j 2) * log( i 1Вычислить ) сумму элементов матрицы А (рА) и произведение элементов матрицы i 13 В (сВ) B3 , bi i * sin( j ) * log( i ) Вычислить произведение элементов матрицы А (рА) и сумму элементов i 13 матрицы В (сВ). 48 4. ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ В СИСТЕМЕ MATLAB Основные теоретические сведения По умолчанию все числовые переменные в MatLab считаются матрицами, так что скалярная величина есть матрица первого порядка, а векторы являются матрицами, состоящими из одного столбца или одной строки. Для ввода массивов (векторов или матриц) их элементы заключают в квадратные скобки. Так для ввода вектора-строки размером 1×3, используется следующая команда, в которой элементы строки отделяются пробелами или запятыми. При вводе вектора-столбца элементы разделяют точкой с запятой. Например, Вводить небольшие по размеру матрицы удобно прямо из командной строки. При вводе матрицу можно рассматривать как вектор-столбец, каждый элемент которого является вектор-строкой или матрицу можно трактовать как вектор строку, каждый элемент которой является вектор-столбцом. 49 Основные матричные операции При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы должно равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус, а умножение – знаком звездочка *. Введем матрицу размером 3×2 50 Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева. Возведение квадратной матрицы в целую степень производится с использованием оператора ^ Проверить полученный результат можно умножив матрицу Р саму на себя. Матричные данные размещаются в памяти последовательно по столбцам. Элементы матрицы в пределах строки отделяются пробелами или запятыми. Непосредственное задание матрицы можно осуществить несколькими способами. Например, вектор-столбец, т.е. матрица, вторая размерность которой равна единице, может быть присвоена переменной А вводом одной строки: >> A=[7+4i; 4; 3.2] % Ввод вектора-столбца A= 7.0000 + 4.0000i 4.0000 3.2000 или вводом нескольких строк >> A = [ % ввод вектора по строкам 7+4i 4 3.2]; Векторы могут быть сформированы как диапазоны – при помощи двоеточий, разделяющих стартовое значение, шаг и предельное значение. Если величина шага отсутствует, то по умолчанию его значение равно единице. В результате n:m:k будет сформирован вектор, последний элемент которого не больше k для положительного шага m, и не меньше – для отрицательного: [n, n+m,n+m+m,…] Например: >> a=1:2:5 a= 1 3 5 Задание диапазона используется также при организации цикла. В табл. 4.1 представлен некоторый набор функций для создания матриц специального вида. 51 Таблица 4.1 – Функции описания матриц Функция Описание eye(m,n) Единичная матрица размерности m×n zeros(m,n) Нулевая матрица размерности m×n ones(m,n) Матрица, состоящая из одних единиц размерности m×n rand(m,n) Возвращает матрицу случайных чисел равномерно, распределенных в диапазоне от 0 до 1, размерность m×n randn(m, n) Возвращает матрицу размерности m×n, состоящих из случайных чисел, имеющих гауссовское распределение tril(A), triu(A) Выделение нижней треугольной и верхней треугольной частей матрицы A inv(A) Нахождение обратной матрицы A det(A) Нахождение определителя (детерминанта) квадратной матрицы A Обращение к элементу матрицы производится по правилу: в круглых скобках после имени матрицы даются индексы, которые должны быть положительными целыми числами, указывающими номер строки и через запятую, номер столбца. Например, А(2,1) означает элемент из второй строки первого столбца матрицы А. Для дальнейших примеров введем матрицу 2 x 2: >> A=[1 2+5*i; 4.6 3] A= 1.0000 2.0000 + 5.0000i 4.6000 3.0000 Чтобы изменить элемент матрицы, ему нужно присвоить новое значение: >> A(2,2)=10 % Второй элемент второй строки A= 1.0000 4.6000 2.0000 + 5.0000i 10.0000 Размер матрицы можно уточнить по команде size, а результат команды size можно использовать для организации новой матрицы. Например, нулевая матрица того же порядка, что и матрица А, будет сформирована по команде >> A2=zeros(size(A)) A2 = 0 0 0 0 С помощью двоеточия легко выделить часть матрицы. Например, вектор из первых двух элементов второго столбца матрицы A задаётся выражением: 52 >> A(1:2, 2) ans = 2.0000 + 5.0000i 10.0000 Двоеточие само по себе означает строку или столбец целиком. Для удаления элемента вектора достаточно присвоить ему пустой массив – пару квадратных скобок [ ]. Чтобы вычеркнуть одну или несколько строк (столбцов) матрицы нужно указать диапазон удаляемых строк (столбцов) для одной размерности и поставить двоеточие для другой размерности. Для нахождения длины вектора можно воспользоваться также командой length. Рассмотрим примеры использования фунций описания матриц. >> A=[1 2 3 4 5 6;7 8 9 10 11 12;13 14 15 16 17 18]; >> tril(A) ans = 1 0 0 0 7 8 0 0 13 14 15 0 0 0 0 0 0 0 >> triu(A) ans = 1 2 3 4 5 6 0 8 9 10 11 12 0 0 15 16 17 18 >> A=[1 2 3 4;5 9 7 8;6 13 11 12;8 5 3 4]; Обратная матрица >> inv(A) ans = -0.0000 -0.5000 -0.3333 1.1667 -0.3333 -3.3333 0.6667 2.0417 0.2500 -0.5833 2.1667 -1.3958 0.2500 -0.2500 0.5000 -0.3125 диагональ матр >> diag(A) ans = 1 9 11 4 определитель >> det(A) ans = -48 Набор арифметических операций в MatLab для работы с матрицами состоит из стандартных операций сложения – вычитания, умножения – деления, операции возведения в степень и дополнены специальными матричными операциями (табл. 4.2). Если операция применяется к матрицам, размеры которых не согласованы, то будет выведено сообщение об ошибке. Для поэлементного выполнения операций умножения, деления и возведения в степень применяются комбинированные знаки (точка и знак операции). Например, если за матрицей стоит знак (^), то она возводится в степень, а комбинация (.^) означает возведение в степень каждого элемента матрицы. При умножении (сложении, вычитании, делении) матрицы на число соответствующая операция всегда производится поэлементно. 53 Таблица 4.2 – Знаки операций Символ Назначение +,Символы плюс и минус обозначают знак числа или операцию сложения и вычитания матриц, причем матрицы должны быть одной размерности * Знак умножения обозначает матричное умножение, для поэлементного умножения матрицы применяется комбинированный знак (.*) ' Апостроф обозначает операцию транспонирования (вместе с комплексным сопряжением), транспонирование без вычисления сопряжения обозначается при помощи комбинированного знака (.') / Левое деление \ Правое деление ^ Оператор возведения в степень, для поэлементного возведения в степень применяется комбинированный знак (.^) Проиллюстрируем различие обычного и поэлементного умножений при помощи следующего примера. Введём матрицу H размера 2х2 и матрицу D из единиц той же размерности: >> H=[0 1; 2 3], D=ones(size(H)) H= 0 1 2 3 D= 1 1 1 1 Перемножим матрицы, используя обычное умножение: >> H*D ans = 1 1 5 5 Теперь применим поэлементную операцию: >> H.*D ans = 0 1 2 3 54 Система MatLab имеет ряд функций, предназначенных для обработки данных, заданных в матричной или векторной форме (табл. 4.3). Таблица 4.3 – Функции для работы с матрицами Функция Описание size(A) Возвращает массив, состоящий из числа строк и числа столбцов матрицы. sum(A) Возвращает сумму всех элементов по столбцу mean(A) Возвращает среднее значение столбца матрицы std(A) Возвращает среднеквадратическое отклонение столбца матрицы min(A), max(A) Возвращает минимум и максимум соответственно, по столбцу матрицы sort(A) Сортирует столбец матрицы по возрастанию prod(A) Вычисляет произведение всех элементов столбцов Например, зададим значения матрицы А и вычислим суммы элементов строк S и суммы элементов столбцов S1: » A = [ 1 2 3; 4 5 6; 7 8 9 ] А=[1 2 3 4 5 6 7 8 9] » S = sum(A) % вектор сумм элементов столбцов S = [12 15 18] » S1= sum(A') % вектор сумм элементов строк S1 = [6 15 24] Так как функция mean(x) –вычисляет средние значения элементов столбцов матрицы, и если х – вектор из n елементов, то вычисляется mx = 1 n xi . Например: n i 1 » MA=mean(A) MA = [4 5 6] » MS=mean(S) S= 15 Минимальные значения столбцов матрицы, например для матрицы A : » Mn= min (A) Mn = [1 2 3] Максимальные значения вектора или элементов столбцов матрицы, например для матрицы A: 55 » Mx= max(A) Mx= [7 8 9] Сортировка по возрастанию: например: »y = [3 1 8 4 5]; »w = sort(y) w = [1 3 4 5 8] Для сортировки по убыванию запишем: »b = − sort(-y) b = [8 5 4 3 1] Символы и текстовые строки в MatLab вводятся при помощи простых кавычек. Во внутреннем представлении символы даны целыми числами. Конвертировать массив символов в числовую матрицу позволяет команда double. Обратная операция совершается по команде char. Печатаемые символы из стандартного набора ASCII представлены числами от 32 до 255. Приведем примеры для данных команд. Вначале введем строку: >> s = 'Привет' s= Привет Отметим, что для ввода русских букв следует выбрать в меню File/ Preferences/ Command Windows Font шрифт с русской кодировкой. >> h = [v + ' от MATLAB'] v= Привет от MATLAB Тот же результат получится, если вместо переменной v использовать строковую переменную s. Для перевода численных данных в строковые переменные имеется ряд команд преобразования. В табл. 4.4 приведены некоторые функции для этих и обратных операций, а полный список можно получить по команде help strfun. Таблица 4.4 – Функции работы со строковыми переменными Функция Действие Перевод числа в строку num2str Перевод целого числа в строку int2str Преобразование матрицы в строку mat2str Объединение строк в матрицу str2mat Преобразование строки в число str2num Объединение строк strcat 56 Лабораторная работа № 4 ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ В СИСТЕМЕ MATLAB Цель работы: изучение реализации средствами системы MatLab основных операций с векторами и матрицами. Контрольные вопросы 1. Как осуществляется ввод вектора–строки? 2. Как осуществляется ввод вектора–столбца? 3. Как осуществляется ввод матрицы? 4. Для чего служит команды zeros, ones, rand, eye? 5. Как определяется число строк и столбцов матрицы? 6. Какие операции служат для определения минимального и максимального элементов матрицы? Лабораторное задание 1. Описать ввод с клавиатуры векторов и матриц. Ввести: – произвольную вектор-строку (v), размерность 2; – произвольный вектор-столбец (w), размерность 2; – произвольную матрицу (m), размерности 2×2. 2. Описать команду генерации матриц специального вида. Создать: – матрицу с нулевыми элементами (m0), размерности 2×2; – матрицу с единичными элементами(m1), размерности 2×2; – матрицу с элементами, имеющими случайные значения(mr), размерности 2×2; – матрицу с единичными диагональными элементами(me), размерности 2×2. 3. Вычисление матрицы M по формуле, представленной в табл.4.1. 4. Изучение функций обработки данных: – определение числа строк и столбцов матрицы M; – определение максимального элемента матрицы M; – определение минимального элемента матрицы M; – суммирование элементов матрицы M; – перемножение элементов матрицы M. 57 Таблица 4.1 – Варианты индивидуальных заданий № № Задание варианта варианта 1 M=v*w+m+mr*me 11 2 M=m+mr*me 12 3 M=(v/m)*(mr+me) 13 4 M=w*v+mr*me 14 5 M=m*mr+me 15 6 M=m.*mr+100 16 7 M=v*w+mr–m 17 8 M=m+mr*me–10 18 9 M=m*w+mr*v' 19 10 M=m’+mr*me 20 Задание M=m*w+mr*v’ M=m*mr+w*v M=m+mr–100 M=v’+w+mr*w M=m+m1’*me’ M=(v/m)*(mr+me) M=v*mr+v*m1 M=m’+mr/100 M=10*v+w’*mr*m M=m’+mr*me 58 5. РЕШЕНИЕ УРАВНЕНИЙ, СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ Основные теоретические сведения В системе MatLab для решения систем линейных уравнений предусмотрены знаки операций / и \. Чтобы решить систему линейных уравнений вида A⋅y =B , где A – заданная квадратная матрица размером N x N, B – заданный вектор–столбец длины N, достаточно применить операцию \ и вычислить выражение A\ B . Операция \ называется левым делением матриц и, будучи примененная к матрицам A и B в виде A\B , примерно эквивалентна вычислению выражения inv(A)*B. Здесь под inv(A) понимается вычисление матрицы, обратной к матрице A. Пример решения СЛАУ: >> A=[1 -2 3 -1;2 3 -4 4;3 1 -2 -2;1 -3 7 6]; >> B=[6;-7;9;-7]; >> y=A\B y= 2.0000 -1.0000 0.0000 -2.0000 или >> y=inv(A)*B y= 2.0000 -1.0000 0.0000 -2.0000 Проверка для второй строки >> z=2*2+3*(-1)+(-4)*0+4*(-2) z= -7 >> A(2,:)*y ans = -7 Операцию / называют правым делением матрицы. Выражение A/B примерно соответствует вычислению выражения B*inv(A). Значит, эта операция позволяет решать системы линейных уравнений вида y⋅A= B . Решение уравнения F (x) = 0, или нахождение нулей функции, осуществляется с помощью функции fzero(name, x0). В качестве первого аргумента ей передается имя функции, задающей исходное уравнение, вторым аргументом служит начальное приближение к корню. Определим, в качестве 59 примера, нули функции cos(x) на отрезке от 0 до pi. В качестве начального приближения примем x0 = 1. >> x=fzero('cos', 1) x = 1.5708 Если требуется найти корень функции, отличной от стандартной (встроенной в систему MatLab) и тем самым не имеющей в рамках системы MatLab фиксированного имени, то нужно приписать некоторое имя выражению, вычисляющему функцию. Пусть, например, требуется найти корни уравнения cos(x)=x, что эквивалентно нахождению нулей функции, вычисляемой по формуле y=cos(x)−x, не имеющей в рамках системы MatLab фиксированного имени. В этом случае нужно создать Mat – функцию вида function y=MyFunction1(x) y=cos(x)-x После этого можно воспользоваться функцией fzero: >> x=fzero('MyFunction1',pi/2) x = 0.7391 Если найдено абсолютно точное значение корня, то значение функции в этой точке равно нулю. Таким образом, величина функции в приближенно найденном нуле косвенно характеризует погрешность результата. Чтобы управлять погрешностью, нужно осуществлять вызов функции fzero с тремя аргументами fzero(name, x0, tol ), где tol задает требуемую величину погрешности (ошибки). Необходимо отметить, что функция fzero находит нули только вещественнозначных функций одной вещественной переменной. Однако часто бывает необходимо найти комплексные корни вещественнозначных функций, особенно в случае многочленов. Для этой цели в системе MatLab существует специальная функция roots(p), которой в качестве аргумента передается массив коэффициентов многочлена (p). Например, для многочлена p x 4 3x 3 3x 2 3x 2 нужно сначала сформировать массив его коэффициентов (расположив по порядку убывания степени х): >> p = [ 1 -3 3 -3 2 ]: >> r = roots( p) r = 2.0000 -0.0000 +1.0000i -0.0000 –1.0000i 1.0000 В задаче о нахождении нулей функции сложным моментом является нахождение начального приближения к нулю функции, а также априорная оценка их количества. Поэтому важно параллельно с применением функций 60 типа roots или fzero визуализировать поведение искомых функций на том или ином отрезке значений аргумента. В системе MatLab имеются специальные функции для поиска минимума заданных функций. При этом возможен поиск минимума как для функции одной вещественной переменной, так и для функций многих переменных. Для функций одной переменной их минимумы разыскивает функция xmin =fmin(name, x0, x1). Здесь name представляет имя функции, у которой находятся минимумы, а x0 и x1 задают отрезок поиска. Для поиска минимума функции нескольких переменных применяется функция fmins: xmins = fmins( name, x0). Здесь name является именем функции нескольких переменных, для которой ищется минимум, а x0 – это вектор ее аргументов, с которого начинается поиск. Для иллюстративного примера создадим простую функцию двух переменных, имеющую минимумом точку (0,0). function у = MyFunc2(х) у = x(1)^2+ x(2)^2; После этого можно вызвать функцию fmins, которая приближенно находит вектор xmin координат точки минимума: >> xmin = fmins( 'MyFunc2', [1,1] ); >> xmin(1) ans =-2.1023e-005 >> xmin(2) ans =2.5484е-005 Для вычисления интегралов методом трапеций в системе MatLab предусмотрена функция trapz: Integ = trapz(х, у). Точность вычисления интеграла зависит от величины шага интегрирования: чем меньше этот шаг, тем больше точность. Вычислим простой интеграл cos(x)dx методом трапеций с шагом 0 интегрирования рi/10. >> dx = pi/10; >>х = 0:dx:pi; >> y=cos(x); >>I1 = trapz(x,y); I1 = 5.5511e-017 Обычно для достижения высокой точности требуется выполнять интегрирование с очень малыми шагами, а контроль достигнутой точности осуществлять путем сравнения последовательных результатов. При одном и том же шаге интегрирования методы более высоких порядков точности достигают более точных результатов. В системе MatLab методы 61 интегрирования более высоких порядков точности реализуются функциями: quad (метод Симпcона) и quad8 (метод Ньютона–Котеса 8-го порядка точности). Двойные интегралы в системе MatLab вычисляются с помощью специальной функции dblquad. 12 Вычислим интеграл вида ( x sin( y) y sin( x))dxdy . 01 Оформим подынтегральную mat–функцию и вызовем функцию dblquad: function z = integ(x, у) z = x.*sin(y) + y.*sin(x); >> J = dblquad( 'integ', 0, 1, 1, 2 ); J = 1.1678 Возможности встроенного пакета символьных вычислений и операции Symbolic Math Toolbox достаточно обширны, рассмотрим лишь некоторые его возможности. Символьный объект создается при помощи функции syms. Команда создает три символьные переменные х, а и b >> syms х a b Конструирование символьных функций от переменных класса sym object производится с использованием обычных арифметических операций и обозначений для встроенных математических функций. Запись формулы для выражения в одну строку не всегда удобна, более естественный вид выражения выводит в командное окно функция pretty: x2 y2 Упростим выражение , используя функцию simplify. x y Рисунок 5.1– Демонстрация работы функции pretty Рисунок 5.2– Демонстрация работы функции simplify Символьную функцию можно создать без предварительного объявления переменных при помощи sym, входным аргументом которой является строка с выражением, заключенная в апострофы: 62 Рисунок 5.3 – Демонстрация создания символьной переменной без предварительного объявления Упрощение тригонометрических, логарифмических, экспоненциальных функций и полиномов осуществляется функцией expand, формат обращения к которой имеет следующий вид: rez=expand(S), где S – символьное выражение, которое нужно упростить, rez – результат упрощения. Например: >> syms x y; >> rezl=expand(sin(x+y)) rezl = sin (x) *cos (у) +cos (x) *sin (y) С помощью функции factor можно раскладывать многочлены на простые множители, а целые числа – в произведение простых чисел. >> factor(sym('x^5 – 1') ) ans = (х-1)*(х^4+х^3+х^2+х+1) Функция subs осуществляет подстановку новых выражений для указанных символьных переменных: Рисунок 5.4 – Демонстрация работы функции subs 63 Symbolic Math Toolbox позволяет работать как с неопределенными интегралами, так и с определенными. Неопределенные интегралы от символьных функций вычисляются при помощи функции int, в качестве входных аргументов указываются символьная функция и переменная, по которой происходит интегрирование (см. рис. 5.5). Рисунок 5.5 – Демонстрация работы функции int Для нахождения определенного интеграла в символьном виде следует задать нижний и верхний пределы интегрирования в третьем и четвертом аргументах int соответственно, рис. 5.6. Рисунок 5.6 – Демонстрация работы функции int для нахождения определенного интеграла 64 Интегрирование методом трапеций Синтаксис: I = trapz(x, y) I = trapz(y) Описание: Функция I = trapz(x, y) вычисляет интеграл от функции y по переменной x, используя метод трапеций. Аргументы x и y могут быть одномерными массивами одинакового размера, либо массив Y может быть двумерным, но тогда должно выполняться условие size(Y, 1) = length(x). В последнем случае вычисляется интеграл для каждого столбца. Функция I = trapz(y) вычисляет интеграл, предполагая, что шаг интегрирования постоянен и равен единице; в случае, когда шаг отличен от единицы, но постоянен, достаточно вычисленный интеграл умножить на шаг h. Пример: Вычислим интеграл I sin(x)dx . Его точное значение равно двум. 0 Выберем равномерную сетку x = 0:pi/100:pi; y = sin(x); тогда оба интеграла I = trapz(x, y) и I = pi/100*trapz(y) дают одинаковый результат: I = 1.9998. Образуем неравномерную сетку, используя генератор случайных чисел. x = sort(rand(1,101)*pi); y = sin(x); I = trapz(x, y) I = 1.9987. Результат еще менее точен, поскольку максимальный из шагов max(diff(x)) равен 0.1810 . Перечислим еще несколько функций, часто используемых при символьных вычислениях: inv – вычисляет обратную матрицу; limit –вычисляет пределы; taylor – осуществляет разложение функций в ряд Тейлора; solve – решает алгебраическое уравнение и систему алгебраических уравнений. 65 Лабораторная работа № 5 РЕШЕНИЕ УРАВНЕНИЙ, СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ Цель работы: ознакомиться с возможностями системы MatLab в решении типовых задача алгебры и анализа, изучение встроенного пакета символьных вычислений и операций Symbolic Math Toolbox Контрольные вопросы 1. Для чего служит функция fmin? 2. Для чего служит функция fzero? 4. Перечислите основные внешние расширения системы MatLab для поиска экстремумов функций. 5. Какая функция служит для вычисления определенного интеграла? 6. Назовите функции работы с символьными переменными. Лабораторное задание 1. Составить и отладить программы для нахождения корней уравнения f1(x) = 0 и f2(x) = 0 и вывести графики функции на основании задания из табл.5.1. 2. Найти определенный интеграл для подинтегральной функции, заданной в табл. 5.2. Таблица 5.1– Варианты заданий для нахождения корней уравнения f1 ( x) – полином 3-ей f 2 ( x) № варианта степени с коэффициентами a 1 2 3 4 5 6 x 1 0 -1 4 -1 0.2e 20 2 40 cos(x) 0 2 -2 -15 10 log( x 5.5) 3 0 1 4 -1 4 100 sin( x) 0 9 -8 -70 70 cos(x) 5 0 -4 4 50 . 0.1 x 6 1 -5 4 40 60e 100 20 sin( 2 x) 7 2 -3 2 30 .x 8 3 -6 1 50 e sin( 2 x) 9 4 -9 1 70 e cos( 3 x) 10 11 12 5 -1 -2 -7 -4 -6 5 9 -7 60 60 55 60 cos(x) 15 log( x 1.5) 50 lg( x 1.5) .x 66 13 14 15 -3 -4 -5 -9 7 1 -8 8 4 75 -75 -1 100 cos(x) 20 sin( x / 2) 40 cos(x / 2) Таблица 5.2 – Варианты функций для нахождения значения интеграла Интервал интегрирования № Функция варианта начало конец интервала интервала 1 2 3 4 2 x f ( x) x e 1 -2 2 f ( x) x cos(x) 2 -2 2 f ( x) sin( x) 2 cos(x) 3 -2 2 f ( x) cos(x) (1 x 2 ) 1 4 -2 2 5 6 7 f ( x) ( x 2) 2 ln( x) f ( x) 2 x tg ( x) 8 -0.5 -1.4 -5 4.5 1.4 5 f ( x) 20 ln( x 2 1) 0.1x 3 -5 15 9 10 11 12 f ( x) x 2 e x f ( x) 2 x cos(x) f ( x) 3sin( x) cos(x) -4 -2 -2 -2 2 2 2 5 13 14 15 f ( x) 20 ln( x 2 1) 0.1x 3 f ( x) x cos(x) -1 -2 -2 1 2 2 f ( x) x 2 20 cos(x 1) f ( x) x 2 20 cos(x 1) f ( x) ( x 2) 2 ln( x) 3. Найти определенный интеграл для подинтегральной функции, заданной в табл. 5.2 с использованием пакета символьных вычислений. 67 6. АППРОКСИМАЦИЯ И ИНТЕРПОЛЯЦИЯ ДАННЫХ. МЕТОДЫ РЕШЕНИЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ Основные теоретические сведения Аппроксимацией называют описание некоторой, порой не заданной явно, зависимости или совокупности представляющих ее данных с помощью другой, более простой или более единообразной зависимости. Часто данные находятся в виде отдельных узловых точек, координаты которых задаются таблицей данных. Результат аппроксимации может не проходить через узловые точки. Для обработки данных Matlab использует различные функции интерполяции и аппроксимации данных. Одна из наиболее известных аппроксимаций — полиномиальная. В системе Matlab определены функции аппроксимации данных полиномами по методу наименьших квадратов – полиномиальной регрессии. Это выполняет функция, приведенная ниже: – polyfit(x, y, n) – возвращает вектор коэффициентов полинома р(х) степени n, который с наименьшей среднеквадратичной погрешностью аппроксимирует функцию у(х). Результатом является вектор–строка длиной n+1, содержащий коэффициенты полинома в порядке уменьшения степеней х и у равно n+1, то реализуется обычная полиномиальная аппроксимация, при которой график полинома точно проходит через узловые точки с координатами (х. у), хранящиеся в векторах х и у. В противном случае точного совпадения графика с узловыми точками не наблюдается; [p.S] = polyflt(x.y.n) – возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценивания или предсказания погрешности; [p.S] = polyf1t(x,y,n,mu) возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценивания или предсказния погрешности, но так, что происходит центрирование (нормирование) и масштабирование х, xnorm = (х - mu(l))/mu(2), где mu(l) = mean(x) и mu(2) = std(x). Центрирование и масштабирование не только улучшают свойства степенного многочлена, получаемого при помощи polyval, но и значительно повышают качественные характеристики самого алгоритма аппроксимации. Пример (полиномиальная регрессия для функции s » х=(-3:0.2:3)': y=sin(x); p=polyflt(x.y,3) р= -0.0953 0.0000 0.8651 -0.0000 »x=(-4:0.2:4)';y=sin(x); » f=polyval(p,x);plot(x.y.'o',x,f) 68 Рисунок 6.1 − Пример использования функции polyfit График аппроксимирующего полинома третьей степени на рис. 6.1 показан сплошной линией, а точки исходной зависимости обозначены кружками. К сожалению, при степени полинома свыше 5 погрешность полиномиальной регрессии (и аппроксимации) сильно возрастает и ее применение без центрирования и масштабирования становится рискованным. При полиномиальной регрессии узловые точки не ложатся точно на график полинома, поскольку их приближение к нему является наилучшим в смысле минимального среднеквадратического отклонения. Интерполяция функций Под интерполяцией обычно подразумевают вычисление значений функции f(x) в промежутках между узловыми точками. Линейная, квадратичная и полиномиальная интерполяция реализуются при полиномиальной аппроксимации. А вот для периодических (и особенно для гладких периодических) функций хорошие результаты может дать их интерполяция тригонометрическим рядом Фурье. Для этого используется следующая функция: interpft(x.n) – возвращает вектор у, содержащий значения периодической функции, определенные в п равномерно расположенных точках. Если length(x) = rr; и х имеет интервал дискретизации dx, то интервал дискретизации для у составляет dy=dx*m/n. Если X – матрица, то interpft оперирует столбцами X, возвращая матрицу Y с таким же числом столбцов, как и у X, но с n строками. Функция y=interpft(x.n.dim) работает либо со строками, либо со столбцами в зависимости от значения параметра dim. 69 Пример с использованием функции interpft(x.n): » x=0:10:y-sin(x).^3: » xl-0:0.1:10;yl=interpft(y,101); » x2=0:0.01:10;y2=sin(x2).^3; » plot(xl,yl, '--');hold on plot(x,y, 'o' ,x2,y2) Рисунок 6.2 − Пример использования функции interpft Рис. 6.2 иллюстрирует эффективность данного вида интерполяции на примере функции sin(x).^3, которая представляет собой сильно искаженную синусоиду. Исходная функция на рис. 6.2 представлена сплошной линией с кружками, а интерполирующая функция — штрих–пунктирной линией. В ряде случаев очень удобна сплайновая интерполяция и аппроксимация таблично заданных функций. При ней промежуточные точки ищутся по отрезкам полиномов третьей степени – это кубическая сплайновая интерполяция. При этом обычно такие полиномы вычисляются так, чтобы не только их значения совпадали с координатами узловых точек, но также, чтобы в узловых точках были непрерывны производные первого и второго порядков. Такое поведение характерно для гибкой линейки, закрепленной в узловых точках, откуда и происходит название spline (сплайн) для этого вида интерполяции (аппроксимации). Для одномерной табличной интерполяции используется функция interpl: –yi = interp1(x, y, xi) — возвращает вектор yi, содержащий элементы, соответствующие элементам xi и полученные интерполяцией векторов х и y. Вектор х определяет точки, в которых задано значение y. 70 –yi = interp1(x, y, xi, method) — позволяет с помощью параметра method задать метод интерполяции: –'nearest' – ступенчатая интерполяция; –'linear' – линейная интерполяция (принята по умолчанию); –'spline' – кубическая сплайн-интерполяция; –'cubic' или 'pchip' – интерполяция многочленами Эрмита. Сплайн – интерполяция используется для представления данных отрезками полиномов невысокой степени – чаще всего третьей. При этом кубическая интерполяция обеспечивает непрерывность первой и второй производных результата интерполяции в узловых точках. Реализуется сплайнинтерполяция следующей функцией: –yi = spline(x, y, xi) – использует векторы х и у, содержащие аргументы функции и ее значения, и вектор xi, задающий новые точки. Пример:Зададим синусоиду всего 10 точками и проведем интерполяцию, используя мелкую сетку. x = 0:10; y = sin(x); xi = 0:.25:10; yi = interp1(x, y, xi); plot(x, y, 'o', xi, yi, ‘g’), hold on yi = interp1(x, y, xi, ‘spline’ ); plot(x, y, 'ob', xi, yi, ‘m’), grid, hold off Решение большинства задач интерполяции и аппроксимации функций и табличных данных обычно сопровождается их визуализацией. Она, как правило, заключается в построении узловых точек функции (или табличных данных) и в построении функции аппроксимации или интерполяции (рис.6.3). В Matlab совмещение функций аппроксимации с графической визуализацией доведено до логического конца – предусмотрена аппроксимация рядом методов точек функции, график которой построен. И все это выполняется прямо в окне редактора графики Property Editor. Для этого в позиции Tools графического окна имеются две новые команды: 71 Рисунок 6.3 – Пример визуализации процесса интерполяции Basic Fitting – основные виды аппроксимации (регрессии); Команда Basic Fitting открывает окно, дающее доступ к ряду видов аппроксимации и регрессии: сплайновой, эрмитовой и полиномиальной со степенями от 1 (линейная аппроксимация) до 10. В том числе со степенью 2 (квадратичная аппроксимация) и 3 (кубическая аппроксимация) (рис.6.4). Рисунок 6.4 – Окно доступа к видам аппроксимации и регрессии Data Statistics – статистические параметры данных. 72 Команда Data Statistics открывает окно с результатами простейшей статистической обработки данных (рис.6.5). Рисунок 6.5 – Окно результатов статистической обработки Анализ поведения многих систем и устройств в динамике базируются на решении систем обыкновенных дифференциальных уравнений (ОДУ). Их, как правило, представляют в виде системы из дифференциальных уравнений первого порядка в форме Коши: dy y ; (1) dt y f ( x, y ), y (t 0 , t end ) b. где t 0 , t end – начальные и конечные точки интервалов. Параметр t не обязательно означает время, хотя чаще всего решение дифференциальных уравнений ищется во временной области. Вектор b задает начальные и конечные условия. Для решения систем ОДУ в MatLab реализованы различные методы. Их реализации названы решателями ОДУ. Решатели реализуют следующие методы решения систем дифференциальных уравнений, причем для решения жестких систем уравнений рекомендуется использовать, только специальные решатели ode45, ode23: – ode45 – одношаговые явные методы Рунге-Кутта 4-го и 5-го порядка. Это классический метод, рекомендуемый для начальной пробы решения. – ode23 – одношаговые явные методы Рунге-Кутта 2-го и 4-го порядка. Синтаксис: [t, X] = ode23(‘<имя функции>‘, t0, tf, x0) [t, X] = ode23(‘<имя функции>‘, t0, tf, x0, tol, trace) [t, X] = ode45(‘<имя функции>‘, t0, tf, x0) [t, X] = ode45(‘<имя функции>‘, t0, tf, x0, tol, trace) 73 Описание: Любая система нелинейных ОДУ может быть представлена как система дифференциальных уравнений 1-го порядка в явной форме Коши: dx f ( x, t ) , dt где x - вектор состояния; t - время; f - нелинейная вектор-функция от переменных x, t. Функции: [t, X] = ode23(‘<имя функции>‘, t0, tf, x0, tol, trace) и [t, X] = = ode45(‘<имя функции>‘, t0, tf, x0, tol, trace) интегрируют системы ОДУ, используя формулы Рунге - Кутты соответственно 2-го и 3-го или 4-го и 5-го порядка. Эти функции имеют следующие параметры: Входные параметры: ‘<имя функции>‘ − строковая переменная, являющаяся именем М-файла, в котором вычисляются правые части системы ОДУ; t0 − начальное значение времени; tfinal - конечное значение времени; x0 − вектор начальных условий; tol − задаваемая точность; по умолчанию для ode23 tol = 1.e-3, для ode45 tol = 1.e-6); trace − флаг, регулирующий вывод промежуточных результатов; по умолчанию равен нулю, что подавляет вывод промежуточных результатов; Выходные параметры: t - текущее время; X - двумерный массив, где каждый столбец соответствует одной переменной. Примеры: Рассмотрим дифференциальное уравнение 2-го порядка, известное как уравнение Ван дер Поля, x (x 2 1)x x 0 . Это уравнение может быть представлено в виде системы ОДУ в явной форме Коши: Первый шаг процедуры интегрирования - это создание М-файла для вычисления правых частей ОДУ; присвоим этому файлу имя vdpol. function xdot = vdpol(t, x) xdot = [x(2); x(2) .* (1 - x(1).^2) - x(1)]; Чтобы проинтегрировать систему ОДУ, определяемых функцией vdpol в интервале времени 0 <= t <= 20, вызовем функцию ode23: t0 = 0; tf = 20; x0 = [0 0.25]'; %Начальные условия 74 [t, X] = ode23('vdpol', t0, tf, x0); plot(t, X), grid, hold on gtext('x1'), gtext('x2') Рассмотрим простейший из известных примеров странного аттрактора аттрактор Ресслера [7]: где параметры {a, b, c} имеют значения {0.2 0.2 5.7}, а начальное условие задается следующим образом: x0 = [-0.7 -0.7 1]. Для того чтобы проинтегрировать эту систему в интервале времени 0<= t<= 20, вызовем функцию ode45: t0 = 0; tf = 20; x0 = [-0.7 -0.7 1]’.%Начальные условия [t, X] = ode45('ressler', t0, tf, x0); comet3(X(:, 1), X(:, 2), X(:, 3)). В описанных далее функциях для решения систем дифференциальных уравнений приняты следующие обозначения и правила: 75 – options — аргумент, создаваемый функцией odeset (еще одна функция позволяет вывести параметры, установленные по умолчанию); – tspan — вектор, определяющий интервал интегрирования [t0 tfinal]. Для получения решений в конкретные моменты времени t0, tl,..., tfinal (расположенные в порядке уменьшения или увеличения) нужно использовать tspan = [t0 tl ... tfinal]; – у0— вектор начальных условий; – pi, р2,.. — произвольные параметры, передаваемые в функцию F; – Т, Y — матрица решений Y, где каждая строка соответствует времени, возвращенном в векторе-столбце Т. Описание функций для решения систем дифференциальных уравнений: – [T, Y] = solver(@F,tspan,у0) — где вместо solver подставляем имя конкретного решателя — интегрирует систему дифференциальных уравнений вида у'=F(t,y) на интервале tspan с начальными условиями у0, @F — дескриптор ODE-функции. Каждая строка в массиве решений Y соответствует значению времени, возвращаемому в векторе-столбце Т; – [T, Y] = solver(@F, tspan, y0, options) — дает решение, подобное описанному выше, но с параметрами, определяемыми значениями аргумента options, созданного функцией odeset. Технология решения дифференциальных уравнений в системе MatLab такова: 1) Создание m–файла. Независимо от вида системы он имеет вид: function dy = solverDE(t, y) dy = zeros(n, 1); dy(1) = f1 (t, y(1), y(2), …, y(n)); dy(2) = f2 (t, y(1), y(2), …, y(n)); …………………………… dy(n) = fn (t, y(1), y(2), …, y(n)); 2) Получение решения и сопровождающий его график: >> [T, Y] = solver(‘solverDE’, [t0 tfinal], [y10 y20 … yn0]); >> plot(T, Y) Пусть, к примеру, требуется решить дифференциальное уравнение: y 2 y y 2 y 0 (2) с единичными начальными условиями. Данное дифференциальное уравнение второго порядка приведем к системе дифференциальных уравнений первого порядка: dy1 dt y 2 ; dy2 y3 ; dt dy3 dt 2 y3 y 2 2 y1 , (3) 76 с начальными условиями у1(0) = 1, у2(0) = 1, у3(0) = 1. Вектор dy/ dt правых частей системы уравнений вычисляем с помощью собственной функции ex21 (рис. 6.6): Рисунок 6.6 – Пример создания функции для решения системы ОДУ Теперь можно вызывать функцию ode45, находящую решение нашей системы дифференциальных уравнений с начальными условиями [1,1,1] на отрезке [0,20] (рис. 6.7) >> y0=[1 1 1 ]; >> tspan=[0 20]; >> [T,Y]=ode45('ex21',tspan,y0); >> plot(T,Y) Рисунок 6.7 – Результат работы программы Для решения дифференциальных уравнений в MatLab зарезервирована функция dsolve, которая имеет следующие форматы обращения и возвращает 77 аналитическое решение системы дифференциальных уравнений с начальными условиями: –y=dsolve( 'Dy(x)' ), где Dу(х) – уравнение; у – возвращаемые функцией dsolve решения; –y=dsolve ('Dy(x)', 'НУ'), где Dу(х) – уравнение; НУ – начальные условия. Первая производная функции обозначается Dу, вторая производная – D2у и так далее. Функция dsolve предназначена также для решения системы дифференциальных уравнений. В этом случае она имеет следующий формат обращения: – [f,g] =dsolve('Df(x),Dg(x)', 'НУ'), где Df(x) ,Dg(x) – система уравнений, НУ – начальные условия. Решить дифференциальное уравнение (2) с использованием функции dsolve (рис. 6.8). Рисунок 6.8 – Пример использования команды dsolve 78 Лабораторная работа № 6 АППРОКСИМАЦИЯ И ИНТЕРПОЛЯЦИЯ ДАННЫХ. МЕТОДЫ РЕШЕНИЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ Цель работы: изучение основных методов аппроксимации интерполяции данных в системе MatLab и способов решения ОДУ и Контрольные вопросы 1. Для чего служит функция interp1? 2. Какой функцией реализуется сплайн-интерполяция в MatLab? 3. Какие существуют методы решения систем дифференциальных уравнений? Лабораторное задание 1. С помощью интерполяции найти значение таблично заданной функции в указанной точке табл. 6.1. 2. Выполнить аппроксимацию таблично заданной функции табл. 6.1. Таблица 6.1 – Варианты заданий № Табличная функция для интерполяции и аппроксимации варианта 1 1 2 3 4 5 6 7 8 9 10 2 X Y X Y X Y X Y X Y X Y X Y X Y X Y X Y 0 1 0 -1 0 0.5 0 1 0 -2 0 -22 0 2 0 1 0 -1 0 -2 1 2.5 1 -0.5 1 1 2 4 3 8 2 -14 1 4 1 2.5 1 0 1 0 2 3 2 1 2 2.5 4 9 6 16 4 -2 2 5 2 7 2 3 2 0.82 3 5 3 5 3 5 6 13 9 25 6 6 3 6 3 14.5 3 8 3 1.46 4 5.5 4 6.5 4 8.5 8 15 12 35 10 15 4 6.5 4 25 4 15 4 2 5 7 5 9 5 9.5 10 21 15 45 16 25 5 7 5 38.5 5 24 5 2.47 6 8 6 11.5 7 15 12 23 18 52 20 35 6 7.5 6 55 6 35 6 2.9 7 9 8 15 9 17.5 14 29 21 62 25 50 7 8 7 74.5 7 48 7 3.29 79 X Y X Y X Y X Y X Y 11 12 13 14 15 0 1 0 0.5 0 -1 0 -22 0 1 1 2.5 1 1 1 0 2 -14 1 2.5 2 7 2 2.5 2 3 4 -2 2 3 3 14.5 3 5 3 8 6 6 3 5 4 25 4 8.5 4 15 10 15 4 5.5 5 38.5 5 9.5 5 24 16 25 5 7 6 55 7 15 6 35 20 35 6 8 7 74.5 9 17.5 7 48 25 50 7 9 3. На отрезке [a, b] найти решение дифференциального уравнения в виде 2 d y f ( x, y, y) с начальными условиями y(0) , y (0) . Варианты заданий dx2 представлены в табл. 6.2. Построить график функции. Таблица 6.2 – Варианты заданий № f ( x, y, y ) варианта 1 2 x 1 f e y cos(x) 2 f e x y sin( x) f y cos(x) tg ( x) 3 4 f x 3 y cos(x) Начальные условия y(0) y (0) a b 3 4 5 6 1 5 0 0 2 3 1 0 0 0 1 1 0 0 0 1 5 f e x y /(1 x) x 2 4 0 0 6 f x 2 y 1/(1 x) 1 3 0 0 7 f y cos(x) cos2 ( x) f (2 x) y arctg ( x) f (5 x) y x 1 2 0 0 f e xy 2e x 0 2 0 3 4 1.5 0 0 1 1 1 0 11 f e xy / x x -3 -2 1 1 12 f e x y /(1 x) x f (10 x) y x 2 4 0 0 1 0 5 1 1 0 1 1 0 1 0 0 8 9 10 13 14 15 f x 3 y cos(x) f y cos(x) tg ( x) 4. Решить систему ОДУ, представленную в табл. 6.3, при заданных начальных условиях с помощью функции dsolve. 80 Таблица 6.3 – Варианты заданий № варианта Система ОДУ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 u 2v u, v 4v 2u. u v 3u, v v 2u. u 2v u, v 4v 2u. u 5v, v v 2u t. u v u t , v v 2u t. u 2v u t , v 4v. u v t , v 5v 7u. u v 5u, v 2v u t. u 1/ 2 u, v 4 u t. u v t , v v 3u. u v u t , v 2v u. u 5v t , v 3v u. u v u, v v u t. u 2v u, v 4v t. u v 2t , v v 3u. Начальные условия u (0) u (0) v(0) v(0) 1.5 1.5 1 1 -1 1 -1.5 3 1.5 1.5 1 1 1 1.5 0 2 0.5 1.5 -1 2 0.5 2 1 2 5 5 -1 1 1.5 1 3 1 2 0 -1 1 -1 2 -1.5 0 1.5 1.5 -1 -1 -1 1.5 0 2 0.5 1 -1 2 0 -2 0 2 3 3 -1 1 81 7. ОСНОВНЫЕ ВОЗМОЖНОСТИ ПАКЕТА МАТЕМАТИЧЕСКОГО МОДЕЛИРОВАНИЯ SIMULINK Основные теоретические сведения Программа Simulink является приложением к пакету MatLab. При моделировании с использованием Simulink реализуется принцип визуального программирования, в соответствии с которым пользователь на экране из библиотеки стандартных блоков создает модель устройства и осуществляет расчеты. При работе с Simulink пользователь имеет возможность модернизировать библиотечные блоки, создавать свои собственные, а также составлять новые библиотеки блоков. Для запуска программы необходимо предварительно запустить пакет MatLab. Основное окно пакета MatLab показано на рис. 7.1. Там же показана подсказка, появляющаяся в окне при наведении указателя мыши на ярлык Simulink в панели инструментов. Рисунок 7.1 – Основное окно программы MatLab После открытия основного окна программы MatLab нужно запустить программу Simulink. Это можно сделать одним из трех способов: 1. Нажать кнопку (Simulink) на панели инструментов командного окна MatLab. 2. В командной строке главного окна MatLab напечатать Simulink и нажать клавишу Enter на клавиатуре. 3. Выполнить команду Open… в меню File и открыть файл модели (mdl файл). Последний вариант удобно использовать для запуска уже готовой и отлаженной модели, когда требуется лишь провести расчеты и не нужно добавлять новые блоки в модель. Использование первого и второго способов приводит к открытию окна обозревателя разделов библиотеки Simulink (рис. 7.2). 82 Рисунок 7.2 – Окно обозревателя разделов библиотеки Simulink Окно обозревателя библиотеки блоков содержит следующие элементы: 1) Заголовок, с названием окна – Simulink Library Browser. 2) Меню с командами File, Edit, View, Help. 3) Панель инструментов с ярлыками наиболее часто используемых команд. 4) Окно комментария для вывода поясняющего сообщения о выбранном блоке. 5) Список разделов библиотеки, реализованный в виде дерева. 6) Окно содержимого раздела библиотеки (список вложенных разделов библиотеки или блоков) 7) Строка состояния, содержащая подсказку по выполняемому действию. На рис. 7.2 выделена основная библиотека Simulink (в левой части окна) и показаны ее разделы (в правой части окна). Библиотека Simulink содержит следующие основные разделы: 1. Continuous – линейные блоки. 2. Discrete – дискретные блоки. 3. User–Defined Functions – функции и таблицы. 4. Math Operations – блоки математических операций. 5. Discontinuities – нелинейные блоки. 83 6. Signals Attribute, Signals Routing – сигналы и системы. 7. Sinks – регистрирующие устройства. 8. Sources – источники сигналов и воздействий. 9. Ports & Subsystems – порты и блоки подсистем. Список разделов библиотеки Simulink представлен в виде дерева, и правила работы с ним являются общими для списков такого вида: пиктограмма свернутого узла дерева содержит символ "+", а пиктограмма развернутого содержит символ "–"; для того чтобы развернуть или свернуть узел дерева, достаточно щелкнуть на его пиктограмме левой клавишей мыши. При выборе соответствующего раздела библиотеки в правой части окна отображается его содержимое (рис. 7.3). Рисунок 7.3 – Содержимое раздела Continuous Для создания модели в среде Simulink необходимо последовательно выполнить ряд действий: 1. Создать новый файл модели с помощью команды File/New/Model. Вновь созданное окно модели показано на рис. 7.4. 84 Рисунок 7.4 – Пустое окно модели 2. Расположить блоки в окне модели. Для этого необходимо открыть соответствующий раздел библиотеки (Например, Sources - Источники). Далее, указав курсором на требуемый блок и нажав на левую клавишу “мыши” – “перетащить” блок в созданное окно. Клавишу мыши нужно держать нажатой. На рис. 7.5 показано окно модели, содержащее блоки. Рисунок 7.5 – Окно модели, содержащее блоки Для измененения параметров блока необходимо дважды щелкнуть левой клавишей “мыши”, указав курсором на изображение блока. Откроется окно редактирования параметров данного блока. При задании численных параметров следует иметь в виду, что в качестве десятичного разделителя должна использоваться точка, а не запятая. После внесения изменений нужно закрыть окно кнопкой OK. После установки на схеме всех блоков из требуемых библиотек нужно выполнить соединение элементов схемы. Для соединения блоков необходимо указать курсором на “выход” блока, а затем, нажать и, не отпуская левую клавишу “мыши”, провести линию ко входу другого блока. После чего отпустить клавишу. В случае правильного соединения изображение стрелки на 85 входе блока изменяет цвет. Для создания точки разветвления в соединительной линии нужно подвести курсор к предполагаемому узлу и, нажав правую клавишу “мыши”, протянуть линию. Схема модели, в которой выполнены соединения между блоками, показана на рис. 7.6. Рисунок 7.6 – Схема модели Окно модели содержит следующие элементы (см.рис.7.6): 1. Заголовок, с названием окна. Вновь созданному окну присваивается имя Untitled с соответствующим номером. 2. Меню с командами File, Edit, View и т.д. 3. Панель инструментов. 4. Окно для создания схемы модели. 5. Строка состояния, содержащая информацию о текущем состоянии модели. Меню окна содержит команды для редактирования модели, ее настройки и управления процессом расчета, работы файлами и т.п.: a) File (Файл) – Работа с файлами моделей. b) Edit (Редактирование) – Изменение модели и поиск блоков. c) View (Вид) – Управление показом элементов интерфейса. d) Simulation (Моделирование) – Задание настроек для моделирования и управление процессом расчета. e) Format (Форматирование) – Изменение внешнего вида блоков и модели в целом. f) Tools (Инструментальные средства) – Применение специальных средств для работы с моделью (отладчик, линейный анализ и т.п.). g) Help (Справка) – Вывод окон справочной системы. Для повышения наглядности модели удобно использовать текстовые надписи. Для создания надписи нужно указать мышью место надписи и дважды щелкнуть левой клавишей мыши. После этого появится прямоугольная рамка с 86 курсором ввода. Аналогичным образом можно изменить и подписи к блокам моделей. Следует иметь в виду, что рассматриваемая версия программы (Simulink 4) не адаптирована к использованию шрифтов кириллицы, и применение их может иметь самые разные последствия: отображение надписей в нечитаемом виде, обрезание надписей, сообщения об ошибках, а также невозможность открыть модель после ее сохранения. Поэтому, применение надписей на русском языке для текущей версии Simulink крайне не желательно. Перед выполнением расчетов необходимо предварительно задать параметры расчета. Задание параметров расчета выполняется в панели управления меню Simulation/Parameters. Вид панели управления приведен на рис. 7.7. Рисунке 7.7 – Панель управления Окно настройки параметров расчета имеет четыре вкладки: Solver (Расчет) — Установка параметров расчета модели; Workspace I/O (Ввод/вывод данных в рабочую область) – Установка параметров обмена данными с рабочей областью MatLab; Diagnostics (Диагностика) – Выбор параметров диагностического режима; Advanced (Дополнительно) – Установка дополнительных параметров. Для визуализации процесса моделирования используются виртуальные регистраторы (блоки получателей информации Sinks). Каждый регистратор имеет свое окно настройки, которое появляется при активизации его пиктограммы в окне компонентов или в окне модели (рис. 7.8). 87 Рисунок 7.8 – Содержимое раздела Sinks Виртуальный осциллограф (Scope), позволяет представить результаты моделирования в виде временных диаграмм тех или иных процессов в форме, которая напоминает выполненные лучами разного цвета осциллограммы современного высокоточного осциллографа с оцифрованной масштабной сеткой. Кнопки масштабирования, позволяют (наряду с командами контекстного меню) менять размер осциллограммы. Удобной является кнопка автоматического масштабирования (Autoscale) – обычно она позволяет установить такой масштаб, при котором изображение осциллограммы имеет максимально возможный размер по вертикали и отражает весь временной интервал моделирования (рис. 7.9). Рисунок 7.9 – Окно виртуального осциллографа 88 Виртуальный графопостроитель (XY Graph) имеет входы по осям Х и Y, что позволяет строить графики функций в полярной системе координат, фигуры Лиссажу, фазовые портреты и т. д. (рис. 7.10). Рисунок 7.10 – График фигуры Лиссажу Обратите внимание на то, что в окне настройки блока сложения / вычитания можно установить вид представления блока (круглый или квадратный) и число входов с выполняемыми по ним операциями. Число входов и операции задаются шаблоном List of sign. Например, шаблон |++ означает, что блок имеет два суммирующих входа, а |+–+ — что он имеет три входа, причем средний — вычитающий, а крайние — суммирующие (рис. 7.11). Рисунок 7.11 – Окно настройки блока сложения / вычитания Для выполнения арифметических операций используется вкладка Math Operations (рис. 7.12). К числу наиболее простых математических блоков относятся блоки арифметических операций: вычисления абсолютного значения 89 числа Abs, скалярного произведения Dot Product, обычного произведения Product, а также суммы Sum. Рисунок 7.12 – Содержимое раздела Math Operations Блок Product (Умножение) предназначен для умножения и деления ряда входных сигналов. При этом операции задаются подобно тому, как это было описано для блока суммирования/вычитания с применением знаков умножения * или деления / в шаблоне. Для контроля знака служит блок Sign. Он возвращает -1 при отрицательном входном аргументе, 0 — при нулевом входном аргументе и 1 — при положительном входном аргументе. Блоки масштабирования Gain и Slider Gain служат для масштабирования данных (умножения их на заданный коэффициент — константу). В блоке Gain константа вводится в окне параметров (по умолчанию 1), а в блоке Slider Gain ее можно выбирать с помощью ползунка. Для масштабирования матричных данных служит блок Matrix Gain. 90 Блок Math Function служит для задания математических функций одной переменной u по правилам, принятым для языка программирования базовой системы MatLab. В частности, это означает, что в теле функции могут встречаться встроенные функции системы. Окно параметров этого блока содержит описание правил задания функции и раздел параметров Parameters, в котором задаются выражение для функции и длина вектора выхода. Если она должна совпадать с длиной вектора входного сигнала, то вводится значение -1 (рис. 7.13). Рисунок 7.13 – Окно параметров блока Math Function Разделы и содержание библиотеки SIMULINK Название раздела Описание раздела Continuous Блоки, работающие в непрерывном времени Discontinuous Блоки, имитирующие различные виды нелинейностей Discrete Блоки, работающие в дискретном времени Look-Up Tables Блоки таблиц Math Operations Блоки, реализующие математические операции Model Verification Блоки проверки свойств сигналов Model-Wide Utilities Утилиты, расширяющие возможности модели Ports&Subsystems Порты и подсистемы Signal Attributes Блоки задания свойств сигналов Signal Routing Блоки маршрутизации сигналов Sinks Блоки приема и отображения сигналов Sources Блоки источников сигналов User-Defined Function Функции, определяемые пользователем 91 Обзор блоков раздела Sources Практически любая модель в SIMULINK не обходится без блоков из трех разделов: Sources, Sinks и Math Operations. Ознакомимся с наиболее часто используемыми блоками из этих библиотек. Для этого создадим новую модель (рис. 7.14). Для создания блок-схемы сначала необходимо открыть раздел Sinks и перетащить в модель блок Scope, затем скопировать его 11 раз. После этого следует открыть раздел Sources, перетащить и разместить источники сигналов в модель, согласно рис. 7.14, после чего провести связи. Затем следует запустить модель нажатием на пиктограмму. Рисунок 7.14 – Знакомство с блоками раздела Sources Генерируемые блоками сигналы просматриваются путем двойного нажатия на соответствующем блоке Scope. После окончания просмотра следует сохранить модель под именем. Рисунок 7.15 – Знакомство с блоками раздела Math Operations 92 Исследование блоков раздела Continuous Практически все блоки, необходимые для создания линейных непрерывных систем, находятся в разделе Continuous библиотеки SIMULINK, исключение составляют блоки Sum, Product, Gain, которые находятся в библиотеке Math Operations. Для исследования их работы создадим блок-схему (рис. 7.16), изменим параметр в блоке Constant с 1 на 3, сохраним полученную модель под именем «pr31» и запустим. Результаты моделирования приведены в правой части рис. 7.16. Видно, что блок Derivative осуществляет операцию вычисления производной входного сигнала (выброс в момент перепада входного сигнала), блок Integrator -– интегрирование входного сигнала (линейно нарастающий сигнал), а блоки Transport Delay и Variable Transport Delay – задержку входного сигнала на постоянную и переменную величину времени. Рисунок 7.16 – Исследование блоков раздела Continuous Модель простейшей системы автоматического регулирования Рассмотрим пример работы автопилота. Система должна поддерживать заданную высоту полета самолета (1000 м) при воздействии факторов, приводящих к случайным колебаниям высоты в пределах 10 м. Для создания блок–схемы перетащим в новое окно редактора блоки Constant, Uniform Random Number, Transfer Fcn, Sum, Scope, Gain, Mux. Список параметров, которые необходимо изменить, приведены в табл. 7.1. Время моделирования установим равным 3600с, сохраним блок–схему под именем «pr32» и запустим на моделирование. Если все сделано правильно, результат будет аналогичным, приведенному на рис. 7.17. Сигнал с большим размахом – траектория движения самолета без автопилота, сигнал с меньшим размахом – траектория движения в случае работы системы автоматического регулирования. 93 Таблица 7.1 – Список изменяемых параметров блоков Блок Constant, Constant1, Constant2 Transfer Fcn, Transfer Fcn1 Uniform Random Number и Uniform Random Number1 Sum Gain Параметр Constant value Denominator MinimumMaximum List of signs Gain Новое значение 1000 [100 0] –1010 |+– 5 Рисунок 7.17 – Модель простейшей системы автоматического регулирования Рассмотрим пример построения модели с нелинейным элементом в цепи обратной связи и исследование устойчивости системы (рис. 7.18). Рисунок 7.18 − построение модели с нелинейным элементом в цепи обратной связи 94 Для построения фазового портрета для данной модели используются узел дифференцирования (du/dt) и узел отображения информации по двум координатам (XY Graph). При этом получаем следующий фазовый портрет (рис. 7.19): Рисунок 7.19 − фазовый портрет модели Таким образом, из анализа графика можно сделать вывод, что эта система является устойчивой. В разделе Simulink Extras находится дополнительная библиотека блоков Simulink. Пример: моделирование в среде Simulink колебательной системы (рис. 7.20) Рисунок 7.20 – Моделирование в среде Simulink колебательной системы 95 Блок алгебраического контура Algebraic Constraint выполняет поиск корней алгебраических уравнений. Параметры: Initial guess – начальное значение выходного сигнала. Блок находит такое значение выходного сигнала, при котором значение входного сигнала становится равным нулю. На рис. 7.21 показан пример решения системы нелинейных уравнений вида: Поскольку данная система уравнений имеет два решения, то начальные значения блоков Algebraic Constraint заданы в виде векторов. Для первого (верхнего) блока начальное значение задано вектором [1 -1], а для второго (нижнего) блока – вектором [-1 1]. Рисунок 7.21 – пример решения системы нелинейных уравнений Subtract – Math Operations. В параметрах в окошке List of Signs надо поставить те операции, которые необходимы( - +). Math Function - Math Operations. В параметрах в окошке Function надо выбрать square (чтобы был квадрат значения). Algebraic Constant - Math Operations. В параметрах в окошке Initial guess задать начальное значение вектором [1 -1] или [-1 1]. Display – Sinks. выводит результат. 96 Дифференциальные уравнения и системы уравнений Необходимо решить уравнение: Попробуем решить его с помощью программы Simulink пакета MatLab. Нам необходимо создать схему уравнения, для этого создадим обратную связь между выходными значениями интегратора и новым значением переменной. У нашего уравнения линейно изменяется x от 0 до 20. Поэтому для решения уравнения необходимо использовать блок Ramp. В конце обязательно должен быть интегрирующий блок, а из него результат выходит на осциллограф (рис. 7.22). Рисунок 7.22 – Метод решения дифференциальных уравнений Решение уравнения выглядит как показано на рис. 7.23. Результатом будет график x от y: Рисунок 7.23 – Результат решения дифференциальных уравнений 97 Рассмотрим из каких библиотек взяты использованные блоки. Ramp – из Sources. Формирует линейный сигнал. В параметрах необходимо задать 1. Add – Math Operations. В параметрах выбираем необходимые нам операции. Gain – Math Operations. Коэффициент усиления сигнала. В параметрах ставим значение 3/2. Sine Wave Function – Sources. Т.к. нам необходим косинус, то в параметрах Phase ставим pi/2. Integrator – Continuous. Выполняет интегрирование входного сигнала. Scope – Sinks. Выводим результат – график сигнала в функции времени. Дифференциальные уравнения 2-го порядка. Дана система уравнений: Решим ее с помощью программы Simulink пакета MatLab. Решаем аналогично предыдущему случаю. Рисунок 7.24 – Метод решения дифференциальных уравнений 2-го порядка В данной системе уравнений линейно изменяется x от 1 до 10. Также необходимо сделать обратную связь между выходными значениями 98 интеграторов и новым значение переменной x. Обязательно надо в интеграторах задать начальные значения y1(0) = 0.1; y2(0) = 0.5. Рисунок 7.25 – Результатом будут два графика Рассмотрим из каких библиотек взяты использованные блоки. Ramp – из Sources. Формирует линейный сигнал. В параметрах необходимо задать все значения 1. Integrator – Continuous. Выполняет интегрирование входного сигнала. Необходимо задать начальные значения Initial condition для y1 0.1, для y2 0.5. Add – Math Operations. В параметрах выбираем необходимые нам операции. Divide - Math Operations. Деление первой входной величины на вторую. Dot Product - Math Operations. Перемножение. Scope – Sinks. Выводим результат – график сигнала в функции времени. 99 Лабораторная работа №7 ОСНОВНЫЕ ВОЗМОЖНОСТИ ПАКЕТА МАТЕМАТИЧЕСКОГО МОДЕЛИРОВАНИЯ SIMULINK Цель работы: ознакомиться с возможностями пакета математического моделирования Simulink Контрольные вопросы 1. 2. 3. 4. Из каких библиотек состоит пакет Simulink? Как собрать модель в пакете Simulink? Как изменить параметры моделирования? Какие существуют способы визуализации процесса моделирования? Лабораторное задание 1.Ознакомиться со структурой иерархической библиотеки Simulink. 2. Набрать модель системы, выданную преподавателем. 3. Произвести моделирование системы. 4. Сравнить результаты, полученные путем изменения параметров моделирования. 5. Представить схему модели и результаты моделирования. 100 ЛИТЕРАТУРА 1. Гультяев А. П. Визуальное моделирование в среде MATLAB: учеб. курс/ А. П. Гультяев.– СПб.: Питер, 2000.– 432 с. 2. Дьяконов В. П. MATLAB: учеб. курс/ В.П. Дьяконов. – СПб.: Питер, 2001.– 560 с. 3. Дьяконов В.П. Simulink 4. Специальный справочник / В.П. Дьяконов.– СПб.: Питер, 2002.– 528 с. 4. Кетков Ю.Л. MATLAB 6.x . Программирование численных методов / Ю Л Кетков, А. Ю Кетков, М.М. Шульц.– СПб.: БХВ-Петербург, 2004.–672 с. 5. Конев В.Ю. Основные функции пакета MATLAB: учеб.пособие/ В.Ю. Конев, Л.А. Мироновский.– 2-ое издание.– СПб.: ГААПСПб., 1994.–76 с. 6. Потемкин В. Г. Система MATLAB: справочное пособие/ В. Г. Потемкин.– М.: ДИАЛОГ-МИФИ, 1997.– 350 с. 7. Хакен Г. Синергетика: иерархии неустойчивостей в самоорганизующихся системах и устройствах. М.: Мир, 1985. 423 с. 8. Forsythe G. E. Computer Methods for Mathematical Computations./ Forsythe G. E., Malcolm M. A., Moler C. B. – Prentice-Hall, 1977. 9. SIMULINK. User’s Guide. Natick: The MathWorks, Inc., 1990 101 Содержание 1. 2. 3. 4. 5. 6. 7. 8. Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Рабочая среда MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Лабораторная работа № 1. Вычисление значений функций и переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Работа с графикой средствами MatLab. . . . . . . . . . . . . . . . . . . . . . . .17 Лабораторная работа № 2. Работа с графикой в MatLab. . . . . . . .27 Программирование в среде MatLab . . . . . . . . . . . . . . . . . . . . . . . . . 30 Лабораторная работа № 3. Программирование в среде MatLab. .46 Операции с векторами и матрицами в среде MatLab . . . . . . . . . . . .49 Лабораторная работа № 4. Операции с векторами иматрицами в среде MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 Решение уравнений, систем линейных уравнений, вычисление интегралов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Лабораторная работа № 5. Решение уравнений, систем линейных уравнений, вычисление интегралов. . . . . . . . . . . . . . . . . . . . . . . . . .66 Аппроксимация и интерполяция данных. Методы решения обыкновенных дифференциальных уравнений. .. . . . . . . . . . . . . . .68 Лабораторная работа № 6. Аппроксимация и интерполяция данных. Методы решения обыкновенных дифференциальных уравнений. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Основные возможности пакета математического моделирования Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 Лабораторная работа № 7. Основные возможности пакета математического моделирования Simulink . . . . . . . . . . . . . . . . . . .100 Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 102