Матрицы GNU Octave

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Владимир Кореньков
Правильная ссылка: http://xgu.ru/wiki/octave/matrix

Содержание


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

С точки зрения обычного пользователя, если для доступа к элементам массива используется единственный индекс, то такой массив является одномерным (в терминах GNU Octave он называется вектором), два индекса - двухмерным (иначе матрицей), больше двух индексов - многомерным.

[править] Создание массивов

[править] Векторы

Поэлементный ввод:

<имя массива> = [ <элемент 1> <элемент 2> ... <элемент N> ]

Сокращенный ввод (для элементов, распределенных в виде прогрессии):

<имя массива> = <начальное значение> :[ <приращение>] : <конечное значение>

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

Icon-caution.gif

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

Пример 1. Создание векторов

> # непосредственное заполнение массива
> v = [ 1 5 17 3 ]
v =
1 5 17 3
>
> # ввод диапазона значений (с шагом по молчанию 1)
> i = 1 : 5
i =
1 2 3 4 5
>
> # ввод диапазона значений (с шагом 0.5)
> i = 1 : 0.5 : 5
i =
1 1.5 2 2.5 3 3.5 4 4.5 5


Пример 2. Динамическое заполнение векторов

> # создаем пустой массив (можно задать начальные условия, например a=[5])
> a = [];
> # значение i должно быть только целочисленным, поэтому задание приращения не допускается (по умолчанию, <приращение>=1)
> for i = 1 : 5
> # в конец вектора v дописываем случайное число
> v = [v rand];
> endfor
> # вывод значений
> v
v =
0.27349 0.96562 0.74204 0.20856 0.70811

В массивах используются два типа разделителей: запятая "," - для разделения отдельных элементов в пределах одной строки и точка с запятой ";" - для разделения на строки. Используя эти два типа разделителей можно создавать как векторы-строки, так и векторы-столбцы:

Пример 3. Столбцы и строки

> # вектор-строка:
> v = [ 1, 2, 3 ] # аналогичный результат получм, если набрать v = [ 1 2 3 ]
v =
1 2 3
> # вектор-столбец:
> v = [ 1; 2; 3]
v =
1
2
3

[править] Матрицы

Синтаксис:

<имя массива> =
[
<элемент 1-1>, <элемент 1-2>, ..., <элемент 1-N>;
<элемент 2-1>, <элемент 2-2>, ..., <элемент 2-N>;
...
<элемент M-1>, <элемент M-2>, ..., <элемент M-N>;
]

Здесь троеточия "..." обозначают пропущенные диапазоны элементов

Пример 4. Заполнение матрицы

> m = [ 1, 2, 3;
> 4, 5, 6;
> 7, 8, 9]
> m =
1 2 3
4 5 6
7 8 9

Как указывалось выше, элементами массива могут служить другие массивы:

Пример 5.

> m1 = [ 1, 2, 3];
> m2 = [ 4, 5, 6];
> m3 = [ 7, 8, 9];
> m = [ m1; m2; m3 ]; # результат аналогичен примеру №4
> # или
> n1 = [ 1; 4; 7 ];
> n2 = [ 2; 5; 8 ];
> n3 = [ 3; 6; 9 ];
> m = [ n1, n2, n3 ]; # результат аналогичен примеру №4

[править] Доступ к элементам массива

Для доступа к элементам массивов с целью чтения/изменения отдельных значений служат, соответственно, конструкции вида:

<имя переменной> = <имя массива> ( <индекс 1>, <индекс 2>, ... )

<имя массива> ( <индекс 1>, <индекс 2>, ... ) = <значение>


Для одновременного доступа - символ :

[править] Многомерные массивы

[править] Функции для работы с массивами

Сложение/вычитание
> A+B
> A-B
массивы А и В должны иметь одинаковый размер
Операции с числами
> с+A
> с-А
> с*А
> с/А
каждый элемент массива А складывается (вычитается, умножается, делится) с числом с
Скалярное умножение
> A*B число строк одного массива должно совпадать с числом столбцов второго
(при умножении вектора-строки А на вектор-столбец В получим число)
Векторное умножение
> cross(A,B)
Поэлементные действия
> А.+В
> А.-В
> А.*В
> А./В
каждый элемент массива А складывается (вычитается, умножается, делится) с соответствующим элементом массива В
Транспонирование
> A'
Поворот матрицы на 90 градусов "против часовой стрелки"
> rot90(A,n) создает копию матрицы А, повернутой на 90 градусов n раз (если n отрицательное - поворот в обратную сторону)
Определитель
> det(A) матрица должна быть квадратной



Octave GNU Octave

Инсталляция | Синтаксис языка | Командная строка
Скрипты | Функции | Регулярные выражения | Массивы | Графики | Ввод/вывод данных
Распределенные вычисления | Численные методы | Сплайны