2016-10-27 17 views
-1

Alles, ich habe mir die folgende Antwort angeschaut und es sieht alles gut aus. Matrix multiplication, solve Ax = b solve for x Ich muss etwas falsch machen, aber wenn ich das Problem von Hand ausarbeite, bekomme ich eine andere Lösung.
Matrix-Multiplikation Ax = 1 oder Ax = 0

Methode 1:

A = [[0,1,0], 
    [0,0,1], 
    [.5,.5,0]] 
b = [1,1,1] 
x = numpy.linalg.lstsq(A,b) 
x 

Ausbeuten

(array([ 1., 1., 1.]), 
array([], dtype=float64), 
3, 
array([ 1.14412281, 1.  , 0.43701602])) 

Methode 2 (wie durch Kevin vorgeschlagen I unten die Matrix transponiert):

A = [[0,0,.5],[1,0,.5],[0,1,0]] 
b = [1,1,1] 
x = numpy.linalg.lstsq(A,b) 
x 

Ausbeuten

(array([ 0., 1., 2.]), 
array([], dtype=float64), 
3, 
array([ 1.14412281, 1.  , 0.43701602])) 

Wenn ich Ax = b von Hand ausarbeite bekomme ich x = 1/5 * [1,2,2]. Beachten Sie, dass ich Beispiel 11.19 über den folgenden Link bearbeite:
https://www.probabilitycourse.com/chapter11/11_3_2_stationary_and_limiting_distributions.php

Was fehlt mir?

Wenn ich folge dem Beispiel auf diesem Link: https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.solve.html

3x+y=9 
x+2y=8 
[x,y]=[2,3] 

ich die richtige Lösung bekommen, wenn ich es mit Python oder von Hand tun. Irgendwelche Zeiger? Ich muss etwas sehr einfaches hier vermissen

+0

Wenn Sie Python und Numpy verwenden, möchten Sie diese Tags möglicherweise zu der Frage hinzufügen, damit die Benutzer sie sehen können. –

+1

Ihre Handmathematik ist falsch. Du gehst entlang A in die falsche Richtung, wenn du dich multiplizierst. – user2357112

+0

Ich beziehe das Beispiel 11.19 aus dem folgenden Link, um die stationäre Verteilung zu berechnen. Zugegeben, ich berechne P * pi = pi und bekomme die richtige Antwort von Hand. Wenn ich versuche, die Berechnung wie folgt umzukehren, bekomme ich [0,1,2], was wiederum nicht richtig ist. Wo ist mein Problem genau? x = np.dot (b, np.linalg.inv (A)) https://www.probabilitycourse.com/chapter11/11_3_2_stationary_and_limiting_distributions.php – fullofquestions

Antwort

1

Ich denke, wenn Sie es von Hand tun, mischen Sie Zeilen und Spalten.

A = [0, 1, 0] 
    [0, 0, 1] 
    [.5, .5, 0] 

Ausbeuten x = [1, 1, 1]. Allerdings

A = [0, 0, .5] 
    [1, 0, .5] 
    [0, 1, 0] 

ergibt x = 1/2 [1, 2, 2], wie Sie bekam, wenn man es mit der Hand tut.

+0

Vielen Dank. Ich folge dir hier und im Grunde fixiere ich mein A zu deinem letzten und laufe x = numpy.linalg.lstsq (A, b) Aus [14]: (Array ([0., 1., 2. ]), Array ([], dtype = float64), 3, Array ([1.14412281, 1., 0.43701602])) was ich glaube nicht ist [1,2,2]. Was hast du getan, um das genau zu lösen? – fullofquestions

+0

Ich habe sie einfach von Hand gemacht. "x" ist wirklich ein Vektor, was bedeutet, dass es Werte [x1, x2, x3] hat. Aus Gründen der Bequemlichkeit verwende ich jedoch x = [a, b, c]. –

+0

Also für die richtige Matrix, ändern Ax = b zu: 0 * a + b + 0 * c = 1, 0 * a + 0 * b + c = 1, a/2 + b/2 + 0 * c = 1 dann wird klar, dass b = 1 und c = 1. Unter Verwendung dieser Information ergibt a/2 + 1/2 = 1 a = 1. –