У вас есть много переменных и много знаменателей, которые часто могут очень замедлить процесс.
Давайте попробуем более простой более быстрый метод, который решает общую форму вашей проблемы, а затем подставляет все ваши переменныеи знаменатели.
n = 5;
MM = ...
...
A = ...
m={{m1,m2,m3,m4},{m5,m6,m7,m8},{m9,m10,m11,m12},{m13,m14,m15,m16}};
sol=Inverse[m].b/.Thread[Rule[Flatten[m],Flatten[A]]]
, что дает решение в доли секунды.Но вам нужно тщательно проверить это, чтобы убедиться, что в вашей задаче или в этом решении нет никаких нулевых знаменателей.
Этот метод быстрее, чем Inverse[A].b
, и намного быстрее, чем LinearSolve[A, b]
для вашей проблемы, но этовремя используется только для расчета решения и не включает потенциально большое количество времени, затрачиваемого на его использование.Он также не включает в себя какие-либо программы, скрытые внутри LinearSolve
для решения потенциальных проблем и особых случаев.
Но я не уверен, что ваш n увеличивается, а лес знаменателей растет намного больше, чем это будетпродолжайте работать быстро или выполнимо.
Протестируйте это внимательно, прежде чем предположить, что все работает.
PS Спасибо за код, который действительно работал!(Я даже не использовал «все»)