Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инстр_Mathem_v8.doc
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
1.91 Mб
Скачать

9.2. Преобразование списков

Пакет Математика содержит большой набор функций для преобразования списков:

Drop[List, n] – вычеркивание первых n элементов из списка List;

Drop[List, -n] – вычеркивание последних n элементов из списка List;

Prepend[List, el] – добавление элемента el в начале списка List;

Append[List, el] – добавление элемента el в конце списка List;

Insert[List, el, n] – вставка элемента el на n-е место в списке List;

Join[List1, List2,…] или List1 ~Join~ List2~… – объединение списков;

ReplacePart[List, el, n] или List[[n]] = elзамена n-го элемента списка List на элемент el;

Sort[List] – упорядочивание элементов списка List;

RotateLeft[List, n], RotateRight[List, n} – циклическая перестановка списка List на n элементов влево и вправо.

Пример 9.5. Преобразуем введенный ранее список L1={"список", 0.5, a+b, {x,y}}:

In[ ] :=Drop[L1, 2] Out[ ] = {a+b, {x, y}}

In[ ] :=RotateLeft[L1, 1] Out[ ] = {0.5, a+b, {x, y}, список}

In[ ] :=L2=Join[ L1, Table[a^n, {n, -1, 2}]] Out[ ] = {список, 0.5, a+b, {x+y}, 1/a, 1, a, a2}

In[ ] :=Sort[L2] Out[ ] = {0.5, 1, список, 1/a, a, a2, a+b, {x+y}}

Функция Total.

Для одномерного массива list функция Total[list] вычисляет сумму элементов массива.

Для двумерного массива функция Total[{{x1, y1, …}, {x2, y2, …}, …} порождает список сумм:

{Total[{x1, x2, …}], Total[{y1, y2, …}], …}.

Для произвольного списка функция Total[list, n] дает сумму всех элементов вплоть до уровня n.

Отметим, что команды Total[list] и Total[list,1] являются одной и той же командой.

Пример 9.6. Создадим список, второй элемент которого сам является списком:

In[ ] :=L3={a,{x,y,z}};

Применим двумя способами функцию Total:

In[ ] :=Total[L3] Out[ ] = {a+x, a+y, a+z}

In[ ] :=Total[L3, 2] Out[ ] = a+x+y+z

Функция Total вычисляет сумму во много раз быстрее, чем функция Plus.

Пример 9.7. Создадим массив из 106 случайных чисел: In[ ] :=t=Table[Random[], {1000000}];

Сравним время вычисления суммы чисел массива t с помощью функций Total и Plus:

In[ ] :=Total[t]//Timing Out[ ] = {0.047, 499855.}

In[ ] :=Apply[Plus, t]//Timing Out[ ] = {4.5, 499855.}

Видим, что суммирование с помощью функции Plus требует почти в 100 раз больше времени.

Не будем хранить в памяти такую большую таблицу: In[ ] :=Clear[t].

9.3. Матричные функции

Создать матрицу – это значит каким-либо способом создать двумерный массив. Подобным образом получена матрица m1 в примере 9.3. Функции для создания специальных матриц:

IdentityMatrix[n] – порождает единичную матрицу ;

DiagonalMatrix[list] – дает диагональную матрицу с элементами списка list на главной диагонали.

Функции для работы с матрицами.

MatrixForm[m] – выводит на печать двумерный массив m в виде матрицы.

MatrixForm[v] – выводит на печать одномерный массив v в виде вектора-столбца.

Dot[m1,m2] или m1.m2 – вычисляет произведение матриц.

m1*m2 – производит поэлементное перемножение матриц.

Inverse[m] – вычисляет обратную матрицу.

Transpose[m] – производит транспонирование.

MatrixPower[m, n] – возводит матрицу m в степень n.

Det[m] – вычисляет определитель матрицы.

Length[m] – определяет число строк матрицы.

Dimensions[m] – определяет размеры матрицы m.

Eigenvalues[m] – вычисляет собственные значения матрицы.

Eigenvectors[m] – находит собственные векторы матрицы m.

MatrixRank[m] – подсчитывает ранг матрицы.

Tr[m] – вычисляет след матрицы – сумму диагональных элементов.

Norm[v] – подсчитывает длину вектора v: , где v k – компоненты вектора.

Norm[v, ] – вычисляет норму вектора по формуле .

Norm[m, ] – вычисляет норму матрицы m по формуле .

Norm[m, 1вычисляет норму матрицы по формуле .

Отметим, что матричные функции включают также аналитические преобразования.

Пример 9.8. Действия с матрицами.

Введем матрицу m2 и вектор v3: In[ ] := m2={{-1, 4}, { 2, -3}}; v3={- 4, 3};

Длина вектора: In[ ] := Norm[v3] Out[ ] = 5

Норма вектора: In[ ] := Norm[v3, ] Out[ ] = 4

Определительматрицы: In[ ] := Det[m2] Out[ ] = -5

Норма матрицы: In[ ] := Norm[m2, ] Out[ ] = 5

Собственные значения и собственные векторы матрицы m1:

In[ ] := Eigenvalues[m2] Out[ ] = {-5, 1}

In[ ] := Eigenvectors[m2] Out[ ] = {{-1, 1}, {2, 1}}

Произведение матрицы на вектор: In[ ] := m2.v3 Out[ ] = {16, -17}

Обратная матрица: In[ ] := m3=Inverse[m2] Out[ ] =

Произведение исходной матрицы на обратную: In[ ] :=m2.m3 Out[ ] = {{1, 0}, {0, 1}}

Объединим матрицы m2 и m3 в единую матрицу :

In[ ] :=m4=Join[m2, m3] Out[ ] =

Транспонируем матрицу m4:

In[ ] :=m5=Transpose[m4] Out[ ] =

Просуммируем элементы столбцов матрицы m5: In[ ] := Total[m5] Out[ ] =

Просуммируем все элементы матрицы m5: In[ ] :=Total[m5, 2] Out[ ] = 4

Создадим диагональную матрицу: In[ ] :=DiagonalMatrix[v3] Out[ ] = {{-4, 0}, {0, 3}}

Ряд функций для преобразования списков приведен также в разделах 11 и 12.

В заключение раздела приведем пример определения векторной функции. Данная функция реализует операцию “бабочка” – базовую операцию алгоритма быстрого преобразования Фурье. Операция вычисляет дискретное преобразование Фурье для массива из двух элементов {a, b}; в результате операции исходный массив преобразуется в массив {a+b, a-b}:

In[ ] := w[{a, b}] := {a+b, a-b}; w[{1, 2}] Out[ ] = {3, -1}

Математика сначала вычисляет целиком вектор, описанный в правой части операции присваивания, и затем заменяет старый вектор на новый.