Учебнометодическое пособие к практикуму по курсу Пакеты компьютерной алгебры
![]()
|
1 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования «ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» Курбатова Н.В., Пустовалова О.Г. Основы MatLab в примерах и задачах УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ К ПРАКТИКУМУ ПО КУРСУ «Пакеты компьютерной алгебры» Ростов-на-Дону 2017 2 Учебно-методическое пособие «Основы MatLab в примерах и задачах» разработано кандидатом физико-математических наук, доцентом кафедры математического моделирования Н. В. Курбатовой и кандидатом физико- математических наук, доцентом кафедры математического моделирования О. Г. Пустоваловой. Печатается в соответствии с решением кафедры математического мо- делирования института математики, механики и компьютерных наук ЮФУ (протокол № 6 от 13 июня 2017 г.). Учебно-методическое пособие предназначено для поддержки практи- кума курса «Пакеты компьютерной по специальности «Прикладная матема- тика и информатика» алгебры» с использованием пакета MatLab. Данные курс и практикум являются центральным учебным материалом, который по- зволяет системно усвоить теоретические положения курсов линейной алгеб- ры, математического анализа, расширить их практические приложения и научиться применять возможности MatLab (ML) для оперативного решения прикладных задач. В пособии предлагается подход от простого к сложному, который не исчерпывается сквозным эволюционным изложением материала, а предпо- лагает реструктурирование сложных задач на простые в рамках тематическо- го раздела. Такие простые задачи составляют содержание серии примеров, поддержанных программной реализацией средствами языка ML. © Курбатова Н.В., Пустовалова О.Г., 2017 © Южный федеральный университет, 2017 3 Оглавление Введение ............................................................................................................... 5 Первое знакомство с MatLab (ML) ....................................................................... 7 Интерфейс MatLab. Command Windows (CW) .................................................. 7 Интерфейс MatLab. Workspace ......................................................................... 9 Интерфейс MatLab. Help .................................................................................. 10 Простые операции с векторами и матрицами .................................................. 12 Ввод векторов и матриц ................................................................................. 12 Обращение к элементам матрицы ................................................................. 13 Удаление элементов матрицы ....................................................................... 14 Некоторые специальные матрицы ................................................................. 15 Создание матриц, заполненных случайными числами ................................ 16 Поэлементные операции ................................................................................ 17 Матричные операции ..................................................................................... 18 Часто используемые матричные функции ..................................................... 22 Логические операции с матрицами ............................................................... 26 Задачи для самостоятельного решения ......................................................... 27 Графика в MatLab ............................................................................................... 31 Построение графиков функций ...................................................................... 31 Несколько графиков в одном графическом окне .......................................... 32 Установка параметров графиков .................................................................... 33 Построение графика неявно заданной функции ........................................... 35 Создание нескольких графических окон ........................................................ 37 Использование логарифмической шкалы ..................................................... 39 4 Задания для самостоятельного решения ....................................................... 41 Основные типы данных ...................................................................................... 46 Методы класса Array ....................................................................................... 46 Типы данных Numeric и Double ...................................................................... 47 Способы создания объектов Double ............................................................... 48 Задания для самостоятельного решения ....................................................... 53 Объекты класса Char. Функции и свойства .................................................... 56 Объекты класса Cell. Функции и свойства ...................................................... 61 Создание функций в Matlab ............................................................................... 63 Функции и процедуры ..................................................................................... 63 Аноним и функция-строка ............................................................................... 66 Подпроцедуры ................................................................................................ 67 Литература .......................................................................................................... 69 5 Введение Предлагаемое учебно-методическое пособие ориентировано на под- держку практикума по курсу «Пакеты компьютерной алгебры» по специаль- ности «Прикладная математика и информатика» в части освоения инстру- ментария пакета MatLab для решения широкого спектра задач, являющихся основой компьютерного моделирования. Предполагается владение базовыми знаниями по курсам программи- рования, математического анализа и линейной алгебры. Данные курс и практикум относятся к обязательным дисциплинам (цикла - вариативная часть) и являются центральным учебным материалом, который дает возможность научиться оперировать функционалом предла- гаемого ресурса для эффективного решения задач, в том числе смежных предметных областей. Многомодульная структура MatLab (ML) имеет все предпосылки стать основным инструментом исследования, как в учебном, так и научно-исследовательском процессе, а предлагаемое пособие обеспе- чивает освоение его основ. Оперативный и интерактивный характер взаимо- действия пользователя и системы ML позволяет экстраполировать функцио- нал пакета на решение прикладных, оптимизационных задач и других задач более высокого уровня. Авторы предлагают эволюционный подход от простого к сложному, и он не сводится к сквозному усложнению предлагаемого материала, а опи- рается на решения простых тематических задач и заданий-тренажеров. Та- кие простые задачи составляют содержание серии примеров, поддержан- ных программной реализацией средствами языка ML. Предлагаемый подход обеспечивает базу для решения более сложных задач и индивидуальных работ, охватывают темы или даже разделы курса. Пакет MatLab является замечательным примером взаимодействия пользователя (студента) и компьютерной системы. Облегченный синтаксис, 6 нестрогая типизация, проработанные библиотеки с функциями эффективного программирования облегчают использование ML для решения задач, возни- кающих при изучении таких курсов, например, как численные методы, ма- тематические модели естественных наук, стохастическое моделирование. Данное учебно-методическое пособие может быть весьма полезно для ре- шения научно-технических задач, возникающих при работе над курсовыми и дипломными проектами. Для более глубокого и всестороннего освоения методик интерактивно- го и программного моделирования средствами пакета ML предлагаем сле- дующую литературу *1-6]. Материал пособия ориентирован на использование программного па- кета MatLab версии 7.x -11.x. 7 Первое знакомство с MatLab (ML) Пакет ориентирован на интерактивное (суперкалькулятор) и про- граммное функционирование (MatLab – высокоуровневый язык на базе FORTRAN с оптимизацией на С, С++). В пакете по умолчанию реализована комплексная арифметика, вычис- ления производятся с двойной точностью, базовый элемент – массив. Пакет снабжен удобным интерфейсом - окнами, отличающимися своей функциональностью. Конфигурирование необходимых для пользователя окон осуществляется в меню команд так: Desktop (с выбором необходимых окон) или Desktop Layout Default (по умолчанию). Остановимся на некото- рых из них. Интерфейс MatLab. Command Windows (CW) При интерактивной работе в командном окне все команды и их после- довательности помещаются в строку ввода, она начинается символом >>. Ис- полняются команды после нажатия клавиши Enter. А отделяются команды друг от друга запятой или точкой запятой. Если использовать разделитель точку с запятой, то результат выполнения команды не отображается. 8 На рисунке, представленном выше, представлены результаты исполнения команды why в командном окне. Читателю предлагается поставить собст- венный опыт - выполнить несколько раз данную команду и сравнить резуль- таты ее исполнения. Выполненные команды помещаются в стек и могут быть извлечены в строку ввода перебором исполненных команд с помощью стрелок и при необходимости редактируются при повторном исполнении. Строка вывода не доступна для редактирования. Все переменные среды – глобальные. Это может стать причиной оши- бок, если какие-то переменные уже ранее были определены и их используют повторно. Поэтому необходимо внимательно контролировать процесс иден- тификации и использования переменных. Пример, приведенный ниже, пока- зывает, как можно отобразить на экране переменные и очистить некоторые из них или сразу все. Пример 1. Контроль переменных, сохранение и очистка CW who % Идентификаторы всех переменных whos % Идентификаторы и типы всех переменных % Удаление всех переменных clear % Удаление конкретных переменных, например, x и y clear x и y % Сохранить все переменные оперативной памяти в систем- ном двоичном файле matlab.mat save % Сохранить переменные x,y,z в двоичном файле va- riables.mat save variables x y z; % Очистить содержимое оперативной памяти (все перемен- ные - глобальные) Clc Заметим, что командное окно является с одной стороны средой для вычислений, а с другой стороны графическим объектом, тип которого - 9 структура. Такой дуализм CW, двойственность, сохраняется и в управлении его свойствами. Пример 2. Свойства CW как функции высокого уровня % Задание формата, который поддерживает 15 цифр после запятой format long % short – по умолчанию и 4 цифры после за- пятой % Задание формата рациональных чисел format rational % Выполнение скрипт-файла с отображением каждой испол- няемой %строки echo on % echo off – по умолчанию Пример 3. Свойства CW как графического объекта Root с нулевым дескриптором % Определить текущие свойства CW get(0) % Определить свойства CW текущие и возможные set(0) %Задание формата, который поддерживает 15 цифр после запятой set(0,’format’,’long’) % Выполнение скрипт-файла с отображением каждой испол- няемой строки set(0,’ echo’,’ on’) Интерфейс MatLab. Workspace Workspace – рабочее пространство; окно, содержащее информацию обо всех переменных, типе, значениях. Щелчком по пиктограмме перемен- ной активируется редактор переменных (VE), позволяющий изменять их зна- 10 чения в интерактивном режиме. Этот прием работы отображен на рисунке, приведенном ниже. Интерфейс MatLab. Help Справочная система ML содержит информацию об имеющихся моду- лях – Toolbox (Help Product Help), алфавитный (Index) и содержательный (Contents) поиск по имеющемуся программному функционалу, а также де- монстрационные тематические программы (Demos). Следует отметить, что политика ML обусловила такое структурирование ML, при котором каждый модуль, по сути, является обособленным и определяет исследовательскую среду для выделенной предметной области. Все они ориентированы на пре- имущества ML: высокую точность, векторно-матричную природу, простой синтаксис и нестрогую типизацию. Пример 4. Тематические справочные материалы % Справка по элементарным функциям help elfun % Справка по элементарным операциям (арифметическим, операциям отношения, логическим, над множествами см.help) help > %знак больше % Справка по элементарным, специальным матрицам и сис- темным переменным help elmat В контекстном поиске (Help Product Help Contents) статья Program Control Statements описывает все элементы программирования, используе- 11 мые в ML. В алфавитном поиске (Help Product Help Index), набрав is*, можно получить справку по контролю возможных типов данных. На рисунке, представленном ниже, отображено окно справочной сиcтемы ML. Как и во многих других приложениях, примеры справки доступ- ны для копирования с последующим выполнением в рабочей среде. 12 Простые операции с векторами и матрицами Основными объектами, с которыми начинает работать пользователь, знакомящийся с MATLAB, являются матрицы. Если проверить с помощью команды size размер числа 5, или символа 'A', то мы получим два числа - количество строк и количество столбцов, в данном случае - это две единицы. Лозунг, которым призывают руководствоваться создатели языка – 'Think vectorized', или 'Мысли векторно'. Ввод векторов и матриц Для ввода векторов и матриц используются квадратные скобки * +. Разделителями данных в векторах и матрицах служат пробел и запятая в строке, и точка с запятой - в столбце. Пример 1. Задание векторов % Вектор-строка a1=[1 2 3] % Вектор-строка a2=[1,2,3] % Вектор-столбец a3=[1;2;3] Пример 2. Задание матриц % Матрица, размера 2х3 b1=[1 2 3; 4 5 6] % Матрица, размера 3х2 b2=[1 2; 3 4; 5 6] Значения вектора можно задать с помощью следующей конструкции: [начальное значение : шаг : конечное значение], или [начальное значение : : конечное значение], 13 тогда шаг по умолчанию равен единице. Квадратные скобки в этом выраже- нии можно опустить. Пример 3. Задание вектора и вычисление вектора % Задаем вектор x x=0:0.01:6 % Вычисляем вектор y y=sin(x) Функцией x = linspace(начальное значение, конечное значение), также можно пользоваться при создании линейного массива. При этом век- тор x по умолчанию будет содержать сто компонент. Возможен и другой спо- соб вызова функции linspace - с тремя входными параметрами, послед- ним из которых является количество компонент вектора. Пример 4. Функция linspace % Вектор из 100 компонент c1=linspace(1,100) % Вектор из 20 компонент c2=linspace(1,100,20) Обращение к элементам матрицы Для обращения к элементам матрицы используют круглые скобки ( ). Первый индекс – номер строки, второй – номер столбца. Возможно задавать диапазон строк – столбцов. Пример 5. Задание матрицы и обращение к ее элементам % Очистка экрана clc % Очистка переменных clear % Задание матрицы A=[1 2 3; 4 5 6; 7 8 9] % Изменение 1-го элемента матрицы A(1,1)=100 14 % Изменение 3-й строки матрицы A(:,3)=50 % Изменение 2-го столбца матрицы A(2,:)=33 В примере, представленном выше, знак двоеточие обозначает, что в рассмотрение берутся все элементы. Пример 6. Изменение фрагмента матрицы clc % Очистка переменной A clear A % Задание квадратной матрицы 7-го порядка из единиц A=ones(7) % Изменение фрагмента матрицы A(2:6,2:6)=55 Пример 7. Использование ключевого слова end clear A A=ones(7) % Изменение фрагмента матрицы A(4:end,4:end)=-21 В примере #6 значения элементов строк и столбцов со 2 по 6 заменяются на 55. В примере #7 использовано ключевое слово end для обозначения конца диапазона. Удаление элементов матрицы Удалить из матрицы можно строку или столбец целиком. Для удаления строки или столбца необходимо присвоить удаляемому элементу пустой массив. Пример 8. Удаление элементов матрицы % Задание матрицы A=[5 5 5; 2 10 2; 2 10 2] 15 % Удаление 1-й строки матрицы A(1,:)=[] % Удаление 2-го столбца матрицы A(:,2)=[] Пример 9. Удаление нескольких строк матрицы % Задание матрицы A=[1 1 1; 2 2 2; 7 3 3] % Удаление 2-х строк матрицы A(1:2,:)=[] % Удаление двух последних элементов матрицы A(2:end)=[] Некоторые специальные матрицы Приведем примеры некоторых специальных и часто используемых матриц. Пример 10. Матрица из единиц % Матрица из единиц 5-го порядка A=ones(5) % Матрица из единиц, в которой 2 строки и 3 столбца B=ones(2,3) Пример 11. Матрица из нулей % Матрица из нулей 3-го порядка C=zeros(3) % Матрица из нулей, в которой 2 строки и 6 столбцов D=zeros(2,6) Обычно команду zeros используют для инициализации матриц. Пример 12. Единичная матрица % Единичная матрица 3-го порядка E=eye(3) % Единичная матрица, в которой 3 строки и 4 столбца F=eye(3,4) 16 Следующий пример демонстрирует команду magic, которая позволяет формировать матрицу Альбрехта Дюрера, или магический квадрат. Данная матрица знаменита тем, что суммы элементов в строках, столбцах и диагоналях одинаковы. Пример 13. Магический квадрат % Матрица Дюрера 3-го порядка M3=magic(3) % Матрица Дюрера 5-го порядка M5=magic(5) Создание матриц, заполненных случайными числами Существует несколько функций, позволяющих заполнять матрицы случайными числами. Рассмотрим несколько примеров, реализующих это. Пример 14. Функция rand % Матрица 5-го порядка, % заполненная вещественными случайными числами % с равномерным распределением из открытого интервала (0,1) A=rand(5) % Матрица 2x3, A=rand([2 3]) Пример 15. Заполнение матрицы случайными целыми числами % Используем функцию округления round % Заполняем матрицу случайными целыми числами от 0 до 10 A=round(rand(8)*10) % Заполняем матрицу случайными целыми числами от -5 до 5 B=round(rand(8)*10-5) 17 Пример 16. Заполнение матрицы случайными целыми с помощью функции randi % Матрица 15-го порядка с элементами в диапазоне от -20 до 20 A=randi([-20 20],15) % Матрица 5x7 с элементами в диапазоне от -3 до 3 B=randi([-3 3],5,7) Поэлементные операции Для выполнения поэлементной арифметической операции необходимо поставить точку перед знаком операции: A.+B A.-B A.*B A./B A.\B A.^B Пример 17. Поэлементные операции с векторами % Заполнение векторов. Вектора одинаковой длины v1=10:10:50, v2=1:5 % Поэлементное умножение векторов r_1=v1.*v2 % Поэлементное деление векторов r_2=v1./v2 % Поэлементное суммирование векторов и умножение на число % Точку в данном случае ставить необязательно r_3=0.1*v1+100*v2 Пример 18. Поэлементные операции с матрицами % Заполнение матриц. Матрицы одинаковой размерности m1=[2 4 6; 3 7 9], m2=[6 4 2; 9 7 3] % Поэлементное умножение матриц z_1=m1.*m2 % Поэлементное деление матриц z_2=m2./m2 % Поэлементное суммирование матриц и умножение на число % Точку в данном случае ставить необязательно z_3=m1+10*m2 18 Пример 19. Поэлементное деление прямое и обратное % Заполнение векторов. Векторы одинаковой размерности q1=[1 2 3 4], q2=[10 20 30 40] % Поэлементное прямое деление векторов p_1=q1./q2 % Поэлементное обратное деление векторов p_2=q1.\q2 % Заполнение матриц. Матрицы одинаковой размерности h1=[10 20; 30 40], h2=[5 10; 15 20] % Поэлементное прямое деление матриц w_1=h1./h2 % Поэлементное обратное деление матриц w_2=h1.\h2 Матричные операции В MatLab определены матричные операции по правилам линейной алгебры: при сложении и вычитании должны совпадать размерности, при умножении и делении число столбцов первого матричного сомножителя и число строк второго должны совпадать. К матричным же операциям относится возведение в степень и транспонирование матрицы. Пример 20. Матричное умножение % Задание матриц M1=[1 1 1; 2 2 2] M2=[3 4; 3 5;3 6] % Матричное умножение M1*M2 % Вектор-строка из 5 элементов M3=[1 2 3 4 5] % Вектор-столбец из 5 элементов M4=[1; 2; 3; 4; 5] % Матричное умножение M3*M4 % Задание квадратных матриц 19 M5=[1 2; 3 4] M6=[1 2; 2 1] % Матричное умножение M5*M6 Обратное матричное деление используется для отыскания решения систем алгебраических линейных уравнений (СЛАУ). Если задана система вида Ax=b, где A – квадратная матрица, b – столбец свободных членов, а x – разыскиваемое решение, то в том случае, когда система совместна, x можно найти с помощью операции обратного деления. Пример 21. Матричное обратное деление clear, clc % Задание матрицы A и столбца свободных членов b A=[1 0 0; 0 2 0; 0 0 3] b=[10; 40; 150] % Решение системы Ax=b x=A\b % или x=A^(-1)*b % или x=inv(A)*b Условия для системы, приведенной в примере #21, подобраны с расчетом, что читатель найдет решение устно и проверит совпадение с решением, полученным с помощью MatLab. Описание методов решения СЛАУ в ML чи- татель может найти в источниках [1-6]. Для возведения квадратной матрицы в целую положительную степень, используется операция ^. Пример 22. Возведение матрицы в степень clear, clc % Задание матрицы A A=[1 2 3; 0 2 0; 0 0 3] % Возведение матрицы в степень A^2 20 Пример 23. Транспонирование вещественной матрицы clear, clc A=[1 1 1; 2 2 2; 4 5 6] % Транспонирование матрицы A' % Транспонирование матрицы A.' Знак ' – обозначает операцию транспонирования с взятием комплекс- ного сопряжения, очевидно, что для вещественных матриц эта операция сводится к обычному транспонированию, а .’ обеспечивает простое транс- понирование, даже в случае комплексных матриц. Пример 24. Транспонирование матрицы, содержащей комплексные эле- менты clear, clc % Задание матрицы A A=[1-i 1+i; 2+3i 2-3i] % Транспонирование матрицы c комплексными значениями A.' % Транспонирование матрицы и комплексное сопряжение A' При проведении операций с матрицами нужно помнить приоритет операций. Он следующий: сначала выполняется операция транспонирования, затем возведения в степень, потом умножение и деление, а в последнюю очередь – сложение. Пример 25. Приоритет матричных операций. Транспонирование и умноже- ние clear clc A=[1 1; 2 2] % Вычисление значения выражения без скобок A*A' 21 % Вычисление значения выражения со скобками (A*A)' Пример 26. Приоритет матричных операций. Возведение в степень и деле- ние clear, clc A=[1 3; 0 5] % Вычисление значения выражения без скобок A/A^2 % Вычисление значения выражения со скобками (A/A)^2 Рассмотрим операцию объединения матриц. Она может выполняться по горизонтали для матриц, количество строк которых одинаково, и по вертикали, для матриц с одинаковым количеством столбцов, также можно объединять матрицы одинаковой размерности вдоль третьей оси. Для плоского объединения матриц используют квадратные скобки, функция |