Скаляры
и массивы. Индексированные переменные.
Как уже говорилось,
система Matlab создавалась, как средство работы с
матрицами, поэтому, основным видом
данных, которые используются в пакете, являются матрицы. Даже скалярные переменные
Matlab рассматривает, как матрицу 1х1. Эта
особенность системы практически не заметна, поскольку для обращения к элементу
матрицы размерности 1х1 (скалярной переменной) указание индексов не
обязательно.
>>
x = 2;
Однако никто не мешает
обратиться к единственному элементу массива, задавая один или даже два индекса,
указывая их в круглых скобках. Таким образом, записи x, x(1) и x(1,1) являются тождественными.
Такая особенность системы связана с тем, что вместо
обычных индексов, принятых в математике и алгоритмических языках, в
компиляторах используют, так называемые, приведенные
индексы, определяющие позицию соответствующего элемента массива в
оперативной памяти. Так как оперативная память использует линейную адресацию
своих ячеек, то для одномерного массива приведенный индекс совпадает с обычным.
Для двумерного массива Аmxn (m – число строк, n- число столбцов) приведенный индекс k элемента Ai,j
, зависит от способа
распределения элементов в памяти. Matlab по аналогии с Fortran использует
отсчет индексов в массивах от 1 и располагает элементы матрицы по столбцам . Matlab
наряду с традиционными
индексами в многомерных массивах, позволяет пользоваться и единственным
приведенным индексом, что несколько повышает скорость вычислений.
Matlab допускает ввод матрицы несколькими
способами:
- Вводить
полный список элементов
- Загружать
матрицы из внешних файлов
- Генерировать
матрицы, используя встроенные функции
- Создавать
матрицы с помощью ваших собственных функций в m-файлах, или создавать их в
процессе выполнения вычислений.
При
введении матрицы как списка элементов необходимо следовать основным условиям:
·
Элементы
строки отделяются пробелами или запятыми
·
Для
обозначения окончания каждой строки используется точка с запятой
·
Список
элементов ограничивается квадратными скобками.
>>
A=[1 2 3;4,5,6;7,8 9]
A =
1
2 3
4
5 6
7
8 9
Для обращения к элементу A2,2 достаточно выполнить операцию
>>
A(2,2)
ans
=
5
К этому же элементу можно
обратиться используя приведенный индекс.
>> A(5)
ans =
5
Попытка
обращения к несуществующему элементу приводит к ошибке:
>>
A(2,9)
???
Индекс за границами матрицы.
Интересной и удобной
особенностью языка Matlab
является выполнение
однотипных операций над подмножеством компонент векторов или матриц. Для этого
вместо индекса указывается диапазон индексов разделяемых двоеточием:
>> z(2:5)=3
z =
0
3 3 3
3
Другим применением
оператора двоеточие (:) является создание векторов заданного вида. Самыми
распространенными из них является формирование упорядоченных числовых
последовательностей.
Начальное
значение : шаг : конечное значение
Данная конструкция
порождает последовательность (массив) чисел, которая начинается с начального
значения, идет с заданным шагом и завершается конечным значением. Если шаг не задан, он принимается равным 1.
>> 1:10
ans =
1
2 3 4
5 6 7
8 9 10
>> t=0:0.1:1
t =
0
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000 0.7000 0.8000
0.9000 1.0000
>> t1=1:-0.2:0
t1 =
1.0000 0.8000 0.6000
0.4000 0.2000 0
|
Matlab предлагает разнообразные средства для
создания типовых матриц. Функции zeros и ones
используются для
заполнения матриц нулями и единицами. Заполнение элементов матриц случайными
числами с равномерным или нормальным законом распределения обеспечивают функции
rand
и randn .
>>
A_zero=zeros(2,3)
A_zero
=
0
0 0
0
0 0
>>
A_one=ones(2,3)
A_one
=
1 1
1
1 1 1
>>
A_norm=randn(2,6)
A_norm
=
-0.4326 0.1253
-1.1465 1.1892 0.3273
-0.1867
-1.6656 0.2877 1.1909
-0.0376 0.1746 0.7258
>>
A_ravn=rand(3,4)
A_ravn
=
0.9218 0.4057
0.4103 0.3529
0.7382 0.9355 0.8936
0.8132
0.1763 0.9169 0.0579
0.0099
|
При создании матриц в
качестве элементов можно использовать созданные
ранее матрицы. При этом необходимо следить за тем, чтобы ячейки матрицы имели
одинаковую размерность.
Использование в качестве элементов
матрицы других матриц
|
>>
A_zero_one=[A_zero,A_one;A_one,A_zero]
A_zero_one =
0 0
0 1 1
1
0 0 0
1 1 1
1 1 1
0 0 0
1 1 1
0 0 0
|
Очень важной особенностью
практически всех функций Matlab является возможность обработки
аргументов, заданных векторами.
>>
x=0:pi/6:pi
x
=
0
0.5236 1.0472 1.5708
2.0944 2.6180 3.1416
>>
y=sin(x)
y =
0
0.5000 0.8660 1.0000
0.8660 0.5000 0.0000
|
|