Что такое MATLAB

MATLAB — это высокоуровневый интерпретируемый1 язык программирования и пакет прикладных программ для инженерных и математических расчетов. Обладает широким прикладным функционалом и сравнительно легок в освоении.

Говоря о полезности MATLAB, невозможно не упомянуть Simulink.

Simulink — среда динамического междисциплинарного моделирования сложных технических систем и основной инструмент для модельно-ориентированного проектирования. Его основным интерфейсом является графический инструмент для построения диаграмм и настраиваемый набор библиотек блоков. Он предлагает тесную интеграцию с остальной средой MATLAB. – Exponenta

Первое знакомство с графическим интерфейсом MATLAB

При первом открытии MATLAB, возможна следующая конфигурация панелей:

Labeled MATLAB panes

  • 1-я панель: Содержит просмотрщик файлов;
  • 2-я панель: Командное окно для выполнения вычислений и текстового вывода;
  • 3-я панель: Окружение с переменными.

Для каждой панели возможно изменить её положение и размер.

Простые расчеты

Простейший способ использование MATLAB – в качестве калькулятора. Например, после исполнения в командой строке:

>> (3+2) * 9-5

получим результат:

ans = 40

Обратим внимание, что результат вычислений не 20 а 40.

Основными арифметическими операторами являются + - * /, а ^ используется для обозначения операции возведения в степень. Также можно использовать скобки ( ). Приоритет порядка тот же, что и обычно, т.е. скобки → степени → умножение и деление → сложение и вычитание.

Встроенные функции

Помимо основных операторов, MATLAB предоставляет все привычные математические функции, некоторые из которых представлены в следующей таблице:

Функция Значение
abs(x) \(\vert x \vert\) - модуль числа \(x\)
sqrt(x) \(\sqrt{x}\) - корень квадратный из $$x$
pi \(3.141592653589793\)
sin(x) \(\sin x\) - cинус угла \(x\) (в радианах)
cos(x) \(\cos x\) - косинус угла \(x\) (в радианах)
atan(x) \(\arctan x\) - арктангенс угла $x$
exp(x) Экспоненциальная функция (\(e^x\))
log(x) Натуральный логарифм (\(\log_e x\))
log10(x) Логарифм по основанию 10 (\(\log_{10} x\))
round(x) Округлить до ближайшего целого числа
floor(x) Округлить вниз (в сторону \(-\infty\))
ceil(x) Округление вверх (в сторону \(+\infty\))
fix(x) Округление в сторону нуля
sign(x) Знак числа (-1 или +1)
rem(x) Остаток после целочисленного деления

Как видим, эти функции вызываются привычным для многих языков программирования способом: именем функции с последующей передачей аргументов в скобках, например:

exp(1)
ans = 2.7183

Вычислим более длинное выражение: \(1.2 \cdot \sin(40^{\circ} + \ln(2.42))\)

>> 1.2 * sin(40*pi/180 + log(2.4^2))
ans = 0.76618

Следует отметить:

  • В уравнениях всегда необходим явный знак умножения, например, между 1.2 и sin;
  • Тригонометрические функции (например, sin) работают в радианах. Коэффициент π/180 можно использовать для преобразования градусов в радианы. pi - это пример именованной переменной.
  • Функция натурального логарифма именуется “log”, а не “ln”.

Переменные

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

При любом значимом вычислении появляется желание сохранить свои ответы или повторно использовать значения, точно так же, как при использовании памяти калькулятора. MATLAB предоставляет возможность определять и использовать именованные переменные. Например, рассмотрим пример с градусами в предыдущем разделе. Мы можем определить переменную deg для хранения коэффициента преобразования, записав:

>> deg = pi/180
deg = 0.017453

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

Все переменные в MATLAB являются числами с плавающей запятой2.

Используя переменную deg, мы можем переписать предыдущее выражение следующим образом:

>> 1.2 * sin(40*deg + log(2.4^2))
ans = 0.76618

Использование переменных не только облегчит ввод и чтение данных, но и снизит вероятность ошибки. Замена “мистических чисел”3 переменными делает код более читаемым и поддерживаемым, что в свою очередь упрощает его модификацию в будущем.

В MATLAB, если вводится выражение без присваивания переменной, результат сохраняется в переменную под именем ans. Эту переменную можно потом использовать как обычно.

>> new = 3*ans
new = 2.2985

Обратим внимание, что это не тот ответ, который можно было бы ожидать от простого выполнения 3 × 0.76618. MATLAB отображает числа с ограниченным количеством знаков после запятой, но хранит их с высокой точностью. Поэтому результаты более точные, чем кажутся на первый взгляд.4

Правила именования переменных:

  1. Имя переменной начинается с буквы;
  2. Может содержать буквы, цифры и подчёркивания;
  3. Чувствительно к регистру;
  4. Зарезервированные слова и специальные символы запрещены;
  5. Пробелы запрещены.

Список зарезервированных (служебных, ключевых) слов можно посмотреть вызвав команду iskeyword:

>> iskeyword
ans =
  20×1 cell array
    {'break'     }
    {'case'      }
    {'catch'     }
    {'classdef'  }
    {'continue'  }
    {'else'      }
    {'elseif'    }
    {'end'       }
    {'for'       }
    {'function'  }
    {'global'    }
    {'if'        }
    {'otherwise' }
    {'parfor'    }
    {'persistent'}
    {'return'    }
    {'spmd'      }
    {'switch'    }
    {'try'       }
    {'while'     }

Чтобы проверить значение переменной, введите её имя и нажмите Enter. Для списка всех ваших переменных и функций, введите команду who:

>> who
Variables visible from the current scope:

ans  deg  new

Чтобы удалить переменные (очистить рабочее пространство), используйте команду clear. Для удаления конкретной переменной, введите clear имя_переменной. Это может быть полезно для экономии памяти или для “сброса” переменных.

Числа и форматирование

MATLAB обычно отображает числа с пятью значащими цифрами. Команда format позволяет вам выбрать способ отображения чисел. В частности:

>> format long

установит отображение чисел с 15+ значащих цифр, что примерно соответствует точности вычислений MATLAB. Введя help format можно получить полный список опций для этой команды. Установив значение format long, мы можем просмотреть более точное значение deg:

>> deg
deg = .0174532925199433

Для возврата отображения обычной точности:

>> format short

MATLAB показывает большие или маленькие числа в экспоненциальном формате, как 1,3143e+04 (что соответствует \(1,3143 \cdot 10^{4}\)) для 13142,6. Также можно использовать этот формат и при вводе чисел.

Существуют также другие виды чисел, распознаваемые и вычисляемые MATLAB:

  • Комплексные числа (например, 3+4i).
  • Бесконечность (Inf) возникает при делении на ноль и может храниться как переменная.
  • «Не число» (NaN) появляется в неопределенных операциях и также может быть переменной; все вычисления с ним всегда дают NaN.

Представление чисел и точность

Числа в MATLAB, как и во всех компьютерах, хранятся в двоичном формате, а не в десятичном. В десятичной системе счисления 12,25 означает:

\[12.25=1×10^1 +2×10^0 +2×10^{−1} +5×10^{−2}\]

но в двоичном формате это было бы записано как:

\[1101.01 = 1×2^3 +1×2^2 +0×2^1 +1×2^0 +0×2^{−1} +1×2^{−2} =12.25\]

Двоичный код в ЭВМ используется для простоты управления электрическими сигналами. Из-за ограниченного числа битов, не все числа могут быть точно представлены, что может вызвать ошибки в расчетах. Рассмотрим пример:

>> 1 - 0.2 - 0.2 - 0.2 - 0.2 - 0.2
ans = 5.5511e-17

Результат не равен нулю из-за ограничений двоичного представления чисел в компьютерах. Значение 0.2 не может быть точно представлено в двоичной системе счисления с конечным числом разрядов (\(0.0011001100 \ldots\)), аналогично тому, как 1/3 не может быть точно представлена в десятичной системе. Поэтому часто лучше не сравнивать числа на строгое равенство, а использовать допуск на ошибку. Самый простой пример:

tol = 1e-5;  % Допуск на погрешность вычислений
if abs(a - b) < tol  
  disp('Числа приблизительно равны.')
else
  disp('Числа различны.')
end

Считывание значений переменных с клавиатуры

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

name = input('Введите ваше имя: ', 's');
disp(['Привет, ' name]);
  • input('Введите ваше имя: ', 's') запрашивает у пользователя ввод имени. Параметр 's' указывает, что ввод должен рассматриваться как строка.
  • disp(['Привет, ' name]) объединяет строку 'Привет, ' с введенным именем и выводит это сообщение на экран.

Загрузка и сохранение пременных

При выходе из MATLAB все переменные теряются. Для сохранения области переменных используйте функцию сохранения и загрузки.

>> save anyname

→ сохранит рабочее пространства в файл “anyname.mat” и позволит восстановить переменные при следующем запуске MATLAB.

>> load anyname

→ восстановит предыдущую область переменных, что позволит продолжить с того места, на котором остановились.

Для загрузки и сохранения только определенных переменных:

>> save filename var1 var2 ...

Например, можно сохранить (только) переменную deg, чтобы не вычислять её с нуля (что, конечно, не очень сложно в данном случае!):

>> save degconv deg

Это сохранит переменную в файл под названием degconv.mat. Затем её можно загрузить:

>> load degconv

Повторение предыдущих команд

MATLAB сохраняет запись всех команд, которые вы ввели во время сессии, и вы можете использовать клавиши курсора ↑ и ↓ для просмотра предыдущих команд (самые последние команды отображаются первыми). Если вы хотите повторить одну из этих команд, просто найдите её с помощью клавиш курсора и нажмите Enter.

После того, как команда была восстановлена, вы можете отредактировать её перед повторным выполнением. Вы можете использовать клавиши ← и → для перемещения курсора по строке и вводить символы или нажимать Backspace для изменения содержимого. Это особенно полезно, если вы только что ввели длинную строку, а затем MATLAB обнаруживает в ней ошибку. Используя клавиши со стрелками, вы можете восстановить строку, исправить ошибку и попробовать снова.

Очистка командного окна

Для очистки командного окна выполните команду clc.

Справочная система

Если Вы не уверены, что делает конкретная команда в MATLAB, или хотите найти определённую функцию, в MATLAB есть интегрированная система справки. Базовый способ использования справки:

>> help имя_команды

Например:

>> help sqrt
'sqrt' is a built-in function from the file libinterp/corefcn/mappers.cc

 -- sqrt (X)
     Compute the square root of each element of X.

     If X is negative, a complex result is returned.

     To compute the matrix square root, see Linear Algebra.

     See also: realsqrt, nthroot.
...

Если Вы не знаете нужной команды, можно ввести doc для перехода к документации или lookfor <str> для поиска по справочной системе.

Отмена команды

Если вы обнаружите, что ввели команду, которая занимает много времени для выполнения (или, возможно, это одна из ваших собственных программ с ошибкой, из-за которой она бесконечно повторяется), полезно знать, как её остановить. Вы можете отменить текущую команду, нажав

Ctrl+C,

что должно (возможно, после небольшой паузы) вернуть вас к командному окну.

Точки с запятой и скрытие результатов

В языках программирования, таких как C++, точки с запятой ‘;’ часто используются для обозначения конца строки. В MATLAB это не обязательно, но может быть полезно. Если команда введена без завершающей точки с запятой, MATLAB покажет результат. Если строку завершить точкой с запятой, результат не будет отображён. Это удобно, если результат не нужен сразу или если он слишком большой.

Создание и сохранение MATLAB скрипта

Хотя командная строка может быть полезной, основная часть работы c MATLAB выполняется в скриптах. Скрипты позволяют сохранять в файле исполняемые инструкции. MATLAB скрпиты имеют .m расширение.

Можно создать скрипт, набрав команду edit, в результате получив:

Untitled script

Редактировать уже созданный скрипт можно выполнив команду edit <название файла>, если же такого файла не существует, MATLAB предложит его создать.

Незабудьте сохранить файл после внесения изменений: Ctrl+S. Несохраненные файлы MATLAB помечает *.

Лучшая практика говорит о сохранении файла с названием исключительно из латинских букв и цифр.

Варианты создания нового скрипт файла из панели инструментов:

matlab-creating-script-1

matlab-creating-script-2

Исполнение кода из MATLAB скрипта

Существует несколько вариантов исполнения кода из MATLAB скрипта:

  1. Скопировав и вставив код из файла в командную строку: Ctrl+CCtrl+V
  2. Выделив код → правая кнопка мыши → Evaluate Selection
  3. В панели инструментов EditorRun
  4. Из командной строки написав: <название файла>. Мы можем открыть файл написанный в командной строке выделилв его название и выполнив сочетание клавиш Ctrl+D.



  1. В отличие от компилируемых языков, интерпретируемым для исполнения программы не нужен машинный код; вместо этого программу построчно исполнят интерпретаторы. Это позволяет быстро тестировать и отлаживать код, но часто снижает скорость выполнения программ по сравнению с компилируемыми языками. 

  2. Или строками, что очевидно из контекста. Однако даже строки хранятся в виде вектора идентификационных номеров символов. 

  3. “Мистические числа” (англ.: magic numbers) — это числовые значения, которые встречаются в коде без объяснения их назначения. Например: x = x * 3.14159, число 3.14159 является “мистическим числом”. Лучше использовать переменную с понятным именем, например pi: x = x * pi

  4. MATLAB хранит все числа в формате IEEE с плавающей запятой с двойной (64-разрядной) точностью. Значение ans здесь на самом деле равно 0,766177651029692 (с точностью до 15 знаков после запятой).