2015-07-30 3 views
0

Хорошо, я в основном хочу решить набор недоопределенных уравнений. У меня около 289 переменных и 288 уравнений.Решитель Sympy для решения неопределенной системы уравнений

Я следовал за following link, чтобы создать программу моего решателя для решения неопределенных уравнений.

Поскольку у меня есть 289 переменных и почти столько же уравнений, вручную написать уравнения было невозможно, я ввел цикл, который сохраняет уравнения и переменные Sym в массивах и возвращает то, что передается функции solve().

Код:

def getEqn(A, B): 
    for i in range(len(A)): 
     A[i] = Symbol('A['+str(i)+']') 

    equations = [None]*(len(predictions)-1) 
    for i in range(len(equations)-1): 
     equations[i] = Eq(A[i]-A[i+1], B[i]) 

    return equations, A 
def solver(predictions): 
    lenPredictions = len(predictions) 
    A = [None]*lenPredictions 
    for i in range(lenPredictions): 
     A[i] = Symbol('A['+str(i)+']') 
    equations, variables = getEqn(A, predictions) 
    for i in range(lenPredictions-1): 
     res = solve(equations, variables) 
    return res 
def main(): 
    res = solver(predictions) 

Когда я пытаюсь запустить следующий код, я получаю следующее сообщение об ошибке: enter image description here

Примечание: Вся программа работает нормально, без каких-либо ошибок. Его единственные следующие функции, которые бросают ошибку. Я совершенно новый для Python & Sympy. Любое руководство будет действительно полезно, поскольку я не могу знать, где я что-то упускаю.

+0

Вы уверены, что уравнения и переменные имеют значения при вызове решения(). Вы можете проверить это. – Stiffo

+0

Я просто проверил печать «уравнений» и «переменных», возвращаемых из getEqn(), и это не None. –

ответ

0

в getEqn() у вас есть ...

equations = [None]*(len(predictions)-1) 

, а затем ...

for i in range(len(equations)-1): 
    equations[i] = Eq(A[i]-A[i+1], B[i]) 

Это означает, что ваше последнее уравнение не будет получать значение, но по-прежнему не будет ничего, из-за вашего -1 в диапазоне.

Я думаю, что вы хотите ...

equations = [None]*(len(predictions)) 
for i in range(len(equations)): 
+0

Спасибо за ответ. Да, проблема была указана в размере индекса и теперь разрешена. Bdw еще одно сомнение. Не знаю, насколько это связано или не связано с вопросом, я понял, что функция решения sympy медленна, а другая альтернатива - решатель шалфея. Может ли кто-нибудь вести меня с соответствующими ссылками на использование шалфея? –

Смежные вопросы