Elettracompany.com

Компьютерный справочник
9 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Объединение матриц matlab

Действия с векторами и матрицами в MATLAB

РАБОТА В РЕЖИМЕ ПРЯМЫХ ВЫЧИСЛЕНИЙ

1) Вычисляемое выражение набирается, редактируется (если нужно) в командной строке, ввод завершается нажатием клавиши ENTER.

Средства для редактирования в командной строке: клавиши ← и → — перевод курсора вдоль строки, Home, End – быстрый переход к началу и концу строки, ↑ и ↓ — клавиши перелистывания строк (с их помощью в командной строке можно восстановить для редактирования и выполнения ранее выполнявшиеся операторы), клавиши Delete и Backspace (← в верхней строке клавиатуры) – для удаления символа над курсором и слева от него. Кроме того, в командном окне имеется сверху панель инструментов, позволяющая делать стандартные операции копирования, удаления, вставки из буфера обмена и др.

2) Для переноса длинного выражения на другую строку используется многоточие (… — три или более точек в конце строки). При нажатии ENTER курсор переместится в начало следующей строки, где можно продолжать набор оператора.

3) Основные системные переменные:

pi – значение числа π

ans – хранит результат последней выполненной операции (в том числе

и если этот результат – массив чисел). К ней можно обращаться

по имени, что бывает удобно при программировании.

inf — символ машинной бесконечности. Положительная величина,

которая больше чем любое представимое в оперативной памяти

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

иметь при составлении алгоритмов.

i- мнимая единица – sqrt(-1). MATLAB выполняет действия в алгебре

комплексных чисел вида z = x+ i*y, где x – вещественная часть,

y – мнимая часть числа.

4) Знаки основных арифметических операций:

‘+ ‘- сложение, ‘-‘ – вычитание , ‘*’ – умножение, ‘/’ – деление слева направо, ’’ – деление справа – налево, ‘^’ – возведение в степень.

Знаки операций применимы к векторным и матричным операндам.

Так, результаты операций A/B и BA могут быть различны. Кроме того, одна из этих операций может быть возможна, в то время как другая – нет. Первая: A/B выполняется как A*inv(B), а вторая: BA – как inv(B)*A. Вспомним, что умножение матриц не обладает свойством коммутативности. Знак умножения, примененный к матричным операндам, выполняет операцию умножения матриц по правилам матричной алгебры.

5)Постановка знака ‘;’в конце вычисляемого выражения не обязательна, его присутствие блокирует вывод на экран компьютера результата выполнения выражения, после которого он поставлен. Установка точки с запятой в конце каждого оператора желательна при написании М-программ, особенно – когда промежуточными результатами являются массивы чисел. (Заметим, правда, что иногда полезно умышленно опустить точку с запятой, если вывод вычисленного значения оператора желателен).

Действия с векторами и матрицами в MATLAB

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

Задание 1: (действия с векторами)

1) Введите вектор ‘a’ из 9 элементов. С экрана элементы вектора вводятся в квадратных скобках, разделяемые пробелом.

a = [1 2 3 4 6 4 3 4 5] % Вводите свой вектор с другими значениями.

Нажмите ENTER, посмотрите на сообщение на экране.

2) Теперь выполните то же но с точкой с запятой:

a = [1 2 3 4 6 4 3 4 5]; % Используйте клавиши перелистывания ↑ и ↓, чтобы не

% повторять набор заново!!

Нажмите ENTER, посмотрите на сообщение на экране.

3) Прибавьте число 2 к элементам вектора а :

b = a + 2 % Сейчас мы умышленно не ставим точку с запятой, чтобы

% посмотреть на результат

4) Транспонируем вектор b:

C=b’ % Знак транслонирования матрицы – апостроф ‘ (соответствует

% клавише буквы Э на нижнем регистре латиницы)

5) Попробуйте выполнить операцию

D= a+C % убедитесь, что она невозможна, поймите почему (?).

6) Постройте график значений элементов вектора b относительно номера компоненты:

MATLAB может строить графики, используя указываемые ему символы.

Постройте тот же график звездочками:

ГЕНЕРАЦИЯ ВЕКТОРОВ (ранжированных переменных, т.е. массивов с постоянным шагом)

X=1:10 % шаг 1 % не ставьте точки с запятой, наблюдайте результаты

Y=0:0.25:1 % шаг 0.25

Z=0:pi/4:2*pi % шаг pi/4

Задание 2: (действия с матрицами)

% Создание матриц производится так же как и создание векторов, при этом

% используется знак (;) , чтобы отделить вводимые строки матрицы.

Введите матрицу размерности (3,3):

A = [1 2 0; 2 5 -1; 4 10 -1] % Введите свои значения. Не ставьте блокировку (;),

% чтобы следить за результатами.

Транспонируйте матрицу ‘A’ :

Возведите квадратную матрицу в 5 степень:

Найдите обратную матрицу:

I =A*inv(A) % ясно, что должна получиться единичная матрица

Вычислите определитель матрицы:

Найдите собственные значения матрицы:

% Функция «poly» генерирует вектор, элементами которого являются

% коэффициенты характеристического многочлена матрицы:

% Функция “round” округляет до ближайшего целого

% Корни многочлена p – характеристические значения исходной матрицы

% Таким образом, мы можем найти собственные значения матрицы оператором

roots(p) % Выполните вычисления этим способом

% В любой момент мы можем получить список значений переменных, хранящихся в памяти

% используя команды «who» или «whos».

Выполните:

% Вы можете получить на экране значение любой переменной, набрав в командной строке имя переменной и нажав вслед за тем ENTER.

ПОЭЛЕМЕНТНОЕ ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ

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

x=[1 2 3 4] и y=[5 6 7 8].

Предположим, что вам хотелось бы перемножить (поделить, возвести в степень) элементы векторов x и y.

Если мы напишем x*y или x/y или x^3, то получим сообщение об ошибке, так как строки нельзя перемножить, разделить друг на друга по правилам матричной алгебры (несоответствие размерностей). Однако для получения желаемого результата в MATLAB есть дубли арифметических операций. Они имеют те же значки, что и основные операции, но с точкой перед знаком операции.

Выполните в командном окне:

x.*y % Результат – вектор, элементы которого равны произведениям соответствующих элементов векторов x и y

x./y % Элементы x будут поделены на соответствующие элементы y

x.^3 % Элементы вектора x будут возведены в 3-ю степень.

MATLAB работает с комплексными числами и бесконечными величинами.

ГЕНЕРАЦИЯ СПЕЦИАЛЬНЫХ МАТРИЦ:

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

zeros – создание матрицы с нулевыми элементами,

ones — создание матрицы с единичными элементами,

rand – создание матрицы со случайными элементами (равномерно на [0,1] распределенными случайными числами),

Объединение матриц matlab

Синтаксис операций с массивами

Так как массивы являются важнейшим объектом нашего внимания в системе MATLAB, рассмотрим синтаксис операций с массивами более подробно.

Читать еще:  Защитное слово проекта

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

Напомним также, что для операции конкатенации в качестве разделителей элементов используются либо запятые (пробелы), либо точки с запятой. Причём в первом случае речь идёт о «горизонтальной» конкатенации или конкатенации вдоль строк, а во втором — о «вертикальной» конкатенации или конкатенации вдоль столбцов. Например, операция

из двух матриц A1 и A2 , у которых предполагается одинаковым число строк, производит более «широкую» матрицу C с числом столбцов, равным сумме столбцов матриц-слагаемых.

соединяет матрицы A1 и A2 вертикально, производя матрицу C , у которой число строк будет равно сумме числа строк матриц A1 и A2 . В случае разного числа столбцов у A1 и A2 появится сообщение об ошибке:

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

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

Существует ещё одна мощная групповая операция, применяемая к массивам. Это операция формирования диапазона значений, обозначаемая двоеточием. Составим одномерный массив diap1 , состоящий из всех вещественных чисел от 3.7 (включительно) с приращением 0.3 и не более 8.947 . Для этого применяем операцию, обозначаемую двоеточием:

diap1 = 3.7 : 0.3 : 8.947 ;

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

Довольно трудно так сразу в уме подсчитать количество попадающих в заданный диапазон и, соответственно в массив diap1 , элементов. Поэтому вызовем функцию length :

Чаще всего эту операцию применяют для формирования диапазона целых чисел:

diap2 = 4 : 2 : 26

Если приращение равно единице, то его можно для краткости опускать:

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

Применим операцию «диапазон» в контексте операции индексации:

a = [ 1 2 ; 3 4 ; 5 6 ];
b = a(2,:)
b =
3 4

Здесь операция «диапазон» позволяет захватить все имеющиеся значения второго индекса. В результате переменная b становится равной одномерному массиву, состоящему из всех элементов второй строки двумерного массива a . Таким образом, компактное выражение a(2,:) позволяет «взять» из матрицы a её вторую строку.

Это же выражение позволяет удалить строку (или столбец), если при этом использовать понятие пустого массива, который обозначается как [ ] :

Теперь рассмотрим другой пример. Пусть у нас имеется одномерный массив

Попробуем выделить из этого массива элементы со второго по четвёртый. Для этого запишем индексное выражение

в котором указано не единственное значение индекса, а целый диапазон индексов, значения которых последовательно возрастают от 2 до 4 . Это означает, что мы выполняем групповую операцию, помещающую в переменную b последовательно второй, третий и четвёртый элементы массива a . Таким образом формируется одномерный массив b :

Из приведённого выше объяснения вытекает способ выбрать из массива a , например, три элемента в произвольном порядке, то есть сформировать одномерный массив b , первый элемент которого равен последнему элементу массива a , второй элемент b равен третьему элементу a , а третий элемент b равен первому элементу a . Вот решающее эту задачу выражение:

так как в индексации участвует целый набор индексов, первый из которых равен 5 , второй индекс (по порядку следования) равен 3 , а третий равен 1 . Это и объясняет порядок формирования элементов массива b .

Переставим местами столбцы в матрице

a = [ 1 2 3; 4 5 6; 7 8 9];

Мы хотим, чтобы последний столбец стал первым, второй — последним, а первый — вторым. Вот подходящее решение:

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

Например, из матрицы a с размером 3×3, полученной предыдущей операцией и имеющей вид

можно сделать матрицу c с размером 4×5 :

c = a([ 2 3 3 2 ] , [ 2 1 3 2 1 ])

При получении матрицы c из матрицы a первая её строка удалена (не используется), вторая и третья строки — продублированы (взяты дважды). При этом каждая из этих строк «растянута» за счёт дублирования их первого и второго элементов (с последующей перестановкой элементов местами).

Слияние двух матриц разной размерности в Matlab?

У меня есть две матрицы A и B в Matlab. A имеет размерность mx6 , например

B имеет размерность nx6 , например

Я хочу объединить A и B и создать матрицу C после этих шагов без использования циклов:

1) Рассмотрим B(i,1:4) ; если существует j такое, что A(j,1:4) равно B(i,1:4) [это может произойти не более одного j ], а затем C(i,:)=[B(i,1:4) A(j,5)+B(i,5) A(j,6)+B(i,6)] . Сделайте это для всех i=1. n .

2) Заполните оставшиеся строки C строками A и B , которые не могут быть сопоставлены в соответствии с шагом 1).

Моя попытка с использованием циклов:

Это довольно легко, используя комбинацию unique и accumarray . unique работает, предоставляя вам матрицу вывода, в которой удаляются все повторяющиеся записи. Это будет хорошо работать, когда речь идет о играх с A и B .

Просто объедините A и B вместе в единую консолидированную матрицу, затем используйте unique с первыми четырьмя столбцами и назначьте каждой строке этой усеченной матрицы уникальный идентификатор. Третий вывод unique даст вам этот идентификатор, и если вы хотите узнать, какой идентификатор соответствует той строке, которая выводится из первого вывода unique , где каждая строка вывода дает вам идентификатор, который соответствует к.

Вы должны использовать флаг ‘rows’ и ‘stable’ , чтобы убедиться, что мы смотрим на каждую строку, а не на каждый отдельный элемент в матрице и с флагом ‘stable’ , мы присваиваем идентификаторы на основе того, когда мы сталкиваемся с уникальным начиная с начала (сверху) до финиша (снизу). Если вы не поместили флаг ‘stable’ , он бы сортировал строки внутри, а затем присваивал идентификаторы, начиная с верхней части этого списка.

Если вы хотите достичь желаемого результата, вы должны использовать ‘stable’ . Когда вы найдете эти идентификаторы, используйте accumarray дважды на пятом и шестом столбцах соответственно и примените отдельную сумму и объедините результаты вместе. accumarray работает, предоставляя набор идентификаторов или ключей, а для каждого ID/ключа — выходное значение, связанное с этим ключом. Вы группируете все значения, которые используют один и тот же ключ, и делайте что-то для каждой группы. В нашем случае мы будем применять accumarray дважды, где первый набор выходных значений поступает из пятого столбца, а второй набор выходных значений — из шестого столбца. Поведение по умолчанию с accumarray равно sum всем значениям, принадлежащим одной и той же группе, которые вы хотели.

Читать еще:  Самоучитель по matlab

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

Что-то вроде этого:

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

Matlab

Материал из MachineLearning.

Matlab — язык программирования и система научных и инженерных расчетов, построенная на основе интерпретатора этого языка. Matlab, сокращение от «Matrix Laboratory», предназначен в первую очередь для выполнения алгоритмов, использующих векторы и матрицы.

Язык программирования Matlab (иногда также называется M-code) изначально был разработан с целью упрощения работы с процедурами широко распространенной в 70-80 годы библиотеки алгоритмов линейной алгебры LINPACK. Впоследствии он развился в мощный язык с богатым набором типов данных.

Оболочка Matlab состоит из командной строки, текстового редактора со встроенным отладчиком и окнами со списком файлов, списком видимых переменных и с историей введенных команд.

Matlab имеет большое число пакетов (toolboxes) — как собственных, так и распространяемых независимыми разработчиками часто на условиях открытого кода. В Matlab включен Simulink — визуальный редактор для моделирования динамических систем.

Содержание

Краткий обзор языка Matlab

Векторы и матрицы

добавть элемент к вектору-столбцу

добавить элемент в вектору-строке

текстовая строка — это вектор

Операции

Типы данных

итератор может быть элементом вектора

или вектором-столбцом матрицы

Условный переход

оператор if использует как логические так и целочисленные переменные; можно использовать операции ‘and(a, b)’, синоним ‘a && b’ и ‘or(a, b)’, синоноим ‘a || b’

но удобнее использовать

Эффективное программирование

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

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

Игрушечный пример для иллюстрации способов работы с функциями и векторами в среде MATLAB

Получили вектор, компоненты которого — случайные числа, полученные из равномерного на отрезке [0,1] распределения. Теперь возьмем от каждого его элемента логарифм различными способами.

Способ первый — совсем плохой, самый медленный — в цикле наращивать размер вектора

Результат работы такой:

duration of the very bad method on 10000 elements Elapsed time is 0.286904 seconds.

Способ второй — заметно луче — заранее зарезервировать память под результат применения функции логарифма. Для наглядности увеличим размер вектора еще в 10 раз.

Результаты работы этого кода:

duration time of a bit improved method on 1000000 elements Elapsed time is 0.062692 seconds.

Способ третий — самый правильный и самый быстрый, работает мгновенно — взять функцию логарифма (то, что именно логарифма — не принципиально) сразу от вектора

duration of the best method on 1000000 elements Elapsed time is 0.015231 seconds.

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

То есть, если нам надо перемножить матрицы A и B, то не надо писать никаких циклов, а нужно просто написать C = A * B

Результат: Matrix multiplication time Elapsed time is 0.612797 seconds.

Здесь надо заметить, что при использовании > метода умножения матриц размеров n * n время получения ответа равно O(n^3). Если предположить, что компьютер делает в секунду в среднем 10^6 операций, то что-то тут не сходится — получится, что компьютер за 0.612797 секунд выполнил 8*10^9 операции. Дело в том, что в MATLAB реализован быстрый алгоритм умножения матриц, в этом алгоритме сложность менее, чем кубическая от размера входных матриц. Поэтому при перемножении матриц важно пользоваться именно записью C = A * B, а не ударяться в написание тройного цикла — тот уж точно выполнит все 8*10^9 операций и хорошо, если за пару суток управится.

Пример 3. Есть еще несколько функций, которые заточены под матричные и векторные операции — это функции repmat и reshape. Остановимся на них подробнее.

Важно. Практика показала, что repmat и reshape в разных версиях MATLAB могут отличаться, поэтому будьте внимательны и осторожны при их использовании.

Пусть мы хотим сделать матрицу, в которой все строки одинаковые. Тут возможны несколько способов реализации. Способ первый — цикл.

Elapsed time is 1.596466 seconds.

Способ второй — использовать функцию repmat()

Elapsed time is 0.311417 seconds.

Пусть теперь нам захотелось продублировать строки матрицы A, то есть вместо каждой строки матрицы написать две таких же строки, одну под другой. Как сделать это эффективно, то есть БЕЗ ЦИКЛОВ? Тут на помощь приходит функция reshape() (еще раз напоминаю про возможные различия в разных версиях).

Дальше ловкость рук и никакого мошенничества =)

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

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

Читать еще:  Matlab системы дифференциальных уравнений

Пример 4, строим усеченную синусоиду, вариант 1

Пример 4, вариант 2

следует избегать циклов там, где можно использовать матричные операции;

пример 5, вариант 1

пример 5, вариант 2

Функции

функции бывают embedded, private, public, inline, см. doc; при написании желательно организовать код так, чтобы функция возвращала корректный результат независимо от того, что было подано в качестве аргумента — скаляр, вектор или матрица

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

функции могут включать варьируемое число входных и выходных аргументов

выполнение функций как текстовых строк в теле программы

пример, как сделать случайную k-индексную матрицу

инлайн-функции — функции задаваемые в теле программы

Мини-тест

Рекомендации программистам

  1. Matlab прост в освоении. Нет понятий проект, компилятор, библиотека.
  2. Есть командная строка, редактор m-code, path list и help.
  3. Если вы хотите использовать функцию из toolbox просто используйте ее имя в коде.
  4. Коллизий имен не существует. Старое имя исчезает при его перезагрузке.
  5. Функции вызываются по имени согласно path list (см. основное меню). Следите на очередностью в этом списке.
  6. Почитайте help, если вам нужно написать известный алгоритм, возможно он уже написан.
  7. В частности, функции, работающие с множествами: intersect, ismember, issorted, setdiff, setxor, union, unique и очень полезная функция is* находятся в Help navigator -> MATLAB -> Functions — Categorical list.
  8. Wikipedia.org содержит много библиотек для Matlab.
  9. Не нужно избегать сложных алгоритмов. Часто задачи классификации, регрессии, оптимизации решаются в одну строку кода.
  10. Желательно документировать свои функции так:
    • первая строка — назначение функции
    • вторая строка — имя функции и ее входные и выходные аргументы
    • варианты использования функции
    • пример использования функции
  11. Изучите все структуры данных в Matlab, их очень много. В последней версии (на момент написания основной части — R2008a) появилась поддержка работы с классами.
  12. Избегайте циклов, если возможно, используйте операции работы с матрицами.
  13. Имеется возможность подключать функции, написанные на C (в виде специально скомпилированных библиотек).

Некоммерческие версии

Matlab — коммерческая программа. Существуют некоммерческие варианты, совместимые по базовым конструкциям языка, но не совместимые по библиотечным функциям. Например, Scilab, Euler Math Toolbox и Octave.

События

Несколько раз в год фирма «Софтлайн» проводит семинары, посвященные новым версиям и отдельным подсистемам Matlab. Проводится Всероссийская научная конференция «Проектирование научных и инженерных приложений в среде MATLAB».

Объединение матриц matlab

Y = inv( X ) computes the inverse of square matrix X .

X^(-1) is equivalent to inv(X) .

x = Ab is computed differently than x = inv(A)*b and is recommended for solving systems of linear equations.

Examples

Inverse Matrix

Compute the inverse of a 3-by-3 matrix.

Check the results. Ideally, Y*X produces the identity matrix. Since inv performs the matrix inversion using floating-point computations, in practice Y*X is close to, but not exactly equal to, the identity matrix eye(size(X)) .

Solve Linear System

Examine why solving a linear system by inverting the matrix using inv(A)*b is inferior to solving it directly using the backslash operator, x = Ab .

Create a random matrix A of order 500 that is constructed so that its condition number, cond(A) , is 1e10 , and its norm, norm(A) , is 1 . The exact solution x is a random vector of length 500, and the right side is b = A*x . Thus the system of linear equations is badly conditioned, but consistent.

Solve the linear system A*x = b by inverting the coefficient matrix A . Use tic and toc to get timing information.

Find the absolute and residual error of the calculation.

Now, solve the same linear system using the backslash operator .

The backslash calculation is quicker and has less residual error by several orders of magnitude. The fact that err_inv and err_bs are both on the order of 1e-6 simply reflects the condition number of the matrix.

The behavior of this example is typical. Using Ab instead of inv(A)*b is two to three times faster, and produces residuals on the order of machine accuracy relative to the magnitude of the data.

Input Arguments

X — Input matrix
square matrix

Input matrix, specified as a square matrix. If X is badly scaled or nearly singular, then the inv calculation loses numerical accuracy. Use rcond or cond to check the condition number of the matrix.

Data Types: single | double
Complex Number Support: Yes

More About

Matrix Inverse

A matrix X is invertible if there exists a matrix Y of the same size such that X Y = Y X = I n , where I n is the n -by- n identity matrix. The matrix Y is called the inverse of X .

A matrix that has no inverse is singular. A square matrix is singular only when its determinant is exactly zero.

It is seldom necessary to form the explicit inverse of a matrix. A frequent misuse of inv arises when solving the system of linear equations Ax = b . One way to solve the equation is with x = inv(A)*b . A better way, from the standpoint of both execution time and numerical accuracy, is to use the matrix backslash operator x = Ab . This produces the solution using Gaussian elimination, without explicitly forming the inverse. See mldivide for further information.

Algorithms

inv performs an LU decomposition of the input matrix (or an LDL decomposition if the input matrix is Hermitian). It then uses the results to form a linear system whose solution is the matrix inverse inv(X) . For sparse inputs, inv(X) creates a sparse identity matrix and uses backslash, Xspeye(size(X)) .

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

Singular matrix inputs can produce nonfinite values that differ from MATLAB ® results.

GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

X must be nonsparse.

The MATLAB inv function prints a warning if X is badly scaled or nearly singular. The gpuArray inv is unable to check for this condition. Take action to avoid this condition.

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

Usage notes and limitations:

X must be nonsparse.

For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

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