Green-sell.info

Новые технологии
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Матрица в программировании

Матрицы. Понятие. Применение

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

В 3D-графике, матрицы используются для преобразования координат из одной системы координат в другую. Вообще, для преобразования базиса (базис — набор векторов, задающих координатные оси) в трехмерном пространстве вполне хватает матрицы 3х3, однако, для целей 3D-графики этого не всегда достаточно. В частности, перспективное проецирование удобно представить матрицей, но для этого необходима матрица 4х4. Также с этой целью вводятся т.н. однородные координаты, где трехмерной точке (x, y, z) соответствует набор четырех координат (xw, yw, zw, w).

Основные операции

Из операций, определенных над матрицами, мы рассмотрим умножение, транспонирование и, частично, обращение.

Умножение матриц

Определяется произведение матриц так:
Если Aij — элемент матрицы A, стоящий в i-ой строке и j-ом столбце, и C = AB, то

т.е. элементы матрицы C получаются как скалярные произведения строк A на столбцы B.

Отсюда видно, что при умножении матриц, необходимо, чтобы в первом сомножителе было столько же столбцов, сколько строк во втором.
Кое-кому также очевидно, что если существует произведение AB, то это еще не означает существования BA, не говоря уже об их равенстве.
В общем, $$AB neq BA$$, т.е. произведение матриц не коммутативно.

Зато оно ассоциативно. Проще говоря:
$$(AB)С = A(BC)$$

Умножение любой матрицы на единичную, дает исходную:
$$AI = A$$

Транспонирование матриц

Транспонирование обозначается как AT и возможно только для квадратных матриц. Если $$B=A^T$$, то
$$B_ = B_$$
Иными словами, строки и столбцы меняются местами.

Обращение

Обратная к A матрица обозначается как $$A^<-1>$$ и характеризуется тем, что при умножении A на нее, получается единичная матрица:
$$AA^ <-1>= I$$

Существует обратная к данной матрица далеко не всегда и процесс её нахождения далеко не тривиален. Однако, в 3D графике, напомню, матрицы используются для задания преобразований системы координат (базиса). Базис, заданный тремя взаимно перпендикулярными векторами единичной длины, называется ортонормированным. А у матрицы, задающей преобразование из одного ортонормированного базиса в другой, обратная матрица совпадает с транспонированной:
$$A^ <-1>= A^T$$

Матрицы, обладающие этим свойством, называются ортогональными.
В 3D-графике матрицы поворота ортогональны и их произведение тоже.

Применение матриц

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

Например, для поворота точки относительно оси X и параллельного переноса, ее надо последовательно умножить на матрицу поворота и параллельного переноса (см. следующий раздел). Причем, т.к. произведение матриц не коммутативно, результат зависит от последовательности умножения:
$$PRT neq PTR$$, т.к.
$$RT neq TR,$$
где P — точка, R — матрица поворота, T — матрица переноса.

Ассоциативность произведения матриц позволяет не умножать каждую точку на несколько матриц, а сперва перемножить матрицы преобразования и умножать точки уже на результирующую матрицу:
$$PRT = P(RT)$$

Основные матрицы

Здесь приведены наиболее часто используемые в 3D-графике матрицы.

Параллельный перенос точки на вектор (x, y, z):

очень огромная матрица в программировании C

Добрый день всем,

Я новичок в программировании C, и у меня нет много знаний о том, как обрабатывать очень огромную матрицу в C. например, размер матрицы 30.000 x 30.000.

Мой первый подход заключается в динамическом хранении памяти:

И это хорошая идея, чтобы обрабатывать + / — матрицу 8.000 x 8.000. Но не больше. Итак, я хочу попросить любой свет , чтобы справиться с этой огромной матрицей, пожалуйста.

Как я уже говорил: Я новичок в C, поэтому, пожалуйста, не ожидайте слишком большого опыта.

Заранее спасибо за любое предложение,

PD: мой ноутбук conf — это linux ubuntu, 64bit, i7 и 4gb ram.

4 Ответов

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

Просто используйте malloc один раз-т. е.:

Тогда для вычисления индекса

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

Ну, двумерный массив (примерно аналогичное представление матрицы C) из 30000 * 30000 ints , предполагая 4 байта на int , занял бы 3.6 * 10^9 байт, или

3.35 гигабайта. Никакая обычная система не позволит вам выделить столько статической виртуальной памяти во время компиляции, и я не уверен, что вы могли бы успешно выделить ее динамически с помощью malloc() . Если вам нужно только представить небольшой числовой диапазон, то вы можете резко (т. е. в 4 раза) уменьшить потребление памяти вашей программы с помощью char . Если вам нужно сделать что-то вроде, например, присвоить логические значения определенным числам, соответствующим индексам массива, вы можете использовать битовые наборы и дополнительно сократить потребление памяти (в 32 раза). В противном случае, единственный жизнеспособный подход будет включать работу с меньшими подмножествами матрицы, возможно, сохранение промежуточных результатов на диск, если это необходимо.

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

Предполагая, что вы объявляете свои значения как float , а не double , Ваш массив будет иметь размер около 3.4 GB. Пока вам нужен только один, и у вас есть виртуальная память в вашей системе Ubuntu, я думаю, вы можете просто закодировать это очевидным образом.

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

Положить гораздо больше RAM в ваш компьютер.

Аренда времени на вычислительном кластере и использование кластерной обработки для вычисления необходимых значений.

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

Возможно, вы захотите выполнить поиск в Google для «processing large data sets»

Я не знаю, как добавить комментарии, так что падение ответ здесь.

1 вещь, которую я могу думать, это то, что вы не получите эти значения в запущенной программе. Они будут поступать только из некоторых файлов. Поэтому вместо того, чтобы принимать все значения, продолжайте читать 30 000×2 один за другим, чтобы не попасть в память.

Для матрицы 30k*30k, если значение инициализации равен 0(или же) для всех элементов, что вы можете сделать, это вместо того, чтобы создавать целые матрицы создать матрицу 60k*3 (3 cols будет быть : строки нет, коль нет и значение). Это потому, что вы будете иметь Макс 60k другое место, которое будет затронуто.

Я знаю, что это будет немного медленно, потому что вам всегда нужно видеть, если элемент уже добавлен или нет. Так что, если скорость не ваша забота , это будет работать.

Похожие вопросы:

У меня есть матрица измерений 20,000,000*3, хранящаяся в файле. Я хочу получить доступ к нему очень быстро. Как я могу это сделать? Я не могу объявить карту такого размера. Что мне делать.

Читать еще:  Текстовый редактор системы программирования это

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

Как выглядит очень общая функция в функциональном программировании? Кто-то сказал we don’t have objects, but we have higher order functions. Заменяют ли объекты функции более высокого порядка? При.

У меня есть огромная разреженная матрица A ‘ with 14979 stored elements in Compressed Sparse Column format> для кого мне нужно.

У меня есть огромная матрица (584064×5369468), и я должен использовать разреженную матрицу в Matlab, но в моем расчете очень медленно присваивать значение разреженной матрице. Я не могу дождаться.

Мне нужно реализовать этот сценарий в C#: Матрица будет очень большой, может быть, 10000×10000 или больше. Я буду использовать это для матрицы расстояний в алгоритме иерархической кластеризации. На.

Я очень новичок в программировании c++ может ли кто-нибудь сказать мне, как Direct-X SDK полезен и как он работает, и как мы можем использовать его в программировании игр. Я скачал его, и я нашел.

Я пытаюсь реализовать алгоритм спектральной кластеризации для обнаружения сообщества в задаче графа. У меня есть очень огромная матрица для вычисления собственных векторов, матрица > 1Mx1M. Numpy и.

Может ли структура в программировании C рассматриваться/сравниваться с классом в программировании C# OOP ? Я спрашиваю об этом, потому что структура имеет разные типы данных, которые похожи на.

Я программист C/C++, и я начал изучать Racket / чтение SICP. У меня есть вопрос об эффективном представлении матриц в функциональном программировании. Каково наиболее эффективное представление.

Технология программирования на Си: представление матриц, работа с файлами и с текстами

Представление матриц и многомерных массивов

Специального типа данных матрица или многомерный массив в Си нет, однако, можно использовать массив элементов типа массив . Например, переменная a представляет матрицу размера 3×3 с вещественными элементами:

Элементы матрицы располагаются в памяти последовательно по строкам: сначала идут элементы строки с индексом 0, затем строки с индексом 1, в конце строки с индексом 2 (в программировании отсчет индексов всегда начинается с нуля, а не с единицы!). При этом выражение

где i — целая переменная , представляет собой указатель на начальный элемент i -й строки и имеет тип double* .

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

представляет собой элемент матрицы a в строке с индексом i и столбце с индексом j . Элемент матрицы можно использовать в любом выражении как обычную переменную (например, можно читать его значение или присваивать новое).

Такая реализация матрицы удобна и максимально эффективна с точки зрения времени доступа к элементам. У нее только один существенный недостаток: так можно реализовать только матрицу, размер которой известен заранее. Язык Си не позволяет описывать массивы переменного размера, размер массива должен быть известен до начала работы программы еще на стадии компиляции.

Пусть нужна матрица , размер которой определяется во время работы программы. Тогда пространство под нее надо захватывать в динамической памяти с помощью функции malloc языка Си или оператора new языка C++. При этом в динамической памяти захватывается линейный массив и возвращается указатель на него. Рассмотрим вещественную матрицу размером m строк на n столбцов. Захват памяти выполняется с помощью функции malloc языка Си

или с помощью оператора new языка C++:

При этом считается, что элементы матрицы будут располагаться в массиве следующим образом: сначала идут элементы строки с индексом 0 , затем элементы строки с индексом 1 и т.д., последними идут элементы строки с индексом m — 1 . Каждая строка состоит из n элементов, следовательно, индекс элемента строки i и столбца j в линейном массиве равен

(действительно, поскольку индексы начинаются с нуля, то i равно количеству строк, которые нужно пропустить, i * n — суммарное количество элементов в пропускаемых строках; число j равно смещению внутри последней строки). Таким образом, элементу матрицы в строке i и столбце j соответствует выражение

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

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

После этого к элементу a ij можно обращаться с помощью выражения

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

Многомерные массивы реализуются аналогично матрицам. Например, вещественный трехмерный массив размера 4 x 4 x 2 описывается как

обращение к его элементу с индексами x , y , z осуществляется с помощью выражения

Многомерные массивы переменного размера с числом индексов большим двух встречаются в программах довольно редко, но никаких проблем с их реализацией нет: они реализуются аналогично матрицам. Например, пусть надо реализовать трехмерный вещественный массив размера m x n x k . Захватывается линейный массив вещественных чисел размером m * n * k :

Доступ к элементу с индексами x , y , z осуществляется с помощью выражения

Пример: приведение матрицы к ступенчатому виду методом Гаусса

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

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

  1. если в матрице есть нулевая строка, то все строки ниже нее также нулевые;
  2. пусть aij не равное 0 — первый ненулевой элемент в строке с индексом i , т.е. элементы ail = 0 при l i и l = i , прибавляем i -ю строку, умноженную на коэффициент r = -akj/aij :

Такая схема работает нормально только тогда, когда коэффициент r по абсолютной величине не превосходит единицы. В противном случае, ошибки округления умножаются на большой коэффициент и, таким образом, экспоненциально растут. Математики называют это явление неустойчивостью вычислительной схемы. Если вычислительная схема неустойчива, то полученные с ее помощью результаты не имеют никакого отношения к исходной задаче. В нашем случае схема устойчива, когда коэффициент r = -akj/aij не превосходит по модулю единицы. Для этого должно выполняться неравенство

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

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

Читать еще:  Программирование вопросы к экзамену

При реализации метода Гаусса используется схема построения цикла с помощью инварианта, см. раздел 1.5.2. В цикле меняются две переменные — индекс строки i , 0 = >

ЧАВО по матрицам и кватернионам

Часто задаваемые вопросы по матрицам и кватернионам.

Введение

Замечание по поводу OpenGL и этого документа

В этом документе, как в большинстве книг по математике, все матрицы представлены в стандартном математическом виде. К сожалению, в уроках и документах по использованию графических библиотек типа IrisGL, OpenGL используют представление, в котором изменены местами столбцы и строки.

В этом документе, к примеру, матрица переноса 4×4 записывается в таком виде:

В коде это можно записать вот так:

OpenGL использует одномерный массив для хранения матриц, но, к счастью, они находятся в памяти в таком виде, что получив адрес pfMatrix и скастовав его к float* можно увидеть матрицу в том виде, в каком ее передают в glLoadMatrixf.

Во фрагментах кода в этом документе используются одномерные массивы для хранения матриц. Порядок элементов в них транспонирован как в OpenGL.

Что такое матрица?

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

Матрицы можно складывать, вычитать, умножать и делить.

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

Матрица с M рядов и N колонок описывается как матрица MxN.

Описать отдельный элемент матрицы можно в виде двух индексов.

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

К примеру, если есть матрица M с порядком 4×4, то элементы этой матрицы описываются парами индексов строк и колонок:

У верхнего правого элемента матрицы i=0 и j=3, что можно описать так:

В компьютерной анимации обычно используют матрицы 2×2, 3×3 и 4×4.

Матрицы 2×2 используются для двумерного пространства, например, для поворотов, сдвигов и других типов обработки изображений.

Матрицы 3×3 достаточны для хранения информации о повороте (вращении) и масшатбировании. Такие матрицы могут быть использованы для скелетной анимации.

Матрицы 4×3 достаточно, чтобы хранить поворот, масштабирование и перемещение.

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

Что такое порядок матрицы?

Порядок матрицы — это её размерность. Матрица из M строк и N столбцов имеет порядок MxN.

Как я могу сделать матрицу в C/C++?

Проще всего использовать ключевое слово typedef.

Матрицы 3×3 и 4×4 могут быть описаны так:

Так как матрицы имеют размерность 3×3 и 4×4, им необходимо 9 и 16 элементов соответственно.

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

Однако, использование двух систем отсчета для каждого элемента матрицы часто ведет к путанице. В математике, сначала записывают строку(i), а затем колонку(j):

В C/C++, это будет так:

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

Так что, эффективнее использовать одномерные массивы. Однако останется решить ещё один вопрос. Как двумерный массив проецируется в линейный?

Есть только два решения: строка сначала, колонка потом, либо колонка сначала, а строка потом.

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

При использовании C/C++ порядок элементов в матрице следующий:

mat[0] = , mat[3] = , mat[12] = , mat[15] = .

В чем плюсы от использования матриц?

Один из первых вопросов, задаваемых по использованию матриц в компьютерной анимации: «Зачем вообще они нужны?». Интуиция подсказывает, что придется хорошо потратиться на циклы, и тем самым матричные перемножения замедлят программу.

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

Также можно указать и на плюсы. Используя этот математический подход в описании 3D алгоритмов, можно предсказать и спланировать систему 3D анимации. Этот подход позволяет реализовать анимацию персонажа, сплайны и инверсную кинематику.

Но чаще всего звучит такой вопрос: «А не будет ли быстрее, просто умножить каждую пару координат на коэффициенты поворота для оси, вместо того чтобы производить полное векторно-матричное умножение?»

иначе говоря:
Вращение в X преобразует Y и Z
Вращение в Y преобразует X и Z
Вращение в Z преобразует X и Y

За это приводятся следующие аргументы:

Дана вершина V = (x, y, z), углы поворота (A,B и C) и перенос (D,E,F).

И следующий алгоритм:

Вместе они займут следующее количество процессорного времени:

Матрица, ее история и применение

Разделы: Математика

Матрица, её история и применение

Термин « матрица » имеет много значений. Например, в математике матрицей называется система элементов, имеющая вид прямоугольной таблицы, в программировании матрица – это двумерный массив, в электронике – набор проводников, которые можно замкнуть в точках их пересечений. Покерные фишки также имеют непосредственное отношение к матрице. Фишки для покера изготавливаются из высококачественного композиционного материала, зачастую с металлической сердцевиной. В свою очередь композиционный материал или композит имеет матрицу и включенные в нее армирующие элементы (исключение составляют слоистые композиты).
Матрица в фотографии – это интегральная микросхема (аналоговая или цифро-аналоговая), которая состоит из фотодиодов (светочувствительных элементов). Благодаря светочувствительной матрице происходит преобразование спроецированного на нее оптического изображения в электрический сигнал аналогового типа, а при наличии в составе матрицы АЦП, то преобразование происходит в поток цифровых данных.
Матрица – основной элемент цифровых фотоаппаратов, всех современных видео- и телекамер, фотокамер, встроенных в мобильный телефон и системы видеонаблюдения.

Основное значение термин «матрица» имеет в математике.

Ма́трица — математический объект, записываемый в виде прямоугольной таблицы элементов кольца или поля (например, целых или комплексных чисел), которая представляет собой совокупность строк и столбцов, на пересечении которых находятся её элементы. Количество строк и столбцов матрицы задают размер матрицы. Хотя исторически рассматривались, например, треугольные матрицы, в настоящее время говорят исключительно о матрицах прямоугольной формы, так как они являются наиболее удобными и общими.

Впервые матрицы упоминались ещё в древнем Китае, называясь тогда «волшебным квадратом». Основным применением матриц было решение линейных уравнений. Так же, волшебные квадраты были известны чуть позднее у арабских математиков, примерно тогда появился принцип сложения матриц. После развития теории определителей в конце 17-го века, Габриэль Крамер начал разрабатывать свою теорию в 18-ом столетии и опубликовал «правило Крамера» в 1751 году. Примерно в этом же промежутке времени появился «метод Гаусса». Теория матриц начала своё существование в середине XIX века в работах Уильяма Гамильтона и Артура Кэли. Фундаментальные результаты в теории матриц принадлежат Вейерштрассу, Жордану, Фробениусу. Термин «матрица» ввел Джеймс Сильвестр в 1850 г.

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

Читать еще:  Система программирования это комплекс программ

Матрицы допускают следующие алгебраические операции:

  • сложение матриц, имеющих один и тот же размер;
  • умножение матриц подходящего размера (матрицу, имеющую nстолбцов, можно умножить справа на матрицу, имеющую nстрок);
  • умножение матрицы на элемент основного кольца или поля (т. е. скаляр).

Матрица – множество чисел, образующих прямоугольную таблицу, которая содержит m – строк и n – столбцов. Для обозначения матрицы используется надпись:

А=,

аij, где i – номер строки, j – номер столбца

Далее рассмотрим виды матриц.

Матрицы С и D имеют размеры 3х3 и 2х2. В том случае, когда количество строк матрицы равняется количеству ее столбцов, матрица называется квадратной. Значит матрица C – квадратная матрица третьего порядка, а матрица D — квадратная матрица второго порядка.

С=; D=.

Матрица, которая содержит только одну строчку или один столбец называется вектором. В таких матрицах можновыделить вектор-строка и вектор-столбец. Так, матрица K – это вектор-строка, а матрица F – вектор-столбец.

K=; F=.

Квадратная матрица, у которой в главной диагонали стоят ненулевые элементы, а все остальные – нули называется диагональной матрицей. Матрица L – диагональная матрица третьего порядка. Если ненулевые элементы равны только единицам, то это единичная матрица, она всегда обозначается буквой Е. В нашем случае матрица Е – тоже единичная матрица третьего порядка.

L= E=.

Если все элементы матрицы нули, то это нулевая матрица. Например, матрица V – нулевая матрица третьего порядка.

V=.

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

К середине XIX в. матрицы стали самостоятельными объектами математических исследований. К этому времени были сформулированы правила сложения и умножения матриц. Основную роль в их разработке сыграли работы Гамильтона, Кэли и Сильвестра (J.J.Sylvester, 1814–1897). Современное обозначение матрицы предложил Кэли в 1841 году. Исследования Вейерштрасса (K.Th.W.Weierstrass, 1815–1897) и Фробениуса (F.G.L. Frobenius, 1849–1917) далеко продвинули теорию матриц, обогатив ее новым содержанием.

Но существует ещё особая разновидность матриц, называемая магическим квадратом. Магический квадрат квадратная таблица из целых чисел, в которой суммы чисел вдоль любой строки, любого столбца и любой из двух главных диагоналей равны одному и тому же числу.

Магический квадрат – древнекитайского происхождения. Согласно легенде, во времена правления императора Ю (ок. 2200 до н.э.) из вод Хуанхэ (Желтой реки) всплыла священная черепаха, на панцире которой были начертаны таинственные иероглифы и эти знаки известны под названием лошу и равносильны магическому квадрату. В 11 в. о магических квадратах узнали в Индии, а затем в Японии, где в 16 в. магическим квадратам была посвящена обширная литература. Европейцев с магическими квадратами познакомил в 15 в. византийский писатель Э.Мосхопулос. Первым квадратом, придуманным европейцем, считается квадрат А.Дюрера изображенный на его знаменитой гравюре Меланхолия 1. Дата создания гравюры (1514) указана числами, стоящими в двух центральных клетках нижней строки. Магическим квадратам приписывали различные мистические свойства. В 16 в. Корнелий Генрих Агриппа построил квадраты 3-го, 4-го, 5-го, 6-го, 7-го, 8-го и 9-го порядков, которые были связаны с астрологией 7 планет. Бытовало поверье, что выгравированный на серебре магический квадрат защищает от чумы. Даже сегодня среди атрибутов европейских прорицателей можно увидеть магические квадраты.

В 19 и 20 вв. интерес к магическим квадратам вспыхнул с новой силой. Их стали исследовать с помощью методов высшей алгебры и операционного исчисления.

Магические квадраты нечетного порядка можно построить с помощью метода французского геометра 17 в. А.де лаЛубера. Рассмотрим этот метод на примере квадрата 5-го порядка. Число 1 помещается в центральную клетку верхней строки. Все натуральные числа располагаются в естественном порядке циклически снизу вверх в клетках диагоналей справа налево. Дойдя до верхнего края квадрата (как в случае числа 1), продолжаем заполнять диагональ, начинающуюся от нижней клетки следующего столбца. Дойдя до правого края квадрата (число 3), продолжаем заполнять диагональ, идущую от левой клетки строкой выше. Дойдя до заполненной клетки (число 5) или угла (число 15), траектория спускается на одну клетку вниз, после чего процесс заполнения продолжается.

Где ещё применяются матрицы?

Таблица умножения — это произведение матриц (1,2,3,4,5,6,7,8,9)Т ×(1,2,3,4,5,6,7,8,9).

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

В психологии понимание термина сходно с данным термином в математике, но взамен математических объектов подразумеваются некие «психологические объекты» – например, тесты.

Кроме того, матрицы имеет широкое применение в экономике, биологии, химии и даже в маркетинге.

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

Теперь подробнее остановимся на некоторых областях применения матриц.

Рассмотрим теорию бракосочетаний, о которой уже упоминалось.

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

Эти правила допускают точную математическую формулировку в терминах «p-матриц». Одним из первых изложил эти правила в виде аксиом Андре Вейль.

Правила бракосочетания характеризуются следующими аксиомами:

  • Аксиома 1: каждому члену общества приписывается определенный брачный тип.
  • Аксиома 2: двум индивидуумам разрешается вступать в брак тогда и только тогда, когда они принадлежат к одному и тому же брачному типу.
  • Аксиома 3: тип индивидуума определяется полом индивидуума и типом его родителей.
  • Аксиома 4: два мальчика (или две девочки), родители которых принадлежат к разным типам, сами принадлежат к разным типам.
  • Аксиома 5: правила, разрешающие или не разрешающие мужчине вступить в брак со своей родственницей, зависят только от вида родства. В частности, мужчине не разрешается жениться на своей сестре.
  • Аксиома 6: для любых двух индивидуумов можно указать таких их потомков, которым разрешается вступать в брак.

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

Для установления отношения родства пользовались следующими обозначениями:

Вот примеры видов отношений:

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

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

С помощью матриц удобно записывать некоторые экономические зависимости.

Например, рассмотрим таблицу распределения ресурсов по отдельным отраслям экономики (усл. ед.):

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