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

Обновлено: 07.07.2024

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

Объявляя переменные приватными (используя слово private), я тем самым ограничиваю доступ к ним извне класса. То есть если кто-то создаст экземпляр класса Matrix, он не сможет напрямую обращаться к полю n и менять его. Вот как я его установил в конструкторе, таким оно и будет. Например:

И хотя технически это ни на что не влияет. Семантически я как бы говорю, что эти данные трогать нельзя, класс лучше знает, как с ними работать.

Давайте еще добавим свойство, которое будет возвращать размер матрицы. Возможно мы помним: свойство — это что-то вроде поля, только которому можно явно указать метод, который вызывается при присваивании и метод, который вызывается при запросе поля.

Давайте попробуем написать программу где используется это класс. Переключимся на функцию Main и напишем код:

если рассмотреть как вызывается код, получится примерно так:

Пока у нас получается пустая матрица

Как мы видим у нас есть объект матрица, внутри которого где-то есть массив для хранения данных. В принципе уже можно заполнить матрицу так

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

Такая возможности есть.

И так, отредактируем класс Matrix и определим метод для индексации

Ну вот теперь матрицу можно заполнять:


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

и можно будет переписать код функции Main так:

Кратко и понятно.

В общем пока вроде ничего интересного. Ну сделали мы обертку двумерного массива. Ну добавили пару методов. А дальше и что? А дальше будем реализовывать операции над матрицами.

И так что есть результат сложения двух матриц? Очевидно, это новая матрица тех же размеров, что и исходная, но где соответствующие элементы сложены. Добавим функцию, которая будет добавлять к исходной матрице другую матрицу и возвращать новую. Правим класс Matrix

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

увидим что-то в этом роде:


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


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

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

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

собственно, что здесь и зачем попытается рассказать схема:


И вроде если кое-как все понятно, то можно добавить оператор в класс Matrix

вернемся к нашей функции Main и подправим код, так чтобы использовалась операция “+”


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

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

\[\begin1 & 2 & 3\\\ 4 & 5 & 6\\\ 7 & 8 & 9\end + 3 = \begin1 & 2 & 3\\\ 4 & 5 & 6\\\ 7 & 8 & 9\end + \begin3 & 0 & 0\\\ 0 & 3 & 0\\\ 0 & 0 & 3\end = \begin4 & 2 & 3\\\ 4 & 8 & 6\\\ 7 & 8 & 12\end\]

отредактируем наш класс Matrix:

и код функции Main


А что если мы захотим сложить наоборот, число + Матрица, поменяем

а фиг вам, такой код даже не скомпилируется:


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

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


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

Так же было бы удобно если б матрицу можно было инициализировать с двумерного массива.

Собственно, с этой операции и начнем.

Перегрузка конструктора

Сейчас у нас есть конструктор, которому передаешь целое число n, и он создает матрицу размером \(n\times n\).

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

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

И так добавим второй конструктор

теперь можно проверить как оно работает:


Пробуем тестировать

Создадим тест. Для этого по старинке тыкаем где-нибудь правой кнопкой внутри класса Matrix и выбираем “Создание модульных тестов”



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

Так как тестирование как правило сводится к проверке на равенство одних объектов другим, то попробуем создать две одинаковый матрицы и сравнить их:



Короче, чтобы решить эту проблему надо переопределить операцию сравнения то бишь равенства двух матриц.

Переопределение операции равенства

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


Матрица в Calc:

Я использую следующий базовый код в LibreOffice:

Я хочу, чтобы нормализованная матрица появилась справа от оригинальной. Но ничего не появляется. Что я делаю неправильно?

1 ответ

Чтобы найти такие проблемы с отладчиком Basic IDE, нажмите "Вкл. / Выкл. Точку останова" на панели инструментов, чтобы установить пару точек останова, а также "Включить наблюдение".

Решение матриц – это понятие, которое обобщает все возможные операции, производимые с матрицами. Математическая матрица – таблица элементов. О такой таблице, где m строк и n столбцов, говорят, что это матрица имеет размерность m на n.

Общий вид матрицы:

Решение матриц

Для решения матриц необходимо понимать, что такое матрица и знать основные ее параметры. Основные элементы матрицы:

  • Главная диагональ, состоящая из элементов а1122…..аmn.
  • Побочная диагональ, состоящая из элементов а1n2n-1…..аm1.

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

  • Квадратная – такая матрица, где число строк = числу столбцов (m=n).
  • Нулевая – где все элементы матрицы = 0.
  • Транспонированная матрица — матрица В, которая была получена из исходной матрицы A путем замены строк на столбцы.
  • Единичная – все элементы главной диагонали = 1, все остальные = 0. — матрица, при умножении на которую исходная матрица даёт в результате единичную матрицу.

Матрица может быть симметричной относительно главной и побочной диагонали. Т.е., если а1221, а1331,….а2332…. аm-1nmn-1, то матрица симметрична относительно главной диагонали. Симметричными могут быть лишь квадратные матрицы.

Далее приведем основные методы решения матриц.

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

Почти все методы решения матрицы заключаются в нахождении ее определителя n-го порядка и большинство из них довольно громоздки. Чтобы найти определитель 2го и 3го порядка есть другие, более рациональные способы.

Нахождение определителей 2-го порядка.

Для вычисления определителя матрицы А 2го порядка, необходимо из произведения элементов главной диагонали вычесть произведение элементов побочной диагонали:

Методы решения матриц. Нахождение определителей 2го порядка

Методы нахождения определителей 3го порядка.

Ниже приведены правила для нахождения определителя 3го порядка.

Правило треугольника при решении матриц.

Упрощенно правило треугольника, как одного из методов решения матриц, можно изобразить таким образом:

Правило треугольника при решении матриц

Другими словами, произведение элементов в первом определителе, которые соединены прямыми, берется со знаком "+"; так же, для 2го определителя - соответствующие произведения берутся со знаком "-", то есть по такой схеме:

Правило треугольника при решении матриц

Правило треугольника при решении матриц

Правило Саррюса при решении матриц.

При решении матриц правилом Саррюса, справа от определителя дописывают первые 2 столбца и произведения соответствующих элементов на главной диагонали и на диагоналях, которые ей параллельны, берут со знаком "+"; а произведения соответствующих элементов побочной диагонали и диагоналей, которые ей параллельны, со знаком "-":

Правило Саррюса при решении матриц

Правило Саррюса при решении матриц

Разложение определителя по строке или столбцу при решении матриц.

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

Приведение определителя к треугольному виду при решении матриц.

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

Теорема Лапласа при решении матриц.

Решая матрицы по теореме Лапласа, необходимо знать непосредственно саму теорему. Теорема Лапласа: Пусть Δ – это определитель n-го порядка. Выбираем в нем любые k строк (либо столбцов), при условии k n – 1. В таком случае сумма произведений всех миноров k-го порядка, содержащихся в выбранных k строках (столбцах), на их алгебраические дополнения будет равна определителю.

Решение обратной матрицы.

Последовательность действий для решения обратной матрицы:

  1. Понять, квадратная ли данная матрица. В случае отрицательного ответа становится ясно, что обратной матрицы для нее не может быть.
  2. Понять, квадратная ли данная матрица. В случае отрицательного ответа становится ясно, что обратной матрицы для нее не может быть.
  3. Вычисляем алгебраические дополнения.
  4. Составляем союзную (взаимную, присоединённую) матрицу C.
  5. Составляем обратную матрицу из алгебраических дополнений: все элементы присоединённой матрицы C делим на определитель начальной матрицы. Итоговая матрица будет искомой обратной матрицей относительно заданной.
  6. Проверяем выполненную работу: умножаем матрицу начальную и полученную матрицы, результатом должна стать единичная матрица.

Решение систем матриц.

Для решения систем матриц наиболее часто используют метод Гаусса.

Метод Гаусса — это стандартный способ решения систем линейных алгебраических уравнений (СЛАУ) и он заключается в том, что последовательно исключаются переменные, т.е., при помощи элементарных изменений систему уравнений доводят до эквивалентной системы треугольного вида и из нее, последовательно, начиная с последних (по номеру), находят каждый элемент системы.

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

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

Ввести с клавиатуры матрицу MxN, выдать на печать её и транспонированную матрицу
Здравствуйте, прошу у Вас помощи! Учусь на 1 курсе ВУЗа, не объяснив ничего и не прочитав лекций.

Массив: Подскажите, как задать размерность массива с клавиатуры и заполнить этот массив с клавиатуры?
Всем привет! Подскажите как задать размерность массива с клавиатуры и заполнить этот массив с.


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


Заполнить матрицу с клавиатуры. Отсортировать строки по убыванию
Дана матрица из целочисленых элементов размером 3х4. Заполнить матрицу с клавиатуры. Отсортировать.

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