Как я могу сделать программу на C ++, чтобы найти определитель и обратную матрицу любого размера?

Я знаю, как найти их в 1×1, 2×2 и 3×3, но я хочу создать программу, которая позволит мне вводить размеры моей матрицы, а затем вводить числа, входящие в матрицу. После ввода чисел, я хочу, чтобы он дал определитель (если смог получить один) и обратную матрицу, но я не знаю, как обойти часть размеров. Какой хороший способ начать с этого? Какие заголовки я должен использовать? Я работаю в Linux, поэтому у меня нет некоторых заголовков, как в Windows, если это помогает. 🙂

0

Решение

Начните с выбора книги по линейной алгебре. Тот, который Гилберт Странг. Это читается как хорошая книга рассказов. Пройдите декомпозицию LU и далее в собственные значения и собственные векторы. Где-то по пути вы бы нашли ответ на оба ваших вопроса.

1

Другие решения

Простой способ сделать это — использовать такую ​​библиотеку, как собственный.

Если вы действительно хотите сделать это самостоятельно, вы должны

  1. решить, как представить вашу матрицу в памяти,
  2. написать код для чтения и хранения матрицы в соответствии с вашим определением, и
  3. напишите код для вычисления обратной / детерминантной матрицы в соответствии с вашим определением.

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

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

Если я правильно понял ваш вопрос, вы фактически спрашивали о том, как сделать это динамически (во время выполнения). Используя массивы, это выглядит примерно так:

double* yourMatrix
yourMatrix = new double[columnCount * rowCount];

Это динамически распределяет пространство для columnCount * rowCount doubles, и теперь вы можете получить доступ к этой памяти, как статический массив. Когда вы закончите, вы должны delete[] yourMatrix предотвратить утечки памяти.

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

1

По вопросам рекламы [email protected]