Alternative zu numpy.dot

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
janine
User
Beiträge: 4
Registriert: Dienstag 9. Juli 2013, 15:11

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 :)
Zuletzt geändert von Anonymous am Samstag 10. August 2013, 23:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

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
schaeffkoch
User
Beiträge: 38
Registriert: Dienstag 21. August 2012, 10:59

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]
Antworten