2015-05-04 6 views
0

У меня ошибка в моем коде, я надеюсь, что вы можете мне помочь !: (Когда я вставляю код, происходит что-то странное (не все это написано как код), но здесь мы идем:Ошибка: Singular Matrix

Я хочу linalg.solve (A, Res). Первый (A) имеет 10 строк и 10 столбцов, т. Е. Матрицу ([10 массивов, 10 элементов]), а второй - 10 строк и 1 столбец, то есть матрица ([1 массив, 10 элементов])

Когда я выполнил код он выдает следующее сообщение об ошибке:. вырожденной матрицы

Я не знаю, что делать, если я не». T попросите linalg.solve, но попросите распечатать обе матрицы, оба они в порядке: 10 уравнений, 10 переменных. Поэтому я не знаю, что происходит. Пожалуйста помоги!!!

Если вам нужно, чтобы я вставлял код (как это ужасно, как кажется), я могу это сделать.

Спасибо

+0

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

+0

Если система определена, вы можете использовать numpy.linalg.lstsq для получения одного из решений. – Ben

ответ

2

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

Here - довольно приличное объяснение о том, что происходит для 2 x 2 матриц (но обобщение простое для N x N).

+0

Хорошо, но эти матрицы, которые я построил, являются результатом расчета фермы. Итак, если матрица сингулярна, значит, ферма не может быть решена? Я в замешательстве, я имею в виду, я знаю линейную алгебру, но даже если ваша матрица имеет столько же уравнений, сколько переменных, она может быть не решена? (Я не совсем это помню) –

+1

Да, определитель - это величина, которая делает разницу. Подумайте об этом: Решите '[1 1; 1 1] [x y]^T = [1 2]^T'. Он не имеет решения (определитель равен нулю). Или, другой крайний, '[1 1; 1 1] [x y]^T = [1 1] ', который имеет бесконечное число решений. Итак, если детерминант не равен нулю (т. Е. Матрица коэффициентов неособая), ваша система уравнений либо не имеет решения, либо имеет бесконечное число решений. Я предлагаю вам взглянуть на ссылку, которую я разместил, это очень полезно для быстрой очистки. – vsoftco