Файл: М.А. Тынкевич Система Matlab Справочное пособие к курсу Численные методы анализа.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.06.2024
Просмотров: 113
Скачиваний: 0
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ КУЗБАССКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
М.А.Тынкевич
Система MATLAB
Справочное пособие к курсу “ЧИСЛЕННЫЕ МЕТОДЫ АНАЛИЗА”
для студентов специальности «Прикладная информатика в экономике»
Кемерово 2001
1
Введение в MatLab (происхождение и возможности)
Электронные вычислительные машины (ЭВМ) первого поколения, в основном, были востребованы именно для выполнения вычислений при расчете баллистических таблиц, оболочек ядерных реакторов, траекторий вывода на орбиту космических аппаратов и в других, более скромных, научных и инженерных расчетах. Программист того времени должен был искать взаимопонимание с заказчиком в математической постановке задачи, быть специалистом в области вычислительной математики, способным найти или создать численный метод решения задачи и, зная систему команд ЭВМ и основные приемы программирования, составить машинную программу.
Система команд первых ЭВМ (для каждого типа машин своя ) включала достаточно ограниченный набор элементарных операций (арифметических и логических, пересылки между ячейками памяти, перехода по условию) и лишь избранные ЭВМ (например, первая наша серийная машина “Стрела” с памятью в 2048 43-разрядных ячеек и быстродействием 2000-4000 операций/сек) имели в этом наборе более сложные операции (перевод числа из двоично-десятичной системы в двоичную и обратно, вычисления синуса, натурального логарифма, экспоненты, обратной величины и квадратного корня). Построение из этих “кирпичиков” программ для реальных задач в условиях ограниченной емкости памяти и невысокого (по современным меркам) быстродействия было достаточно трудоемким процессом и не случайно возникло понятие искусства программирования.
Естественно, что уже на первых этапах практического программирования появилась идея подпрограммы как программного блока, допускающего многократное обращение к себе из различных участков программы. Так появились сборники текстов подпрограмм для вычисления элементарных функций и основных численных методов (интегрирования, решения обыкновенных дифференциальных уравнений и пр.), позднее эти сборники стали хранить во внешней памяти машины (как правило, на магнитных лентах или барабанах). Наконец, были созданы системы, позволяющие по номеру подпрограммы вызывать ее из внешней памяти в оперативную с настройкой по месту вызова и при наличии определенных договоренностей передавать входную и выходную информацию. В отечественной практике наиболее совершенной была интерпретирующая система ИС-2 (позднее ИС-22) для семейства машин типа М-20 с уникальной по качеству и разнообразию библиотекой стандартных подпрограмм.
Переход от программирования в кодах ЭВМ к универсальным
2
языкам программирования – в первую очередь, к Алголу-60 - породил библиотеки алгоритмов, которые и составили базу для построения 30 лет спустя систем для решения математических задач, возникающих в разнообразных научных исследованиях и технических разработках – Maple, Mathematica, MathCad, MatLab и др. Для этих систем характерны простота подготовки данных, удобные формы вывода результатов вычислений, встроенные средства помощи, диаг-
ностики ошибок – т.н. дружественный интерфейс.
Рассматриваемая ниже система MatLab (Matrix Laboratory) является интерактивной системой для выполнения инженерных и научных расчетов, ориентированная на работу с массивами данных. Она допускает написание на специальном языке программ, оформляемых
ввиде т.н. М-файлов, поддерживает работу в программном и интерактивном режиме с векторами и матрицами, позволяет решать системы уравнений, выполнять численное интегрирование, строить графики и пр. Система допускает использование пакетов прикладных программ (ППП) символьной математики, статистики, оптимизации, анализа и синтеза систем управления, обработки сигналов и изображений, финансов, картографии и др. Система позволяет с легкостью обмениваться информацией с текстовым редактором Microsoft Word,
вчастности переносить любые тексты и рисунки в буфер или читать текстовые строки из буфера как исполняемые команды.
Опыт показывает, что студенты, владеющие программированием в Pascal’е или Visual Basic’е, улавливают технологию программирования и работы в MatLab’е в течение 2-3 часов (с фантастическими возможностями системы можно знакомиться месяцами).
Ниже мы излагаем информацию лишь о небольшой части этой системы, полезную при изучении численных методов решения основных задач вычислительной математики студентами, основные интересы которых ограничены областью экономико-математического моделирования.
1. Режим командной строки. Форматы данных
При вызове MatLab на дисплей выводится заставка, которая сменяется командным окном, в верхней части которого размещено окно управления - меню с пунктами Файл, Правка, Окно и Помощь и панель инструментов. Ниже выводится командная строка (начинается символом “»”) с предварительными предложениями вызвать перечень разделов, войти в справочник, открыть окно помощи, приступить к демонстрации и др.
3
В командной строке в режиме диалога можно набрать команду (оператор) или выражение и, нажав Enter, получить ответ (answer). Например, после набора команды (оператора присваивания) a=3.2 в последующих строках появится a = 3.20000000000000 (переменной а присвоено значение 3.2), после набора выражения sin(a)/a увидим его значение ans = -0.01824191982112.
Сразу же учтите, что в именах переменных (последовательностях латинских букв и цифр, начинающихся с буквы; знак _ относится к буквам) строчные и заглавные буквы отнюдь не тождественны !
Если вы хотите выполнить команду без вывода результата, в конце команды ставьте символ точки с запятой.
Кстати, если команда не помещается полностью в видимой части одной строки экрана, поставьте многоточие (хотя бы две точки), нажмите Enter и продолжайте в следующей строке.
Для очистки командного окна достаточно выполнить команду
clr.
Заметим, что всегда можно обратиться к помощи, выбрать интересующий раздел (например, matlab/elfun – элементарные математические функции) и воспользоваться полученной информацией. Имейте в виду, что любой фрагмент окна командной строки можно выделить и копировать в буфер, например, для переноса в Word. Возможен перенос в командную строку текстовых фрагментов из других систем.
Полезно сразу обратить внимание на подпункт Свойства (Preference) пункта Файл (File) окна управления.
Впервом его окне (General) предусматривается установка Numeric Format формата представления чисел : Short – короткое 5- значное , Long – длинное 15-значное, Hex – шестнадцатеричное, Bank – доллары и центы, ShortE и LongE – экспоненциальное, Rational – отношение целых чисел (обратите внимание на эту форму – такой нет ни в одной универсальной среде программирования), межстрочного интервала (с пробелом между строками Loose или без такового Compact), а также вывод на экран панели инструментов и поддержка возможности отладки графики.
Во втором окне (Сommand Window Font) имеются 6 полей: Font (шрифт), Style (Light-светлый, Regular - нормальный, Bold – жирный), Size (размер 10, 12 или 15), BackGround Color (цвет фона) , Color (цвет символа) и др.
Как и в любой системе, в MatLab’e присутствует понятие переменной величины, но в роли ее значения выступает массив (array).
Всистеме определены 6 встроенных типов данных (массивов):
4
•числа удвоенной точности (double);
•массивы символов – строки (char), при задании строковой константы ее символы заключают в апострофы;
•двумерные разреженные матрицы (sparse), массивы ячеек (cell), массивы записей (struct) и специальные массивы целых чисел от 0 до 255 (uint8).
Здесь мы ограничимся рассмотрением лишь обычных числовых массивов и строк.
Для задания массива (в частности, скалярной величины) исполь-
зуется команда присваивания. Например, командой » a=[1 2 3; 4 5 6] формируется матрица размерности 2×3 с соответствующими элементами; командой » b=[1 2 3] – вектор-строка; командой » b=[1; 2; 3] - вектор-столбец; d=zeros(4,7) - матрица размерности 4×7 с нулевыми элементами. Для выборки отдельных элементов массивов можно пользоваться индексами, например, а(k,3) определяет третий элемент k-ой строки, a(:,3) – весь третий столбец. Встроенная система контроля отлавливает типичные ошибки при задании массивов: например, при попытке выполнения команды » a=[1 2 3; 4 5 ] получаем:
Number of elements in each row must be the same.
(Число элементов в каждой строке должно быть тем же)
Обратите внимание на то, что следует :
-при задании массива значениями заключать их в квадратные скобки;
-элементы в строке массива разделять пробелами или запятыми;
-при указании списка индексов использовать круглые скобки и разделительные запятые (указание индекса символом двоеточия соответствует заданию всех значений по соответствующему индексу).
При работе с массивами можно пользоваться списками i:k и i:j:k : в первом варианте понимаем “от i до k с шагом 1” и во втором – то же с шагом j, например t=-pi:0.01:pi или p=0:8 (некоторые сочетания дают пустое множество, например q=3:1).
Вбиблиотеке предусмотрен ряд функций для формирования массивов простейшей структуры, например :
-нулей zeros(n), zeros(m,n), zeros(m,n,p,..), zeros(size(А)) (одно-
мерный, двумерный, многомерный, соразмерный с массивом А);
-единиц ones(n), ones (m,n), ones (size(А)) и др.
Естественно, что к числовым переменным применимы все арифметические операции, но при выполнении ряда операций прихо-
дится различать поэлементные операции с массивами и операции над матрицами по правилам линейной алгебры (для массивов перед знаком операции ставят точку):
5
+A |
|
A\B |
Решение системы m уравнений |
|
-A |
|
|
АХ=В c несколькими правыми |
|
A+B |
Предполагается одинако- |
|
частями: B –матрица m×k {то- |
|
A-B |
вая размерность или один |
|
ждественно (B’/A’)’ } |
|
A .*B |
из операндов – скаляр |
|
|
|
A.\ B |
Левое деление ( В на А) |
|
|
|
A ./B |
Правое деление (А на В) |
|
|
|
A .^B |
Поэлементное возведение |
A^k |
Степень матрицы (при k=0 – |
|
|
в степень |
|
единичная матрица, при целом |
|
|
|
|
k<0 – умножение обратной и |
|
|
|
|
при целом k>0 исходной мат- |
|
|
|
|
риц; для других k вычисляются |
|
|
|
|
собственные числа R и векторы |
|
|
|
|
D и A^k= RTD.^k/R |
|
A.’ |
Транспонирование масси- |
A’ |
Транспонирование |
матрицы |
|
ва |
|
(для комплексных |
дополняется |
|
|
|
комплексным сопряжением) |
Система работает не только с действительными, но и с комплексными числами и роль мнимой единицы играют символы i, j:
» a=1+2i |
a = 1.0000 + 2.0000i |
» b=1-3i |
b = 1.0000 - 3.0000i |
» a*b |
ans = 7.0000 - 1.0000i |
» exp(ans) |
ans = 592.51 -922.78 i |
Над массивами можно выполнять операции поэлементного от-
ношения : A < B , |
A <= B |
, A > B , A>= B (только для действи- |
тельных частей), |
A == B, |
A~=B (равно/не равно - для действитель- |
ных и мнимых частей), которые порождают массив с единицами (истина) и нулями (ложь) той же размерности. Аналогично реализуются и логические операции: отрицания ~A, конъюнкции (логического умножения - И) A&B, дизъюнкции (логического сложения – ИЛИ) A|B.
Все переменные системы размещаются в т.н. рабочей области, содержимое которой (имена, размерность, тип) можно просмотреть командами who и whos:
» who |
|
|
|
Your variables are: |
|
||
i |
r |
t |
|
» whos |
|
|
|
|
Name |
Size |
Bytes Class |
|
i |
1x1 |
8 double array |
|
r |
4x629 |
20128 double array |
|
t |
1x629 |
5032 double array |
Grand total is 3146 elements using 25168 bytes