Как сделать матрицу в delphi

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

Андрей Омутов
дата публикации 24-05-2001 00:00

Матрицы в Delphi

Итак, в архиве приведен исходный текст весьма простенькой библиотеки Matrix.pas .
Перечень функций этой библиотеки:

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

Важные, на мой взгляд, замечания. НЕ СТЕСНЯЙТЕСЬ использовать подход, использующий стандартный тип Pascal - record - в объектах мало чего хорошего в межкомпиляторном взаимодействии. Да и, кстати, использование типа record до сих пор является самым быстрым способом математических расчетов, в отличиие от ООП. Частенько простое 2+2=4 дает существенный выигрыш по времени выполнения, по сравнению с объектным подходом, а если математических вычислений в Вашей программе великое множество.

P.S . Касательно уровня подготовки наших институтских кадров - эта библиотека сдавалась в качестве лабораторного задания аж в трех уральских университетах (кроме скромной персоны автора, разумеется :o) - ни один сотрудник кафедры/лаборатории не признал авторства сдающего студента (ну, это и понятно ;o), и столь простые принципы работы доказывались чуть ли не перед комиссией от кафедры. ;o)))


Смотрите также материалы по темам: [Матричное исчисление]

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

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

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

Далее мы будем говорить о прямоугольных матрицах. Матрица А размера m х п - это таблица из m строк и п столбцов. Такую матрицу будем обозначать как Am,n. Будем считать, что элементами матрицы являются действительные числа. С точки зрения программирования такая матрица - это двумерный массив действительных чисел. В дальнейшем изложении для описания матриц используются динамические массивы. Поэтому будем рассматривать матрицу как массив А с числом строк m и числом столбцов п, в котором индекс строки может меняться от 0 до m - 1, а число столбцов - от 0 до п - 1. Таким образом, элемент а^ матрицы Атд1 равен A[i-1, j-1].

Для матриц определены три основные операции: сложение/вычитание, умножение матриц и умножение матрицы на число.

Суммой и разностью двух матриц Am,n и Bm>n одинакового размера mxn называется матрица Cm,n, элементы которой определяются суммированием или вычитанием соответствующих элементов матриц Ащд! и Вт п:

C[i, j] = A[i, j] ± B[i, j].

Умножение матрицы Атф на матрицу Врп определено в случае, если число столбцов первой матрицы равно числу строк второй матрицы. В этом случае произведение Ат>р • Вр^п - это матрица Cm,n, элементы которой определяются соотношением:

Для квадратных матриц одинакового размера m произведения Am,m • Bm,m и Bm>m • Am,m всегда определены, хотя в общем случае эти произведения не равны друг другу/

Произведением матрицы Ат>п на число Ь является матрица Ст>п, все элементы которой равны соответствующим элементам матрицы Ат>п, умноженным на Ь:

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

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

Определитель равен сумме произведений элементов любой строки или столбца на их алгебраические дополнения. Алгебраическим дополнением Ац элемента называется число, равное (-1)1+*Му, где - минор элемента а^. Минором называется определитель, получающийся из исходного вычеркиванием строки и столбца, на пересечении которых расположен элемент ау. Например, при разложении определителя по элементам первого столбца получим:

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

Имеется много методов вычисления определителя матрицы. Один из них следует из приведенного выше соотношения. Можно использовать описанное разложение определителя по строке или столбцу. Тогда вычисление определителя порядка п сводится к вычислению п определителей порядка п-1. Каждый из них в свою очередь можно разложить по строке или столбцу, что понизит порядок вычисляемых определителей еще на 1. Таким образом, задачу можно свести к вычислению определителей 1-го-порядка, которые просто равны значениям своих единственных элементов.

Другой способ позволяет свести вычисление определителя В порядка п к вычислению одного определителя порядка п-1. Пусть надо вычислить определитель

2.2 Матрицы

Если ац ф 0, то вычтем из второй строки первую, умноженную на (а2і / ац), из третьей строки - первую, умноженную на (азі / аи) и Т-Д- От подобных операций значение определителя матрицы не меняется и определитель примет вид:

2.2 Матрицы

Таким образом, путем линейных преобразований задача свелась к вычислению определителя порядка п-1. Правда, при этом предполагалось, что ац ф 0. Если оказывается, что ац = 0, то возможны два варианта: все элементы первого столбца равны нулю, или в первом столбце есть хотя бы один отличный от нуля элемент аы. Если все элементы столбца равны нулю, это означает, что В = 0, так что вычисления можно считать законченными. А если имеется а^ ф 0, то переставив первую и к-ую строки получим определитель, в котором ац ф 0 и который можно вычислить описанным методом. Только, исходя из изложенного ранее свойства определителя, при перестановке строк надо изменить его знак.

Подпрограммы представлены на двух языках: Fortran и Delphi.

1. Fortran

B(N,M)- 2-я матрица, размерностью (N,M)

С(K,K)- Матрица – результат умножения, размерностью (K,K)

X(N,K)- 1-я матрица, размерностью (N,K)

XTR(K,N)- Транспонированная матрица, размерностью (K,N)

E(N,N)- Обращенная матрица, размерностью (N,N)

2. Delphi

A(M10,N10)- 1-я матрица, размерностью (M10,N10)

B(N10,M10)- 2-я матрица, размерностью (N10,M10)

С(K10,K10)- Матрица – результат умножения, размерностью (K10,K10)

mas=array[1..M,1..N] of real;

mas=array[1..M,1..N] of real;

X(N,K)- 1-я матрица, размерностью (N,K)

XTR(K,N)- Транспонированная матрица, размерностью (K,N)

E(N,N)- Обращенная матрица, размерностью (N,N)

mas=array[1..M,1..N] of real;

Александр Малыгин

Объект обсуждения - программное обеспечение для выполнения автоматизированного конструкторского и технологического проектирования, разработки управляющих программ, вопросы, связанные с разработкой прикладных САПР.

4 thoughts to “Подпрограммы умножения, транспонирования и обращения матриц”

Все очень хорошо, только вопрос смогу ли я решить СЛАУ , используя обращение матрицы. Т.е получив обратную матрицу и умножив ее на вектор столбец, что справа, получить столбец с корнями?

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

Единственная подпрограмма, которая сработала идеально, премного благодарен))

Программа для выполнения операций с матрицами и векторами


Рис.1 Результат перемножения матрицы на обратную (единичная матрица)

Используемые в приложении компоненты Delphi

  • TStringGrid - таблица строк, позволяют отображать матрицы в виде таблиц (т.е. двумерных массивов) разных размеров (2х2, 3х3, 4х4, 5х5, 6х6, 7х7 и не только квадратные. ) и вектора в виде строк и столбцов;
  • TUpDown - кнопка-счетчик дает возможность избежать ошибок при вводе цифровой информации
  • TEdit - окно для отражения важной информации, изменяемой элементом TUpDown
  • TButton - командная кнопка, запускает целевое действие
  • TGroupBox - для группировки элементов на форме (интуитивная связь)
  • TLabel - лейбл, ярлык, пояснения.

Сложение и вычитание матриц

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

Транспонирование

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

Определитель и обратная матрица

Определитель (или детерминант) матрицы - это число, полученное в результате определенных операций над матрицей.

Обратная матрица (которая и обозначается как матрица в -1 степени) - матрица, полученная из первоначально заданной матрицы по определенным правилам. Произведение обратной матрицы на первоначальную дает единичную матрицу. Так А * А -1 = Е .

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

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

Так если имеем матрицу А с размерами i,k и матрицу B с размерами k,j то результатом будет матрица С с размерами i,j. Каждый элемент новой матрицы (с индексами ij) будет равен сумме произведений элементов
i-строки первой матрицы на элементы j-столбца второй матрицы.

Формула элемента при умножении матриц

Или можно сказать, что каждый элемент новой матрицы будет равен скалярному произведению i-вектора-строки первой матрицы на j-вектор-столбец второй матрицы

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

Деление матриц А на В заменяется операцией умножения А на обратную матрицу В -1 .
Тем самым, матрица В как бы попадает в знаменатель дроби, тогда как А остается в числителе.

Решение СЛАУ с помощью калькулятора

Пример решения системы линейных алгебраических уравнений (слау) приведен в видео.

Если не удалось запустить видео, воспользуйтесь этой ссылкой . видео на YouTube

  1. Заполнить матрицу А коэффициентами при переменных из системы уравнений;
  2. Найти обратную матрицу А -1 ;
  3. Умножить обратную матрицу на вектор-столбец свободных членов B;
  4. Полученный вектор-столбец X и будет содержать значения переменных;

Исходный код на Delphi

Поскольку исходный код предлагаю очень дешево, то приводить листинг не буду.

  1. Объекты класса TStringGrid (строковая таблица) не имеют метода очистки всех своих ячеек, поэтому очистка проводится через методы строк или столбцов
    См. процедуры-обработчики событий кнопок очистки, которые вызывают одну и ту же процедуру SG_clear, посылая в нее в виде параметра соответствующую StringGrid.
  2. Процедура заполнения нулями
    procedure Full_0(sg:TStringGrid);
    необходима чтобы исключить ошибки конвертации пустых ячеек в числа
    Т.е. перед вычислениями производится проверка содержимого всех ячеек и если ячейка, по недосмотру пользователя, осталось пустой, то в нее помещается 0. Логично?

Тестирование - это наиболее важный этап в жизненном цикле программного продукта. Поэтому не верьте картинкам, фильмам и сказкам…

Только личное тестирование во всех наиболее сложных сочетаниях данных - должно убедить Вас в доброкачественности алгоритма и исходного кода!

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

Если на этой странице не нашлось того, что Вы так искали.


Не попадайтесь на удочку мошенников-кидал.

Valid HTML 5 Strict

460040, г.Оренбург ©2010 Учебные программы и сайты для студентов

Читайте также: