Seite 1 von 1

Alternative zu numpy.dot

Verfasst: Samstag 10. August 2013, 22:21
von janine
Hallöchen,

Ich hab ein problem mit einer Vektor-Funktion in der ich auch das Matrixprodukt mit numpy.dot anwende.
Meine Funktion zerfällt eigentlich für t-> unendlich, aber irgendwie werden die werte wieder größer null nach dem Matrixprodukt:

Code: Alles auswählen

import numpy as np

def Mat(k,d):
    M=np.zeros(d*d)
    M=M.reshape(d,d)
    M[0,0]=-k
    M[0,1]=k
    for i in range(1,M.shape[0]-1):
        M[i,i-1]=M[i,i-1]+k
        M[i,i]=M[i,i]-2*k
        M[i,i+1]=M[i,i+1]+k
    M[M.shape[1]-1,M.shape[1]-2]= k
    M[M.shape[1]-1,M.shape[1]-1]=-k
    return M

M=Mat(3,10)
const=2*np.ones(10)
t=1000
ew,Si = np.linalg.eig(M)
v=np.exp(ew*t)
p=np.dot(Si, const*v)
Man sieht, dass v schon selber im grunde null ist in jedem Eintrag, p wird zu 0,6 ...
Auch für höhere t .. das bleibt konstant.. was mach ich falsch?
Einer der Eigenwerte ist extrem klein.. das macht für mich keinen sinn.. hilfe :)

Re: Alternative zu numpy.dot

Verfasst: Sonntag 11. August 2013, 10:12
von Sirius3
Hallo janine,
Grenzwertbetrachtungen gegen unendlich mit Fließkommazahlen zu machen ist immer problematisch. exp(-∞*k), k>0, ergibt immer 0. Für ∞=1000 gilt das natürlich nicht. Warum ergeben für Dich kleine Eigenwerte keinen Sinn? Was hat das ganze mit dem Matrixprodukt zu tun?

Code: Alles auswählen

import numpy as np

def create_mat(k,d):
    M = np.diag([-k]+(d-2)*[-2*k]+[-k])
    M[range(1,d),range(0,d-1)]=k
    M[range(0,d-1),range(1,d)]=k
    return M

Re: Alternative zu numpy.dot

Verfasst: Sonntag 11. August 2013, 12:32
von schaeffkoch
v ist nicht in jedem eintrag null (oder nahe)..

Code: Alles auswählen

v [  0.00000000e+000   0.00000000e+000   0.00000000e+000   0.00000000e+000
   0.00000000e+000   0.00000000e+000   0.00000000e+000   1.00000000e+000
   2.91534940e-128   0.00000000e+000]