Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_Матлаб Введение 120206.doc
Скачиваний:
4
Добавлен:
03.05.2019
Размер:
489 Кб
Скачать
☆

4. Операции с векторами и матрицами

Синтаксис и данные

Переменные в МATLAB не нужно предварительно описывать, указывая их тип. Все данные хранятся в виде массивов: числовые переменные (внутренний тип numeric), текстовые строки (char), ячейки (cell) и структуры (struct), при помощи которых создаются пользовательские объекты (user object).

Числовые массивы состоят из комплексных чисел с двойной точностью (тип double) и могут храниться целиком или в упакованном виде в случае разреженной матрицы (тип sparse). Двумерный массив – это матрица, одномерный – вектор, а скаляр – матрица размера 1х1. Кроме того, существуют несколько форматов записи данных в файлы (int8, uint8,…), отличающихся количеством используемых байтов. Схема типов массивов и их форматов в МATLAB приведена на рис. 3.

Имя переменной должно начинаться с буквы, за ней могут идти буквы, цифры и символ подчеркивания. Допустимы имена любой длины, но МATLAB идентифицирует их по первым 31 символам и различает большие и малые буквы. В МATLAB имеется ряд констант, описанных в табл. 1. Отметим, что имя NaN (Not-a-Number) зарезервировано для результата операций 0/0, 0*inf, inf-inf и т. п. Информацию об имеющихся константах можно получить, вызвав справку о разделе команд elmat.

Буквы i и j можно использовать как обычные переменные, например, в качестве счетчика цикла. В этом случае мнимую единицу можно задать заново:

» jj=sqrt(-1)

jj=

0+1.0000i

Рис. 3. Типы массивов и их форматов в МATLAB

Заметим, что для обозначения мнимой единицы применяются i и j (если в данной программе они не были уже использованы в другом качестве). Выражения и команды в МATLAB записываются с помощью различных символов, краткое описание которых дано в табл. 1.

Таблица 1. Зарезервированные имена констант

Имя

Описание

ans

i, j

pi

eps

realmax

realmin

inf

NaN

end

Результат последней операции

Мнимая единица

Число 

Машинная точность

Максимальное вещественное число

Минимальное вещественное число

Бесконечность

Нечисловая переменная

Наибольшее значение индекса размерности массива

Приведем пример использования ряда зарезервированных слов и специальных символов для формирования матрицы размера 2х3:

» A=[i*realmax, pi:5; - realmin+j*eps –inf inf/Inf] % пример

А=

0 +1.7977е+3081 3.1416е+000 4.1416е+000

-2.2251е-308 +2.2204е-016i -Inf NaN

В этом примере точка с запятой отделяет строки матрицы; в качестве мнимой единицы фигурируют символы i и j, а в правой части строки знаком % отмечено начало комментария. Для вывода матрицы на экран использован формат short e, а если задать формат short, то матрица А будет выглядеть следующим образом:

» format short, A

А =

1.0е+308 *

0+1.79771 0.0000 0.0000

0.0000 + Inf NaN

Обратим внимание, что второй и третий элементы первой строки и первый элемент второй строки не равны нулю, а просто произошло округление при выводе матрицы на экран.

Таблица 2. Специальные символы

Символ

Назначение

[]

,

;

:

()

.

…

%

!

'

Квадратные скобки используются при задании матриц и векторов

Пробел служит для отделения элементов матриц

Запятая применяется для разделения элементов матриц и операторов в строке ввода

Точка с запятой отделяет строки матриц, а точка с запятой в конце оператора (команды) отменяет вывод результата на экран

Двоеточие используется для указания диапазона (интервала изменения величины) и в качестве знака групповой операции над элементами матриц

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

Точка отделяет дробную часть числа от целой его части, а также применяется в составе комбинированных знаков (.*, ,^, ./, .\)

Три точки и более в конце строки отмечают продолжение выражения на следующей строке

Знак процента обозначает начало комментария

Восклицательный знак отмечает начало команды MS-DOS, например, команда !dir выводит оглавление текущего каталога (директории)

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

Задание матриц

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

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

» а=[7е-6+5i; 4; 3.2e1] % Ввод вектора-столбца

а=

0.0000 + 5.0000i

4.0000

32.0000

или вводом нескольких строк:

» a=[ % Ввод вектора по строкам

»7е-6+5i

»4

»3.2e1];

В качестве примера задания вектора при помощи функций МATLAB приведем команды linspace и logspace. Они позволяют создавать векторы со значениями, меняющимися соответственно в арифметической и геометрической прогрессии. Три параметра команды linspace задают соответственно первый и последний члены арифметической прогрессии, а также число членов. Например:

» linspace(1,-2.4)

ans=

1 0 -1 -2

Параметры команды logspace задают, соответственно десятичные порядки первого и последнего членов геометрической прогрессии, а также число членов. Например:

» logspace(1,-1,5)

ans=

10.0000 3.1623 1.0000 0.3162 0.1000

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

» n:m:k

В результате будет сформирован вектор, последний элемент которого не больше k для положительного шага m, и не меньше k – для отрицательного:

[n,n+m,n+m+m,…]

Например:

» а=1: -2: -4

а=

1 -1 -3

Задание диапазона используется также при организации цикла, смотрите раздел 11 "Элементы программирования" .

Большую матрицу можно определить поэлементно при выполнении оператора цикла или набрать ее в обычном редакторе в виде ASCII-файла (например, data.ext), а затем считать при помощи команды

» load data.ext

В результате матрица будет присвоена переменной data (без расширения).

Для задания ряда матриц специального вида имеются команды MATLAB, аргументами которых являются размерности создаваемых матриц. Если указано одно число N, то формируется квадратная матрица NxN. Например, команда rand (n,m) создаст случайную матрицу размерности n*m, а команда hilb(n) определит гильбертову матрицу n-го порядка. Кроме того, для задания матрицы можно написать свою команду – функцию, сохранив ее в виде m-файла (см. далее).

Таблица 3 . Функции описания матриц

Имя

Назначение

eye

zeros

ones

rand

hilb

magic

diag

triu

tril

Единичная матрица

Нулевая матрица

Матрица из единиц

Случайная матрица со значениями из интервала [0,1]

Гильбертова матрица

Матрица магического квадрата

Создание диагональной матрицы или выделение диагонали

Выделение верхней треугольной части матрицы

Выделение нижней треугольной части матрицы

Определение теплицевой матрицы имеет особый формат:

» T = toeplitz([1 2 3], [1 4 6])

T =

1 4 6

2 1 4

3 2 1

В MATLAB имеется возможность, обратившись к команде gallery, получить матрицу из подготовленного разработчиками набора стандартных матриц. Чтобы посмотреть список матриц достаточно набрать

» help gallery

Чтобы вызвать нужную матрицу, нужно обратиться к функции gallery

» [out1,out2,…]=gallery(NAME,PAR1,PAR2,…)

Здесь NAME - имя матрицы из списка gallery, а PAR1, PAR2 – дополнительные параметры. Например, разреженная матрица для задачи Пуассона при сетке 6х6 будет получена по команде:

» Poi = gallery("poisson",6); size(Poi)

ans=

36 36

Из стандартных блоков можно сформировать новую матрицу:

»B=[triu(ones(2)),zeros(2,1);ones(1,2),eye(1)]

B =

1 1 0

0 1 0

1 1 1

В результате получается матрица размерности 3х3. Напомним, что при задании матрицы запятая отделяет элементы строки, а точка с запятой разделяет строки.

Обращение к элементам матрицы

Обращение к элементу матрицы производится по естественному правилу – в круглых скобках после имени матрицы даются индексы, которые должны быть положительными целыми числами. Например, А(2,1) означает элемент из второй строки первого столбца матрицы А.

Для дальнейших примеров ведем матрицу 2х2:

» A=[1 2+5*i; 4.6e-7 3];

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

» A(3/2+4*i)

Warning; Complex part of array subscript is ignored.

Warning: Subscript indices must be integer values.

ans=

4.6000e-007

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

» A(2,3)=sin(1) % Третий элемент строки

А=

1.0000 2.0000+5.0000i 0

0.0000 3.0000 0.8415

Заметим, что изначально матрица А состояла из двух строк и столбцов. Расширение матрицы (добавление третьего элемента во вторую строку) не потребовало никаких дополнительных действий, при этом третий элемент в первой строке был обнулен автоматически.

Если обратиться к отсутствующему элементу матрицы, то будет выведено сообщение об ошибке:

» A(3.1)^2 % У матрицы только две строки!

Index exceeds matrix dimensions.

Размер матрицы можно уточнить по команде size, а результат команды size можно использовать для организации новой матрицы. Например, нулевая матрица того же порядка, что и матрица А, будет сформирована по команде

» A2=zeros(size(A))

A2=

0 0 0

0 0 0

Для преобразования матрицы в матрицу с другим числом строк и столбцов служит команда reshape.

» A3=rehape(A2,3,2)

A3=

0 0

0 0

0 0

С помощью двоеточия легко выделить часть матрицы. Например, вектор из первых двух элементов третьего столбца матрицы А задается выражением

» А(1:2.3)

ans =

0

0.8415

Двоеточие само по себе означает строку или столбец целиком. Работа с индексами) МАТLАВ очень удобна. Например, чтобы выделить несколько столбцов масси­ва, достаточно организовать вектор из номеров столбцов. Это можно сделать яв-1ым перечислением, а можно указать нужный диапазон. Для выделения матрицы, вставленной из нечетных столбцов матрицы А, используем команду

»А(:.1:2:3)

ans=

.1.0000. 0

0.0000 0.8415

Здесь конструкция 1:2:3 означает изменение второго индекса от единицы до трех с шагом два. Двоеточие применяется также для замещения элементов матрицы. Следующая команда позволяет переставить первую и вторую строки матрицы А:

» А([1.2],:)-А([2.•!],:)

А- =

0.0000 3.0000 0.8415

1.0000 2.0000 + 5.00001 0

Здесь в качестве индекса выступают векторы [1,2] и [2,1], а для их оформления использованы равносильные разделители: запятая и пробел. Для удаления эле­мента вектора достаточно присвоить ему пустой массив — пару квадратных ско­бок []. Чтобы вычеркнуть одну или несколько строк (столбцов) матрицы нужно указать диапазон удаляемых строк (столбцов) для одной размерности и поставить Двоеточие для другой размерности. Например, для удаления двух последних стол бцов матрицы А достаточно ввести команду

»A(:, 2:еnd)=!;] % вырезание строк

а =

0.0000

11.0000

Обратим внимание, что вместо числового значения индекса указано зарезервированное имя епd — максимальное значение индекса.

В списке аргументов size второй параметр позволяет определить соответствующую размерность матрицы, например найти число столбцов матрицы. Для нахождения длины вектора можно воспользоваться также командой leenqth. Число столбцов матрицы А1 равно 3 независимо от того, каким способом пользоваться:

»size(A1.2). lenqth(A1(1,: ))]

ans =

3 3

Вместо двоеточия можно также использовать функцию-синоним со1оn.

Арифметические операции

Набор арифметических операций в МАТLАВ состоит из стандартных операций сложения-вычитания, умножения-деления, операции возведения в степень и до­полнен специальными матричными операциями. Запись операций сложения (вы­читания) и умножения матриц естественна. Если операция применяется к матрицам, размеры которых не согласованы, то будет выведено сообщение об ошибке. Для поэлементного выполнения операций умножения, деления и возведения в сте­пень применяются комбинированные знаки (точка и знак операции). Например, если за матрицей стоит знак ( ^ ), то она возводится в степень, а комбинация (.^ ) означает возведение в степень каждого элемента матрицы. При умножении (сложении, вычитании, делении) матрицы на число соответствующая операция всегда производится поэлементно.

Проиллюстрируем различие обычного и поэлементного умножений при помощи следующего примера. Введем матрицу Н размера 2х2 и матрицу 0 из единиц той же размерности:

» H=[0 1; 2 З]; О= оnes(size(Н))

Н =

0 1

2 3

. О=

1 1

1 1

Перемножим матрицы, используя обычное умножение:

» H*0

ans =

1 1

5 5 ,

Теперь применим поэлементную операцию:

» H.*О

ans=

0 1

2 3

Понятно, что при поэлементном умножении вектора Ь=[1,2,3] на себя (b.*b) или при поэлементном возведении в квадрат (b.^2) результат получается одинаковым::

[1 4 9].

Таблица 4. Знаки операций

Символ

Назначение

+, -

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

*

Знак умножения обозначает матричное умножение; для поэлементного умножения матрицы применяется комбинированный знак (.*)

'

Апостроф обозначает операцию транспонирования (вместе с комплексным сопряжением); транспонирование без вычисления сопряжения обозначается при помощи комбинированного знака (.')

/

Левое деление

\

Правое деление

^

Оператор возведения в степень; для поэлементного возведения в степень применяется комбинированный знак (.^)

Образуем матрицу умножением вектора-столбца, полученного транспонированием из строки, на исходный вектор-строку:

» C=b*b

C=

1 2 3

2 4 6

3 6 9

Прибавим к матрице С единичную матрицу той же размерности, умноженную на комплексное число +1, и вычтем из полученного результата число 2:

» D=C+(рi+i)*еуе(size(С)) -2

D=

2.1416+ 1.0000i 0 1.0000

0 5.1416 + 1.0000i 4.0000

1.0000 4.0000 10.1416 + 1.0000i

Для вычитания числа из матрицы оно заменяется матрицей нужного размера, все элементы которой равны данному числу, а уже затем вычисляется разность матриц.

Операция транспонирования для матрицы D дает следующий результат:

» D

аns =

2.1416 - 1.0000i 0 1.0000

0 5.1416 - 1.0000i 4.0000

1.0000 4.0000 10.1416 - 1.0000i

Если при сложении и умножении размеры матриц не соответствуют, то будет выведено сообщение об ошибке. Например:

» ones(2)*eye(3)

??? Error using => *

Inner matrix dimensions must agree

Матричное левое деление может быть пояснено на примере системы линейных алгебраических уравнений Ах=Ь. Для ее решения достаточно набрать

» A/b

Соответственно, для системы хА=Ь будет получено решение (если оно есть) при помощи операции правого деления

» b/А

При левом делении в случае квадратной матрицы используется метод Гаусса. Если матрица А не квадратная, то применяется факторизация Хаусхолдера с обнулением столбцов, а решение для недоопределенных или переопределенных систем на­ходится методом наименьших квадратов. Правое деление может быть оформлено в терминах левого деления:

b/А=(А'\b')'

Представим пример для введенных ранее матрицы С и вектора b:

» b\С

ans =

1.0000

2.0000

3.000

Логические операции

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

Таблица 5. Операции отношения

Символ

Назначение

Имя функции

<

Меньше

lt

>=

Больше или равно

qe

>

Больше

qt

<=

Меньше или равно

le

= =

Равно

eq

~ =

Не равно

ne

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

Операции (==, ~=) проводят сравнение вещественных и мнимых частей комплексных чисел, а операции (>, <, >=, <=) - только вещественных частей.

Для логических операций ненулевое число отождествляется с единицей. Приведем примеры:

» а=[1 2; 3 4] % ввод матрицы

a=

1 2

3 4

» b=2; % ввод скаляра

» c=a>b % результат сравнения - матрица

c=

0 1

1 1

» a~=c % сравнение матриц - матрица

ans=

1 1

1 1

Таблица 6. Логические операции

символ

Назначение

Имя команды

&

Логическое “и”

and

|

Логическое “или

or

~

Отрицание

not

Исключительное “или”

xor

Логические операции можно записывать в виде функций. Так, последнее сравнение представимо в виде:

» ne(а.с) % функция сравнения матриц

Необходимость логических операций возникает, например, в условных операторах языка МАТLАВ. При этом арифметические операции всегда имеют приоритет по отношению к логическим.

Элементарные логические операции дополнены набором функций МАТLАВ, позволяющих проверить для матриц некоторые условия, см. табл. 7. Проверка для матриц проводится по столбцам. Результатом проверки для вектора является число.

Проиллюстрируем некоторые из этих команд на следующих примерах. Проверим массив с на наличие ненулевых элементов:

» аns(с')

ans=

  1. 1

Ряд функций дает возможность выявить пустую переменную (isempty), идентичность матриц (isequal), ответить, числовой ли это массив (isnumeris):

» [isnumeric (с) isemptу([]) isemptу(с) isequal(а,с)]

аns=

1 1 0 0

Наконец, есть команда find, которая выводит индексы и значения согласно заданному условию. Например, для массива с, полученного ранее, команда поиска элементов, тождественно равных единице, выведет:

» d=find(с==1) .. d=

2

4

Заметим, что результат содержит ссылки на два единичных элемента массива с,' при этом используется одномерная индексация.

Таблица 7. Команды проверки и сравнения

Имя

Назначение

find

Поиск значений согласно заданному условию; определение индексов

all

Проверка того, что все элементы не равны нулю

any

Проверка того, что хотя бы один элемент не равен нулю

isempty

Выявление пустого массива

isequal

Проверка равенства матриц

issparse

Проверка матрицы на разреженность

nonzeros

Вывод ненулевых элементов массива

finite

Выявление ограниченных элементов массива

isnumeric

Проверка, является ли массив числовым

lsinf

Выявление бесконечных элементов массива

isnan

Выявление элементов" нечислового типа

isletter

Проверка на символ

isstr

Проверка на строковую переменную

laqlobal

Проверка на глобальную переменную

rcmp

Сравнение двух строк.

Напомним, что матричные данные размещаются в памяти последовательно по столбцам. Действительно,

» с(d(2))-с(4)

аns=

0

Приведем еще пример выделения нужных данных из массива. Рассмотрим задачу 1 нахождения простых чисел на интервале [100,130]. В МАТLАВ имеется команда isprime, проверяющая число на простоту:

» А = 100:1З0; Р = А(find (isprime(А)))

р =

101 103 107 109 113. 127 .

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

Текстовые строки

Символы и текстовые строки в МАТLАВ вводятся при помощи простых кавычек. Во внутреннем представлении символы даны целыми числами. Конвертировать массив символов в числовую матрицу позволяет команда double. Обратная операция совершается по команде char. Печатаемые символы из стандартного набора ASCII представлены числами от 32 до 255. Объединить текстовые строки можно просто заключив их в квадратные скобки или при помощи команды strcat. Приведем примеры для данных команд. Вначале введем строку:

» s= ‘Привет'

s=

Привет

Отметим, что для ввода русских букв следует выбрать в меню File /Preferences/ Command Windows Font шрифт с русской кодировкой. Теперь найдем коды введен­ных символов:

» y=double(s)

y=

207 240 232 226 229 242

Объединим две строки:

» h=[v ‘’ от МАТLАВ "]

h=

Привет от МАТLАВ

Тот же результат получится, если вместо переменной v использовать строковую переменную s. В завершение попробуем применить команду strcat:

» strcat:(s,v)

Warning: Input must be a string.

>In C:\ MATLABR11\toolbox\matlab\strfun\deblank.m at line 15

>In C:\ MATLABR11\toolbox\matlab\strfun\strcat.m at line 57

ans=

ПриветПривет

Действительно, переменная v не является строкой, однако, выведя предупрежде­ние, МАТLАВ попытался выполнить запрашиваемое соединение переменных. В результате получилась текстовая строка.

Для перевода численных данных в строковые переменные имеется ряд команд преобразования. В табл. 8 приведены некоторые команды для этих и обратных операций, а полный список можно получить по команде

help strfun

Приведем простой пример:

» z=1.2e3; strcat (‘’ z=’’, num2str(z))

ans=

z=1200

Таблица 8. Команды преобразования строка/число

Имя команды

Действие

num2str

Перевод числа в строку

int2str

Перевод целого числа в строку

mat2str

Преобразование матрицы в строку

str2mat

Объединение строк в матрицу

str2num

Преобразование строки в число

strcat

Объединение строк

Многомерные массивы

Массивы с числом размерностей более двух считаются многомерными. Такие массивы могут быть считаны из файла или созданы при помощи команд, таких как zeros, ones, rand. Число параметров при обращении к этим команда должно соответствовать размерности вводимого массива. Например, трехмерный массив 2х4х2 из нулей будет организован по команде

» S (2,4,2);

Обращение к элементам многомерного массива производится по обычным правилам работы с массивами, так что действуют двоеточия для указания диапазона, а end означает максимальное значение данной размерности. Чтобы изменить какой-нибудь элемент, достаточно присвоить ему значение точно так же, как для обычных массивов, а если элемента не было, то произойдет увеличение размерности массива:

» S (3, 1, 2)=13; size(S(: , : ,1))

ans=

3 4

Заметим, что пополнение массива означает дополнительные затраты времени на переписывание данных. Поэтому для повышения скорости расчета рекомендуется описывать максимальную размерность массива сразу (резервировать память), если это возможно. Когда многомерный массив организуется для хранения нескольких матриц одинакового размера, то первые два индекса удобнее отвести под строки и столбцы матриц, а последний индекс — для номера матрицы. Тогда в результате получим:

» S2=S(: , : , end)

S2=

0 0 0 0

0 0 0 0

13 0 0 0

Напомним, что резервирование памяти ускоряет работу в среде МАТLАВ, поскольку не расходуется время на пополнение массивов.

Массивы ячеек

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

» C = {sum(S) min(max(S)) sum(sum(sum(S))) }

С=

[1х4х2 double] [1х1х2 double] Для указания элементов массива ячеек используются фигурные скобки, та в результате обращения к третьему элементу массива С получим число 13:

» С{3}

ans=

13

а содержимое первого элемента массива ячеек С есть:

» С1=С{1}

С1(: , : , 1) =

0 0 0 0

C1(: , : , 2) =

13 0 0 0

Для превращения структуры С1 в обычный массив можно воспользоваться командами squeeze или shiftdim, которые удаляют равные единице размерности (матрица в один столбец или одну строку превращается в вектор):

» C2=shiftdim(C1)

C2 =

0 0 0 0

13 0 0 0

Нужно помнить, что составные части массива ячеек представлены копиями, так что при изменении исходного массива S в объекте С никаких изменений не последует. Иными словами, это не указатель на массив, а сам массив.

Для преобразования массива символов в массив ячеек применяется команда cellstr, а обратная процедура реализуется командой char.

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

» С={"Опе" ; "Тhгее" ; "Sеvеn"}

C =

"Опе"

"Тhrее"

"Seven"

затем преобразовать его в массив символов при помощи команды char:

» S=char(С)

S =

One

Three

Seven

Для получения строк одной длины МАТLАВ добавляет нужное число пробелов, что легко увидеть, затребовав данные о размерностях массива S:

» size(S)

ans =

    1. 5

Структуры

Структурами МАТLАВ (тип struct) являются многомерные массивы. Доступ к ним осуществляется путем указания индексов-имен. Например, можно создать скалярную структуру из двух полей:

» S.name=’ трап’ ; S.order=2

S=

name: "трап"

order: 2

Расширение структуры производится по тому же правилу, что и добавление строк или столбцов в массив:

» S(2), name=’ Симп’ ; S(2) . order = 4;

Для пополнения структуры можно также использовать специальную команду struct. Организуем третий элемент структуры S, присвоив полю name значение прям, а полю order — значение 2.

» S(3)=struct(“name” , ‘прям’ , ‘order’ , 2)

S =

1x3 struct array with fields:

name

order

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

» {S.name}

ans =

"трап" "Симп" "прям"

» [S.order]

ans =

2 4 2

Преобразование данных в массив символов осуществляется по команде char:

» char (S.name)

ans =

трап

Симп

Прям

1 Имя m-фанла для функции может быть любым, оно не должно обязательно совпадать с именем переменной-результата (тем более что возвращаемых результатов может быть несколько). В данном примере можно, например, сохранить m-файл под именем sumsqr.m и затем вызывать функцию в виде sumsqr(x,y). — Примеч. ред.

2 2 При отсутствии в теле функции оператора return возврат произойдет по достижении конца файла. Результатом функции всегда является последнее значение, присвоенное выходному параметру (в данном случае — переменной z). Таким образом, использовать return имеет смысл только при необходимости досрочного выхода из функции. — Примеч. ред.

26

A. Musaev