Я знаю, как найти их в 1x1, 2x2 и 3x3, но я хочу сделать программу, которая позволит мне вводить размеры моей матрицы, а затем вводить числа, которые входят в матрицу. После ввода чисел я хочу, чтобы он дал детерминант (если можно его получить) и обратную матрицу, но я не знаю, как обойти часть размеров. С чего начать? Какие заголовки следует использовать? Я работаю в Linux, поэтому у меня нет некоторых заголовков, как в Windows, если это кому-то поможет. :)
Как я могу сделать программу на С++, чтобы найти определенную и обратную матрицу любого размера?
Ответы (2)
Начните с выбора книги по линейной алгебре. Один Гилберт Странг. Она читается как хорошая книга рассказов. Пройдите декомпозицию LU и далее в собственные значения и собственные векторы. Где-то по пути вы бы нашли ответ на оба своих вопроса.
Простым способом сделать это было бы использование такой библиотеки, как Eigen.
Если вы действительно хотите сделать это сами, вы должны
- решить, как представить вашу матрицу в памяти,
- написать код для чтения и хранения матрицы в соответствии с вашим определением, и
- напишите код для вычисления обратного/определителя матрицы в соответствии с вашим определением.
Очевидно, что 2. и 3. зависят от вашего выбора для 1., и поиск хорошего представления не тривиален и зависит от вашего приложения, например. насколько большой будет ваша матрица, будет ли она разреженной или плотной.
Если вы не заботитесь об эффективности или просто предполагаете, что ваша матрица мала, вы можете представить свою матрицу в виде одномерного вектора. Например, если у вас есть матрица 4x4, вы можете выделить вектор длиной 16.
Если я правильно понял ваш вопрос, вы на самом деле спрашивали о том, как это сделать динамически (во время выполнения). Используя массивы, это выглядит примерно так:
double* yourMatrix
yourMatrix = new double[columnCount * rowCount];
Это динамически выделяет пространство для columnCount * rowCount
double
s, и теперь вы можете получить доступ к этой памяти как к статическому массиву. Когда вы закончите, вы должны delete[] yourMatrix
предотвратить утечку памяти.
Если вы знаете, как вычислить определитель/инверсию на бумаге, вы сможете перейти отсюда.