2017-02-06 3 views
2

Ich versuche, das folgende lineare System mit optimize.rootoptimize.root mit einer Matrix Gleichung

AX = b 

Mit dem folgenden Code zu lösen.

A = [[0,1,0],[2,1,0],[1,4,1]] 

def foo(X): 
    b = np.matrix([2,1,1]) 
    out = np.dot(A,X) - b 
    return out.tolist() 

sol = scipy.optimize.root(foo,[0,0,0]) 

Ich weiß, dass ich einfach die numpy.linalg.solve verwenden kann dies leicht zu tun. Aber ich versuche tatsächlich, ein nichtlineares System zu lösen, das in Matrixform vorliegt. Siehe meine Frage here. Also muss ich einen Weg finden, diese Methode zum Laufen zu bringen. Um das zu tun, versuche ich dieses Problem in diesem einfachen Fall zu lösen. Aber ich habe den Fehler

TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'foo'.Shape should be (3,) but it is (1, 3). 

Von dem, was ich von anderen ähnlichen Stackoverflow Fragen gelesen haben geschieht dies, weil die aus der foo Funktion setzte nicht kompatibel mit der Form der anfänglichen Vermutung ist [0,0,0]

Sicherlich gibt es Eine Möglichkeit, diese Gleichung mithilfe von scipy.optimize.root zu lösen. Kann mir bitte jemand helfen?

Antwort

1

(Ich gehe davon aus dem Kapital B in Ihrem .dot ist ein Tippfehler für A.)

Versuchen np.array für b verwenden. np.matrix erzeugt einen "Zeilenvektor", d. H., Die Form (1, 3), während Ihre anfängliche Vermutung die Form (3,) hat.

+0

Entschuldigung. Ja, es ist ein Tippfehler für 'A'. – minibuffer

+0

Wie transformiere ich die Ausgabe der Funktion 'foo' in die Form' (3,) '? – minibuffer

+1

Verwendet 'np.array' nicht für' b' Arbeit? Und ich bin ziemlich sicher, dass Sie die '.tolist()' nicht brauchen. –

Verwandte Themen