Заполнение вручную через цикл

Matlab

Статистические методы

Нейронные сети

 

 

Matlab

 

Matlab - язык программирования и пакет прикладных программ для решения технических задач и приложений. Так-то.

 

В Matlab есть хороший справочник функций, при любых вопросах - в первую очередь смотреть туда. Доступен на вкладке Help.

 

Внешний Matlab вид на рис. 1.

РРис. 1.

Переменные

Отличительная особенность языка Matlab - отсутствие необходимости инициализировать переменные и указывать тип данных (в отличие от других языков). Например, для создания переменной A и присвоения ей значения (будет 10) необходимо ввести

А = 10

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

B = 15

C = 10 + 15

В ответ командная строка напишет что-то вроде:

C =

25

ежели конечный результат не является переменной, создаётся переменная ans, которой присваивается результат. Например, ежели набрать в командной строке:

10+15

В ответ командная строка выдаст:

ans =

25

 

Для отключения вывода результата в командную строку в конце команды необходим сивмол;

Например, после следующей команды результат будет сохранён в переменную ans и не будет выведен в командную строку:

10+15;

 

Написание программ

В распространённых языках программирования (например, Си) любая программа должна иметь точку входа — функцию main(), которая выполняется первой. Кроме того, в них необходимо подключать различные файлы библиотек, с которыми будет производится работа в программе. В Matlab всего этого делать не нужно.

Для выполнения простых команд достаточно вписывать их в командную строку. Но для удобства используют скрипты. Они имеют расширение.m и создаются через: File -> New -> Script. В скриптах выполнение кода происходит с верхней строки, последовательно.

После написания нажать F5 для запуска кода.

 

Комментарии в коде начинаются с символа %

Множественные комментарии отсутствуют, но можно выделить текст и нажать ctrl+R для комментирования блока кода, раскомментирование блока кода производится нажатием ctrl+T.

 

Перенос строки

Ежели команда слишком длинная, её можно разделить на несколько строк, при этом для переноса строки нужно в конце написать:... (три точки)

Циклы и условия

Отличие от других языков программирования в отсутствии фигурных скобок. Цикл начинается со слова while или for и заканчивается словом end. Во вложенных циклах каждому условию\циклу должен соответствовать свой end.

Пример использования цикла for

for i=1:2:10

% do something here

end

 

Здесь 1:2:10 - начальное значение=1, шаг=2, конечное значение=10. ежели шаг = 1, то его можно не указывать: for i=1:10.

 

Пример использования цикла while

while var1==1

% do something here

end

 

Множественный условный цикл if

if p==1

% do something here

elif p==2

% do anything else here

else

% do anything else here

end

 

В коде каждая строка вложенного цикла имеет отступ. Он необходим только для удобства чтения, ставится кнопкой tab или автоматически нажатием enter в конце предыдущей строки.

 

Логические операторы: логическое или: ||, логическое и: &&

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

Массивы

Массив в Matlab - одномерная (вектор) или двумерная (матрица) упорядоченная последовательность значений. Нумерация в массиве начинается с единицы (в других языка - с нуля).

 

Обращение к элементам массива происходит так:

массив(строка, столбец)

например, присвоение значения 5го элемента массива переменной vec5:

vec5 = vector1(5);

 

Помимо числовых массивов (включают как целые, так и числа с запятой), массивы могут содержать строковые данные (т.е. буквенные символы). В этом случае массив преобразуется в массив ячеек, называемый cell. В массиве cell все данные, даже числовые преобразуются к строковому виду, обращение к любому элементу осуществляется через фигурные скобки:

массив_ячеек{строка, столбец}

Преобразование массива cell к нормальному виду с помощью функции:

cell2mat(cell_array);

 

Заполнение массива вручную:

array1 = [1,2];

Создаётся одномерный вектор из двух элементов.

Заполнение двумерного массива:

array2 = [1,2,3;4,5,6];

 

Здесь, (запятая) - разделитель элементов строки,; (точка с запятой) - разделитель строк. Таким образом, создаётся массив 2 на 3 (2 строки по 3 столбца, рисунок ниже).

 

Квадратные скобки [ ] в Matlab используются только при инициализации массива, круглые () — для обращения к элементам массивов и в вызовах функций.

 

Обращение к нескольким элементам массива происходит с помощью символа: (двоеточие)

array3 = array2(1:2,2:3);

Здесь array3 состоит из части массива array2, включает четыре элемента 1-ой и 2-ой строки (array2(1:2,2:3)) и 2-го и 3-го столбца ((array2(1:2, 2:3),рисунок ниже)

 

Таким же способом можно заполнять массивы одинаковыми элементами. Например, массив 3 на 3 из единиц:

array_of_ones(1:3,1:3) = 1;

 

Точно так же можно изменять содержимое сущесвтующих массивов. Например

array_of_ones(2:3,2:3) = 0;

обнулит элементы пересечения 2 и 3 строки и столбца (рисунок ниже)

 

 

 

Ежели вокруг двоеточия при указании элементов массива цифры не указаны, то автоматически выбирается весь диапазон. Например, следующий код выделит всю первую строку (3 эелемента):

first_row = array_of_ones(1,:);

 

Встроенные функции создания массив из единиц:

ones(row,col);

zeros(row,col);

где row - число строк, col - число столбцов

 

Объединение массивов происходит точно так же, как и создание массива вручную, только вместо цифр используются массивы.

Пусть массив array4 имеет размерность 3x2, массив array5 - 3x3, тогда объединённый (горизонтально, по строкам) массив array6 будет иметь размерность 3х5:

array4 = zeros(3,2); % массив 3х3 из нулей

array5 = ones(3,3); % массив 3х3 из единиц

array6 = [array4,array5]; % конечный массив 3х5

Первые 2 столбца массива array6 будут состоять из нулей, следующие 3 - из единиц.

 

Заполнение вручную через цикл

Заполнение двумерного массива 5 на 3 (5 строк по 3 столбца) через цикл for:

for i=1:5

for j=1:3

    array1(i,j) = i*3+j;

end

end

 

Удаление строки из массива:

array6(1,:) = [];

Удалится вся первая строка массива. После этого размерность массива по строкам уменьшится на единицу. Аналогично

array6(:,2) = [];

удалит второй столбец.

 

Транспонирование массива - нужно добавить символ ' (апостроф):

array_transposed = array6';

 

Математические операции с массивами: математические операции с массивом и числом происходят как и обычно, умножение и деление массива на массив происходит по правилам матричной алгебры. Для поэлементного умножения \ деления двух массивов одинаковой размерности необходимо перед математическим оператором поставить символ. (точка):

array1 = [1, 2, 3; 1, 2, 3];

array2 = [2, 2, 2; 3, 3, 3];

array3 = array1.*array2

Результат:

array3 =

2 4 6

3 6 9

Чтение из файла

 

Ежели файл с исходными данными записан в формате xls (Эксель):

[num_data text_data raw_data] = xlsread(' file_name.xls ');

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

Здесь num_data - массив, в который положатся все числовые данные, тип данных - интежер или флоат, как повезёт; text_data - массив, в котором будут все текстовые данные, формата чар; и raw_data - массив всех элементов исходного файла смешанного формата (cell).

 

Ежели файл с исходными данными записан в другом формате (.txt,.dat, др.), то пользуются невероятной функцией textscan():

fileID = fopen(filename,'r'); % открыть файл

data_raw = textscan(fileID,'%f %f'); % считать данные

data_cell = cell2mat(data_raw); % Приведение cell к массиву

data_mat = data_cell(:,:);    % Приведение cell к массиву

fclose(fileID);             % закрыть файл

Здесь %f %f в функции textscan означает, что файл содержит два столбца с числами с плавающей точкой (float). Ежели там целочисленные значения - каждый столбец будет обозначаться %i (integer) или %d (decimal) Ежели там буковки - %s (string, строка символов), %c (char, один символ).

fopen() - функция открытия файла, первый аргумент - название открываемого файла, второй аргумент - режим открытия. 'r' - только для чтения, 'w' - для записи.

 

Для записи файлов можно использовать функцию fprintf(), с синтаксисом,похожим на textscan(). Точно так же нужно открывать файл (в режиме записи), по окончании закрывать. Например:

fileID = fopen(filename,'w'); % открыть файл

fprintf(fileID,'%s','pew-pew'); % записать одну строковую перем.

fclose(fileID);             % закрыть файл

 

Уточнение по поводу функции fprintf(). Первый аргумент - дескриптор файла, второй аргумент - формат записываемых данных - это одна строка ('%s' из примера выше), по шаблону которой будут записываться все столбцы, может содержать как обычный текст (будет повторяться в каждой строке), так и символы для подстановки (начинаются с %). Третий аргумент - массив, из которого производится подстановка по формату строки.

Для того, чтобы форматирование в записанном файле было корректным, строка формата должна оканчиваться символом конца строки - '\n', т.е. пример выше будет выглядеть как '%s\n'.

 

Ежели записывается большой файл с большим количеством столбцов, удобно записывать формат с помощью функции repmat(). Эта функция копирует элемент нужное количество раз; принимает 3 аргумента: 1 аргумент - что именно копировать (число, строка, вектор, столбец), 2 аргумент - число строк повторений, 3 аргумент - число стобцов повторений. Например:

repmat('%d ',1,5) создаст следующую строку: '%d %d %d %d %d ', которая повторяется на 1 строку (2 аргумент) и на 5 столбцов (3 аргумент).

 

Для добавления символа завершения строки можно использовать функцию strcat() - это функция, объединяющая несколько строк в одну (str от string - строка, cat от con cat enation - объединение). Тогда, если имеется массив array1 размерностью NxM, записать его в файл можно так:

 

[N M] = size(array1);

fileID = fopen(filename,'w'); % открыть файл

frpintf(fileID, strcat(repmat('%d ', 1, M),'\n'), array1);

fclose(fileID);             % закрыть файл

 

Если что-то идёт не так - возможно array1 нужно транспонировать.

 

Построение графиков

 

Для построения двумерных графиков существует функция plot(Х,У). Где X — вектор значений по оси Х, У — по У. Размерности этих двух векторов должны совпадать.

 

Пример:

Х = 10:20;   % создать вектор от 10 до 20 с шагом в 1

У = 30:2:50; % создать вектор от 30 до 50 с шагом в 2

plot(X,Y);

Выведет просто наклонную прямую линию.

 

Функция plot() имеет возможность принимать дополнительные аргументы для оформления графика. Для изменения цвета необходимо добавить букву: r, k, c, m, y или b. Для изменения символа точек — добавить символ x, o, -, ^ или *. Эти аргументы необходимо вставлять в одинарных кавычках после осей. Например:

plot(X,Y,'oy');

выведет график с линией жёлтого (y, yellow) цвета, где точки будут обозначаться кружочками (o).

 

Для изменения толщины линии необходим аргумент 'linewidth', затем толщина в пикселях, без кавычек. Например:

plot(X,Y,'linewidth',2);

выведет график с толстой линией (2 пикселя).

 

Точное изменение цвета — необходим аргумент 'rgb', затем [1.0 1.0 1.0] — где первая цифра означает интенсивность красного цвета (от нуля — минимум, до 1.0 - максимум), вторая — интенсивность зелёного цвета, третья — синего конечно.

Например,

plot(X,Y,'rgb',[1.0,0.5,0.0]);

выведет график оранжевого цвета.

 

Полный список:

http://www.mathworks.com/help/matlab/ref/linespec.html?requestedDomain=www.mathworks.com

 

По умолчанию каждое новое построение графика очищает окно с графиками, которое открыто до него, поэтому ежели необходимо наложить несколько графиков - после первого построения нужно написать следующее:

hold on;

 

Например,

plot(X1,Y1,'r'); % построение 1го графика, красным цветом

hold on;     % включение наложения графиков

plot(X2,Y2,'g'); % построение 2го графика синим цветом, наложится на предыдущий график

plot(X3,Y3,'y'); % построение 3-го графика, жёлтым цветом, также наложится, потому что наложение уже включено

Наложенные графики могут выглядеть так:

 

Для построения одновременно нескольких графиков в разных окнах необходимо перед каждым построением писать следующую строку:

figure;

 

Например, следующий код создаст два окна со своими графиками

figure;      % новое окно

plot(X1,Y1,'r'); % построение графика

figure;      % новое окно

plot(X2,Y2,'g'); % построение графика в новом окне

 

 

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

Например, для двух графиков один над другим испольбзуется следующий код:

subplot(2,1,1);   % два графика в столбик, один ряд, первый график

plot(X1,Y1,'r');  % малюванне

subplot(2,1,2);   % два графика в столбик, один ряд, второй график

plot(X2,Y2,'g');  % малюванне

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: