Сумма элементов матрицы матлаб

Сумма элементов матрицы матлаб

1. Матрица строка. Указывается переменная, ставится знак присвоения и в квадратных скобках через запятую или пробел перечисляются элементы:

2. Матрица столбец. В качестве разделителя элементов применяется символ «;»:

3. Квадратная или прямоугольная матрица:

>> C = [5 6 9; 56 45 73; 15,21,36];

4. Генерация вектора. Синтаксис: = : : . Если не указать шаг, то по умолчанию он принимается за 1.

5. Единичная матрица. Синтаксис: =ones( , ).

6. Нулевая матрица. Синтаксис: =zeros( , );

Доступ к ячейкам матрицы. Синтаксис: ( , ). Необходимо помнить, что нумерация строк и столбцов начинается с 1.

Операции с матрицами:

1. Скалярные операции. Умножение и деление матрицы на число, а также сложение и вычитание матрицы и числа (скаляр) – «.*», «./»,«.+», «.–». Каждая скалярная операция выполняются с каждой ячейкой матрицы отдельно. Любая скалярная (поэлементная) операция, то есть операция сразу над всем массивом, в MatLab обозначаются при помощи точки.

2. Сложение и вычитание матриц. Данная операция выполнима только с матрицами одинакового размера. При выполнении операции действие выполняется с соответствующими друг другу ячейками.

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

4. Удаление отдельных столбцов или строк. Для удаления отдельных столбцов или строк матрицы используются: пустые квадратные скобки [] и оператор двоеточие (:).

>> C = [24 33 42; 34 47 60; 44 61 78]

давайте матрица A сказать A = magic(100); . Я видел 2 способа вычисления суммы всех элементов матрицы A .

один из них быстрее (или лучше практиковать), то другие? Если да, то какой? Или они оба одинаково быстры?

2 ответов

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

если бы точность с плавающей запятой была первостепенной точностью, то вы бы разделили положительные и отрицательные элементы, сортируя каждый сегмент. Затем суммируем в порядке возрастания абсолютной величины. Да, я знаю, это больше работы, чем кто-либо мог бы сделать, и это, вероятно, будет пустой тратой времени.

вместо этого используйте адекватную точность, чтобы любые сделанные ошибки и не имеет значения. Используйте хорошие численные методы о тестах и т. д., Чтобы не возникало проблем.

что касается времени, для массива NxM,

sum (A (:)) потребует N*M-1 дополнений.

sum (sum (A)) потребует (N-1)*M + M-1 = N*M-1 дополнений.

для любого метода требуется одинаковое количество добавлений, поэтому для большого массива, даже если интерпретатор недостаточно умен, чтобы распознать, что они оба являются одинаковыми op, которые заботится?

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

Edit: в ответ на комментарий Amro об ошибках для одного метода над другим, вы мало что можете контролировать. Дополнения будут сделаны в другом порядке, но нет никакой уверенности в том, какая последовательность будет лучше.

эти два решения довольно близки. На самом деле, по сравнению с eps, разница едва значительное.

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

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

интересная проблема возникает даже в этих тестах. Будет ли проблема, потому что тесты выполняются на случайном (нормальном) массиве? По сути, мы можем рассматривать sum (A (:)) как случайное блуждание, прогулку пьяницы. Но рассмотрим sum(sum (A)). Каждый элемент sum (A) (т. е. внутренняя сумма) сам по себе является суммой 1000 нормальных отклонений. Взгляните на некоторые из них:—8—>

когда мы сложим их, будет потеря точности. Таким образом, потенциально операция как sum (A (:)) может быть немного более точной. Так ли это? Что, если мы используем более высокую точность для накопления? Итак, сначала я сформирую сумму по столбцам, используя Double, затем преобразуйте в 25 цифр десятичной точности и суммируйте строки. (Я отобразил здесь только 20 цифр, оставив 5 цифр скрытыми в качестве охранных цифр.)

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

или, вместо этого, немедленно преобразовать в 25 цифр точности, а затем суммировать результат.

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

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

то, о чем я бы беспокоился, это проблемы с плавающей запятой. Пример:

увеличивается величина ошибки для больших матриц

1. Различные способы ввода матриц в пакете MatLab

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

.

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

» А = [3 1 -1; 2 4 3]
А =
3 1 -1
2 4 3

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

.

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

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

2 7 0
-5 1 2]
B =
4 3 -1
2 7 0
-5 1 2

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

можно ввести при помощи команды:

» С = [[3; 4] [-1; 2] [7; 0]]
С =
3 -1 7
4 2 0

Посмотрите переменные рабочей среды, набрав в командной строке whos:

А 2×3 48 double array
В 3×3 72 double array
С 2×3 48 double array

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

2. Обращение к элементам матриц в пакете MatLab

Доступ к элементам матриц осуществляется при помощи двух индексов — номеров строки и столбца, заключенных в круглые скобки, например

Элементы матриц могут входить в состав выражений:

» С(1, 1) + С(2, 2) + С(2, 3)
ans =
5

Расположение элементов матрицы в памяти компьютера определяет еще один способ обращения к ним. Матрица А размера m на n хранится в виде вектора длины mn, в котором элементы матрицы расположены один за другим по столбцам

[А(1,1) А(2,1) . А(m,1) . А(1,n) А(2,n) . А(m,n)].

Для доступа к элементам матрицы можно использовать один индекс, задающий порядковый номер элемента матрицы в векторе.
Матрица С, определенная в предыдущем подразделе, содержится в векторе

[C(1,1) C(2,1) C(1,2) С(2,2) С(1,3) С(2,3)],

который имеет шесть компонент. Доступ к элементам матрицы осуществляется следующим образом:

3. Операции над матрицами в пакете MatLab: сложение, вычитание, умножение, транспонирование и возведение в степень

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

» S = А+С
S =
6 0 6
6 6 3
» R = С — А
R =
0 -2 8
2 -2 -3

Следите за совпадением размерности, иначе получите сообщение об ошибке:

» S = А+В
. Error using ==> ±
Matrix dimensions must agree.

Для умножения матриц предназначена звездочка:

» Р = С*В
P =
-25 9 11
20 26 -4

Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева:

» Р = А*3
Р =
9 3 -3
6 12 -3
» Р = 3*А
Р =
9 3 -3
6 12 9

Транспонирование матрицы, так же как и вектора, производится при помощи .’, а символ ‘ означает комплексное сопряжение. Для вещественных матриц эти операции приводят к одинаковым результатам:

Читайте также:  Как включить 4g на андроиде пошагово

» В’
ans =
4 2 -5
3 7 1
-1 0 2

» В.’
ans =
4 2 -5
3 7 1
-1 0 2

Замечание 1

Если матрица есть произвольная матрица размера n m, то матрица, транспонированная по отношению к А,есть матрица размера m n: Таким образом, строки матрицы становятся столбцами матрицы , а столбцы матрицы становятся строками матрицы .
Комплексно-сопряженная матрица получается из исходной в два этапа: выполняется транспонирование исходной матрицы, а затем все комплексные числа заменяются на комплексно-сопряженные.

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

»K= [l-i, 2+3i; 3-5i, l-9i]
К = 1.0000 – 1.0000i 2.0000 + 3.0000i
3.0000 – 5.0000i 1.0000 – 9.0000i
»K’
ans =
1.0000 + 1.0000i 3.0000 + 5.0000i
2.0000 – 3.0000i 1.0000 + 9.0000i

» K.’
ans =
1.0000 — 1.0000i 3.0000 — 5.0000i
2.0000 + 3.0000i 1.0000 — 9.0000i

Замечание 2

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

Возведение квадратной матрицы в целую степень производится с использованием оператора ^:

» В2 = В^2
B2 =
27 32 -6
22 55 -2
-28 -6 9

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

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

»(А+С)*В^3*(А-С)’
ans =
1848 1914
10290 3612

4. Умножение матриц и векторов

Вектор-столбец или вектор-строка в MatLab являются матрицами, у которых один из размеров равен единице, поэтому все вышеописанные операции применимы и для умножения матрицы на вектор-столбец или вектор-строки на матрицу. Например, вычисление выражения

можно осуществить следующим образом:

» a = [1 3 -2];
» B = [2 0 1; -4 8 -1; 0 9 2];
» c = [-8; 3; 4];
» a*B*c
ans =
74

5. Блочные матрицы

Очень часто в приложениях возникают так называемые блочные матрицы, т.е. матрицы, составленные из непересекающихся подматриц (блоков). Рассмотрим вначале конструирование блочных матриц. Введите матрицы: , , , и создайте из них блочную матрицу .
Учитывая, что матрица К состоит из двух строк, в первой строке матрицы А и B, а во второй — С и D, блочную матрицу можно сформировать следующим образом:

» К = [А В; С D]
K =
-1 4 2 0
-1 4 0 5
3 -3 8 9
-3 3 1 10

Блочную матрицу можно получить и другим способом, если считать, что матрица К состоит из двух столбцов, в первом — матрицы А и С, а во втором — В и D:

Обратной задачей к конструированию блочных матриц является задача выделения блоков. Выделение блоков матриц осуществляется индексацией при помощи двоеточия. Введите матрицу

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

»Р1 = Р(2:3,2:3)
Р1 =
10 12
11 10

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

»p = P(2, 🙂
p =
4 10 12 5

При выделении блока до конца матрицы можно не указывать ее размеры, а использовать элемент end:

»p = Р(2, 2:end)
p =
10 12 5

6. Удаление строк и столбцов

В MatLab парные квадратные скобки [ ] обозначают пустой массив, который, в частности, позволяет удалять строки и столбцы матрицы. Для удаления строки следует присвоить ей пустой массив. Удалите, например, первую строку квадратной матрицы:

» М = [2 0 3
1 1 4
6 1 3];
» M(1,:)=[];
» M
M =
1 1 4
6 1 3

Обратите внимание на соответствующее изменение размеров массива, которое можно проверить при помощи size:

Аналогичным образом удаляются и столбцы. Для удаления нескольких идущих подряд столбцов (или строк) им нужно присвоить пустой массив. Удалите второй и третий столбец в массиве M

Индексация существенно экономит время при вводе матриц, имеющих определенную структуру.

7. Заполнение матриц при помощи индексации

Выше было описано несколько способов ввода матриц в MatLab. Однако часто бывает проще сгенерировать матрицу, чем вводить ее, особенно если она обладает простой структурой. Рассмотрим пример такой матрицы:

Читайте также:  Как сделать расширение экрана на компьютере

.

Генерация матрицы Т осуществляется в три этапа:
1. Создание массива T размера пять на пять, состоящего из нулей.
2. Заполнение первой строки единицами.
3. Заполнение части последней строки минус единицами до последнего элемента.
Соответствующие команды MatLab приведены ниже.

» A(1:5, 1:5) = 0
A=
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
» A(1, 🙂 = 1
A=
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
» A(end, 3:end) = -1
A=
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 -1 -1 -1

Создание некоторых специальных матриц в MatLab осуществляется при помощи встроенных функций.

8. Создание матриц специального вида

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

» A = zeros(3, 6)
A =
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

Один аргумент функции zeros приводит к образованию квадратной матрицы заданного размера:

» A = zeros(3)
A =
0 0 0
0 0 0
0 0 0

Единичная матрица инициализируется при помощи функции eye:

» I = eye(4)
I=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Функция eye с двумя аргументами создает прямоугольную матрицу, у которой на главной диагонали стоят единицы, а остальные элементы равны нулю:

» I = eye(4, 8)
I =
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0

Матрица, состоящая из единиц, образуется в результате вызова функции
ones:

» E = ones(3, 7)
E =
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1

Использование одного аргумента в ones приводит к созданию квадратной матрицы, состоящей из единиц.

MatLab предоставляет возможность заполнения матриц случайными элементами. Результатом функции rand является матрица чисел, распределенных случайным образом между нулем и единицей, а функции randn — матрица чисел, распределенных по нормальному закону:

» R = rand(3, 5)
R =
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763

Один аргумент функций rand и randn приводит к формированию квадратных матриц:
Часто возникает необходимость создания диагональных матриц, т.е. матриц, у которых все недиагональные элементы равны нулю. Функция diag формирует диагональную матрицу из вектор-столбца или вектор-строки, располагая их элементы по диагонали матрицы:

» d = [1; 2; 3; 4];
» D = diag(d)
D =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4

Функция diag служит и для выделения диагонали матрицы в вектор, например

» A = [10 1 2; 1 20 3; 2 3 30];
» d = diag(A)
d =
10
20
30

9. Поэлементные операции с матрицами

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

, .

Умножение каждого элемента одной матрицы на соответствующий элемент другой производится при помощи оператора .*:

» С = А.*В
С =
-2 10 -8
21 -12 -45

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

» R1 = А./В1
R1 =
-2.0000 2.5000 -0.1250
0.4286 -1.3333 -1.8000
» R2 = А.В1
R2 =
-0.5000 0.4000 -8.0000
2.3333 -0.7500 -0.5556

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

10. Визуализация матриц

Матрицы с достаточно большим количеством нулей называются разреженными. Часто необходимо знать, где расположены ненулевые элементы, т.е. получить так называемый шаблон матрицы. Для этого в MatLab служит функция spy. Посмотрим шаблон матрицы G
.

После выполнения команды spy на экране появляется графическое окно Figure No. 1. На вертикальной и горизонтальной осях отложены номера строк и столбцов. Ненулевые элементы обозначены маркерами, внизу графического окна указано число ненулевых элементов (nz = 19).
Наглядную информацию о соотношении величин элементов матрицы дает функция imagesc, которая интерпретирует матрицу как прямоугольное изображение. Каждый элемент матрицы представляется в виде квадратика, цвет которого соответствует величине элемента. Для того чтобы узнать соответствие цвета и величины элемента следует использовать команду colorbar, выводящую рядом с изображением матрицы шкалу цвета (Insert (в графическом окне Figure No. 1), colorbar). Наконец, для печати на монохромном принтере удобно получить изображение в оттенках серого цвета, используя команду colormap(gray) (Edit (в графическом окне Figure No. 1), Colormap, Colormap Editor, Tools, gray). Мы будем работать с матрицей G. Набирайте команды, указанные ниже, и следите за состоянием графического окна:

» imagesc(G)
» colorbar
» colormap(gray)

В результате получается наглядное представление матрицы.

Ссылка на основную публикацию
Adblock detector