Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

Create a Matrix - Wolfram Mathematica

Создание матриц

Матрицы представлены в Mathematica при помощи списков. Они могут быть заданы непосредственно списком { }, построены по формуле или импортированы из файла данных. Mathematica также содержит команды для создания диагональных матриц, постоянных матриц и других специальных типов матриц.

Матрица может быть введена непосредственно с помощью символов {}:

In[125]:=

CreateAMatrixRU_1.gif

Out[125]=

CreateAMatrixRU_2.gif

Вывести результат в матричном виде можно с помощью команды MatrixForm:

In[126]:=

CreateAMatrixRU_3.gif

Out[126]//MatrixForm=

CreateAMatrixRU_4.gif

expr//fun является еще одним способом ввода fun[expr]. Такая команда особенно эффективна в случае, если fun является функцией форматирования.

В этом примере, функция Table использована для создания таблицы значений для x и y:

In[127]:=

CreateAMatrixRU_5.gif

In[129]:=

CreateAMatrixRU_6.gif

Out[129]//MatrixForm=

CreateAMatrixRU_7.gif

Обратите внимание, что в Mathematica содержимое матриц не ограничивается только числами; они могут содержать символьные элементы, равно как и формулы:

In[130]:=

CreateAMatrixRU_8.gif

Out[131]//MatrixForm=

CreateAMatrixRU_9.gif

    

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

In[132]:=

CreateAMatrixRU_10.gif

Out[132]//MatrixForm=

CreateAMatrixRU_11.gif

Сохраненную матрицу mat можно использовать в дальнейших вычислениях:

In[133]:=

CreateAMatrixRU_12.gif

Out[133]//MatrixForm=

CreateAMatrixRU_13.gif

Предположим, Вы пренебрегли данным выше предостережением и не использовали круглые скобки:

In[134]:=

CreateAMatrixRU_14.gif

Out[134]//MatrixForm=

CreateAMatrixRU_15.gif

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

In[135]:=

CreateAMatrixRU_16.gif

Out[135]=

CreateAMatrixRU_17.gif

Выведем значения mat, использовав функцию FullForm:

In[11]:=

CreateAMatrixRU_18.gif

Out[11]//FullForm=

CreateAMatrixRU_19.gif

Это показывает, что mat включает в себя форматирующую оболочку MatrixForm, которая не дает ей работать в качестве матрицы.

    

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

Так создается матрица 4?5 из действительных чисел в диапазоне от -10 до 10:

In[136]:=

CreateAMatrixRU_20.gif

Out[136]//MatrixForm=

CreateAMatrixRU_21.gif

Так создается матрица, которая содержит отличные от нуля элементы только на диагонали:

In[137]:=

CreateAMatrixRU_22.gif

Out[137]//MatrixForm=

CreateAMatrixRU_23.gif

Так создается матрица с одинаковыми элементами:

In[138]:=

CreateAMatrixRU_24.gif

Out[138]//MatrixForm=

CreateAMatrixRU_25.gif

Так создается матрица Гильберта 4?4, где каждый элемент списка имеет вид 1/ (i+j–1):

In[139]:=

CreateAMatrixRU_26.gif

Out[139]//MatrixForm=

CreateAMatrixRU_27.gif

    

Многие из функций линейной алгебры (и не только!) выдают результат в виде матрицы.

Здесь вычислено QR-разложение произвольной матрицы 3?3:

In[140]:=

CreateAMatrixRU_28.gif

Так отображается Q матрица:

In[142]:=

CreateAMatrixRU_29.gif

Out[142]//MatrixForm=

CreateAMatrixRU_30.gif

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

    

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

Вот матрица 2?2, состоящая из квадратов чисел:

In[143]:=

CreateAMatrixRU_31.gif

Out[144]//MatrixForm=

CreateAMatrixRU_32.gif

Это применение функции нахождения квадратного корня Sqrt к каждому элементу матрицы:

In[145]:=

CreateAMatrixRU_33.gif

Out[145]//MatrixForm=

CreateAMatrixRU_34.gif

Эту особенность функции Sqrt называют применимостью к спискам, и она позволяет создавать легко читающийся и эффективный код.

Если используется функция, которая не обладает применимостью к спискам, она не может быть применена к каждому элементу:

In[146]:=

CreateAMatrixRU_35.gif

Out[146]=

CreateAMatrixRU_36.gif

При желании, Вы можете сделать функцию применимой к спискам (и она будет применяться к каждому элементу):

In[147]:=

CreateAMatrixRU_37.gif

Out[148]//MatrixForm=

CreateAMatrixRU_38.gif

    

Другим важным способом создания матриц является импорт файла данных. Это может быть сделано с табличными форматами, такими как Table (.dat), CSV (.csv) и TSV (.tsv). Матрица может быть также считана из таблицы Excel (.xls).

Здесь использована команда ImportString для импорта строк CSV формата в матрицу. Импорт из файла выполняется с помощью команды Import:

In[149]:=

CreateAMatrixRU_39.gif

Out[149]=

CreateAMatrixRU_40.gif

Mathematica также поддерживает ряд других форматов, включая научные и медицинские форматы данных, такие как HarwellBoeing, MAT, HDF, NASACDF и FITS.

    

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

Данный пример многократно добавляет новую строку в матрицу:

In[150]:=

CreateAMatrixRU_41.gif

Out[151]=

CreateAMatrixRU_42.gif

Намного быстрее создать матрицу за один цикл. Если в коде Вы видите функцию цикла For, постарайтесь заменить ее на другую конструкцию, скажем Table:

In[152]:=

CreateAMatrixRU_43.gif

Out[152]=

CreateAMatrixRU_44.gif

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

In[153]:=

CreateAMatrixRU_45.gif

Out[153]=

CreateAMatrixRU_46.gif

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

In[154]:=

CreateAMatrixRU_47.gif

Out[154]=

CreateAMatrixRU_48.gif

Если матрицы большие и содержат много одинаковых элементов (например, нулевых), тогда следует рассмотреть возможность работы с разреженными матрицами, построенными с п&# 1086;мощью функции SparseArray.