Изучаем MATLAB за 10 минут
MATLAB (Matrix Laboratory) — это высокоуровневый язык программирования и среда для численных вычислений, разработки алгоритмов и визуализации данных. Созданный в конце 1970-х годов, MATLAB стал незаменимым инструментом в инженерии, науке и математике.
В этом руководстве мы разберем основы MATLAB и научимся работать с этой мощной вычислительной средой.
1. Ваша первая программа на MATLAB
Создай скрипт-файл с именем hello.m или вводи команды прямо в командном окне MATLAB.
disp('Hello, World!')
Или используя функцию fprintf:
fprintf('Hello, World!\n')
Результат будет таким:
Hello, World!
Функция disp() выводит содержимое напрямую, а fprintf() предоставляет больше возможностей для форматирования, похоже на printf в языке Си.
2. Основы синтаксиса
У MATLAB есть свои правила синтаксиса, которые отличаются от большинства универсальных языков программирования. Понимание этих основ необходимо для написания чистого и поддерживаемого кода.
2.1 Комментарии
Однострочные комментарии начинаются со знака процента %:
% This is a comment
x = 10; % This assigns 10 to x
Многострочные комментарии используют %{ и %}:
%{
This is a multi-line comment.
It can span multiple lines.
%}
2.2 Точка с запятой
Точка с запятой ; подавляет вывод результата. Без нее MATLAB показывает результат:
x = 5 % Displays: x = 5
y = 10; % No output, but y is assigned
2.3 Чувствительность к регистру
MATLAB чувствителен к регистру. A и a — это разные переменные:
A = 5;
a = 10;
disp(A) % Output: 5
disp(a) % Output: 10
2.4 Имена переменных
Имена переменных должны начинаться с буквы, за которой могут следовать буквы, цифры или знаки подчеркивания:
valid_name = 1;
another_valid_name_123 = 2;
% 123invalid = 3; % Error: cannot start with number
2.5 Базовые операции
MATLAB отлично справляется с матричными операциями. Создать матрицу очень просто:
A = [1 2 3; 4 5 6; 7 8 9] % 3x3 matrix
Результат:
A =
1 2 3
4 5 6
7 8 9
3. Переменные и типы данных
В MATLAB используется динамическая типизация. Переменные создаются при присваивании, а их тип определяется присвоенным значением.
3.1 Числовые типы
По умолчанию MATLAB хранит все числа в формате двойной точности с плавающей точкой:
% Integer
int_num = 42;
% Float
float_num = 3.14159;
% Scientific notation
sci_num = 2.5e-3; % 0.0025
3.2 Строки
Строковые переменные используют одинарные кавычки:
str = 'Hello, MATLAB';
str2 = "Hello, MATLAB"; % String array (R2016b+)
Объединение строк:
str1 = 'Hello';
str2 = 'World';
combined = [str1 ', ' str2]; % 'Hello, World'
3.3 Логические (булевы) значения
Логические значения могут быть true или false:
flag = true;
result = false;
% Logical operations
a = true;
b = false;
and_result = a && b; % false
or_result = a || b; % true
not_result = ~a; % false
3.4 Символьные массивы и строки
В MATLAB есть как символьные массивы, так и строковые объекты:
% Character array (older style)
char_arr = 'Hello';
% String object (modern style, R2016b+)
str_obj = "Hello";
% String objects are easier to work with
name = "Alice";
greeting = "Hello, " + name; % Works naturally
4. Структуры данных
MATLAB предоставляет несколько структур данных для разных случаев использования.
4.1 Векторы
Вектор — это одномерный массив:
% Row vector
row_vec = [1 2 3 4 5];
% Column vector
col_vec = [1; 2; 3; 4; 5];
% Using colon operator
range_vec = 1:5; % [1 2 3 4 5]
step_vec = 0:2:10; % [0 2 4 6 8 10]
% linspace for evenly spaced values
lin_vec = linspace(0, 10, 5); % [0 2.5 5 7.5 10]
4.2 Матрицы
Матрицы — это основа MATLAB:
% Direct matrix creation
A = [1 2 3; 4 5 6; 7 8 9];
% Accessing elements
element = A(2, 3); % Returns 6 (row 2, column 3)
% Matrix operations
B = A'; % Transpose
C = A * B; % Matrix multiplication
D = A .* B; % Element-wise multiplication
4.3 Ячейки
Массивы ячеек могут содержать данные разных типов:
% Create a cell array
cell_arr = {1, 'hello', [1 2 3], true};
% Access cell contents using curly braces
data = cell_arr{2}; % Returns 'hello'
% Access cell using parentheses
sub_cell = cell_arr(1:2); % Returns {1, 'hello'}
4.4 Структуры
Структуры похожи на словари с именованными полями:
% Create a structure
student.name = 'John';
student.age = 20;
student.major = 'Engineering';
% Access fields
disp(student.name); % Output: John
% Array of structures
students(1).name = 'Alice';
students(1).age = 21;
students(2).name = 'Bob';
students(2).age = 22;
4.5 Таблицы
Таблицы отлично подходят для табличных данных:
% Create a table
Age = [25; 30; 35];
Name = {'Alice'; 'Bob'; 'Charlie'};
Salary = [50000; 60000; 70000];
T = table(Name, Age, Salary);
% Access data
disp(T.Age);
disp(T.Name{1});
5. Операторы
MATLAB предоставляет различные операторы для арифметических, сравнения и логических операций.
5.1 Арифметические операторы
a = 10;
b = 3;
sum = a + b; % 13
diff = a - b; % 7
prod = a * b; % 30
quot = a / b; % 3.3333
int_div = floor(a/b); % 3
mod = mod(a, b); % 1 (remainder)
pow = a ^ b; % 1000
5.2 Поэлементные операторы
Поэлементные операторы работают с соответствующими элементами:
A = [1 2 3];
B = [4 5 6];
C = A .* B; % Element-wise: [4 10 18]
D = A.^2; % Element-wise square: [1 4 9]
5.3 Операторы сравнения
x = 5;
y = 10;
eq = (x == y); % false
neq = (x ~= y); % true
gt = (x > y); % false
lt = (x < y); % true
ge = (x >= y); % false
le = (x <= y); % true
5.4 Логические операторы
a = true;
b = false;
and_op = a & b; % false (element-wise AND)
or_op = a | b; % true (element-wise OR)
not_op = ~a; % false
and_short = a && b; % false (short-circuit AND)
or_short = a || b; % true (short-circuit OR)
6. Управление потоком выполнения
В MATLAB есть стандартные конструкции управления потоком, но синтаксис отличается от таких языков, как Python.
6.1 if-elseif-else
score = 85;
if score >= 90
grade = 'A';
elseif score >= 80
grade = 'B';
elseif score >= 70
grade = 'C';
else
grade = 'F';
end
disp(grade) % Output: B
6.2 switch
Оператор switch сравнивает одно выражение с несколькими случаями:
day = 'Monday';
switch day
case {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}
disp('Weekday');
case {'Saturday', 'Sunday'}
disp('Weekend');
otherwise
disp('Invalid day');
end
6.3 Цикл for
Цикл for перебирает диапазон или массив:
% Iterating over a range
for i = 1:5
disp(i);
end
% Iterating over an array
fruits = {'apple', 'banana', 'orange'};
for fruit = fruits
disp(fruit{1});
end
% Nested loops for matrix operations
A = [1 2; 3 4];
B = zeros(2, 2);
for i = 1:2
for j = 1:2
B(i, j) = A(i, j) * 2;
end
end
6.4 Цикл while
count = 0;
while count < 5
disp(count);
count = count + 1;
end
6.5 Управление циклом
Оператор break выходит из цикла, а continue переходит к следующей итерации:
% Using break
for i = 1:10
if i == 5
break;
end
disp(i);
end
% Output: 1 2 3 4
% Using continue
for i = 1:5
if mod(i, 2) == 0
continue; % Skip even numbers
end
disp(i);
end
% Output: 1 3 5
7. Ввод и вывод
7.1 Ввод данных пользователем
Используй функцию input() для получения ввода от пользователя:
% Get numeric input
num = input('Enter a number: ');
% Get string input
name = input('Enter your name: ', 's');
% Get expression input (evaluates the input)
expr = input('Enter an expression: ');
7.2 Вывод результатов
Несколько функций позволяют выводить данные:
% disp - simple display
disp('Hello');
disp([1 2 3]);
% fprintf - formatted output
name = 'Alice';
age = 25;
fprintf('Name: %s, Age: %d\n', name, age);
% sprintf - create formatted string
str = sprintf('Value: %.2f', 3.14159);
disp(str);
7.3 Спецификаторы формата
Основные спецификаторы формата в MATLAB:
% %s - string
% %d - integer
% %f - floating point
% %.2f - floating point with 2 decimal places
% %e - scientific notation
fprintf('%d %.2f %e\n', 42, 3.14159, 1000)
% Output: 42 3.14 1.000000e+03
8. Функции
Функции в MATLAB обычно определяются в отдельных файлах, но анонимные функции позволяют создавать функции прямо в коде.
8.1 Анонимные функции
Анонимные функции создают простые функции без отдельных файлов:
% Single input
square = @(x) x^2;
disp(square(5)); % Output: 25
% Multiple inputs
add = @(x, y) x + y;
disp(add(3, 4)); % Output: 7
% Multiple expressions
hypot = @(x, y) sqrt(x^2 + y^2);
disp(hypot(3, 4)); % Output: 5
8.2 Файлы функций
Создай файл с именем myfunc.m:
function y = myfunc(x)
y = x^2 + 1;
end
Вызов функции:
result = myfunc(5); % Output: 26
8.3 Функции с несколькими выходными параметрами
function [sum, prod] = calc(x, y)
sum = x + y;
prod = x * y;
end
Вызов с несколькими выходными параметрами:
[s, p] = calc(3, 4);
disp(s); % 7
disp(p); % 12
8.4 Переменное количество аргументов
Используй varargin и varargout для переменного числа аргументов:
function result = sum_all(varargin)
result = 0;
for i = 1:length(varargin)
result = result + varargin{i};
end
end
% Call with any number of arguments
total = sum_all(1, 2, 3, 4, 5); % Output: 15
9. Скриптовые файлы
Скрипты — это файлы .m, которые содержат последовательность команд MATLAB. Они работают с данными в рабочей области:
% save as myscript.m
% Calculate statistics for a dataset
data = [1 2 3 4 5 6 7 8 9 10];
mean_val = mean(data);
std_val = std(data);
max_val = max(data);
min_val = min(data);
fprintf('Mean: %.2f\n', mean_val);
fprintf('Std: %.2f\n', std_val);
fprintf('Max: %d\n', max_val);
fprintf('Min: %d\n', min_val);
10. Обработка ошибок
Используй try-catch для обработки ошибок:
try
result = risky_operation();
catch ME
fprintf('Error: %s\n', ME.message);
% Handle the error
result = 0;
end
Использование error() для генерации ошибок:
function result = divide(a, b)
if b == 0
error('Division by zero is not allowed');
end
result = a / b;
end
11. Работа с файлами
11.1 Сохранение и загрузка данных
% Save variables to file
x = [1 2 3];
y = 'hello';
save('data.mat', 'x', 'y');
% Load variables from file
load('data.mat');
% Save to text file
writematrix(x, 'data.txt');
% Read from text file
data = readmatrix('data.txt');
11.2 Работа с текстовыми файлами
% Write to text file
fid = fopen('output.txt', 'w');
fprintf(fid, 'Line 1\n');
fprintf(fid, 'Line 2\n');
fclose(fid);
% Read from text file
fid = fopen('output.txt', 'r');
while ~feof(fid)
line = fgetl(fid);
if ischar(line)
disp(line);
end
end
fclose(fid);
Использование textscan для структурированного чтения:
fid = fopen('data.txt', 'r');
format = '%s %d %f';
C = textscan(fid, format);
fclose(fid);
name = C{1};
age = C{2};
score = C{3};
12. Построение графиков
Возможности построения графиков в MATLAB — одна из самых сильных сторон этой системы.
12.1 Базовое 2D построение
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y);
xlabel('x');
ylabel('sin(x)');
title('Sine Wave');
grid on;
12.2 Несколько графиков
x = 0:0.1:2*pi;
% Subplots
subplot(2, 1, 1);
plot(x, sin(x));
title('Sine');
subplot(2, 1, 2);
plot(x, cos(x));
title('Cosine');
12.3 Настройка графиков
x = 0:0.1:10;
y1 = x;
y2 = x.^2;
plot(x, y1, 'b-', 'LineWidth', 2); % Blue solid line
hold on;
plot(x, y2, 'r--', 'LineWidth', 2); % Red dashed line
hold off;
xlabel('X');
ylabel('Y');
legend('Linear', 'Quadratic');
title('Linear vs Quadratic');
grid on;
12.4 Другие типы графиков
% Bar chart
bar([1 2 3 4], [10 20 15 25]);
% Histogram
data = randn(1000, 1);
histogram(data, 30);
% Scatter plot
x = rand(100, 1);
y = 2*x + randn(100, 1)*0.1;
scatter(x, y);
