Seite 1 von 1

Gebiet zur Positivität der Determinante zu ploten

Verfasst: Dienstag 23. April 2024, 20:13
von neu
Hallo zusammen,

das ist mein erster Beitrag. Ich versuche eine ein Gebiet zu plotten in (x,y), wo die Determinante einer Matrix, deren Einträgen Funktion von x und y sind, positiv ist (s.u. wobei, dass es um die Determinante geht ist unwichtig hier; wichtig ist, dass reellwertige Funktionen von Matrizen in plot einzusetzen wären).

Offenbar meckert python, da bei der Erstellung der Grafik, „x“ und „y“ arrays und nicht reelle Zahlen sind (s.u., was kommentiert erscheint).

Ein blödes Beispiel wäre, xy>1 als det(M)>0 zu plotten, wo M=[[x,1],[1,y]] ist. Ich mache aus dem bool-wertigen Ergebnis x*y>1 eine Zahl (1 oder 0), was in dem ersten Fall Funktioniert. Drucke ich aber dies als Determinante aus, so habe ich ein Problem mit den Größen der arrays . Wie könnte ich arrays bzw. Matrizen in meinen Grafiken einsetzen?

Danke im Voraus

Code: Alles auswählen

import numpy as np
import math
from numpy import linalg as LA
from matplotlib.pyplot import *
from matplotlib import pyplot as plt
 
d = np.linspace(-2,2,200)
x,y = np.meshgrid(d,d)

# ~ print( LA.det(np.array( [[np.math.pi,1] , [1,1]] , dtype=float )) )

#  das funktioniert: 
# ~ plt.imshow( ((x*y >1 ) ).astype(int) , extent=(x.min(),x.max(),y.min(),y.max()),\
# ~ origin="lower", cmap="YlGn", alpha = 0.3)

# Das untere funktioniert nicht. Fehler lautet:
# ValueError: setting an array element with a sequence. 
# The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (2, 2) + inhomogeneous part.

plt.imshow( (LA.det( np.array( [[x,1] , [1,y]] , dtype=float )) )).astype(int), extent=(gmin,gmax,gmin,gmax),\
origin="lower", cmap="YlGn", alpha = 0.5)

plt.show()

Re: Gebiet zur Positivität der Determinante zu ploten

Verfasst: Donnerstag 25. April 2024, 11:38
von __blackjack__
@neu: Schau mal wo das tatsächlich hakt und erklär mal was Du dachtest wie so ein Array aussehen soll. Als Import ist nur Numpy direkt nötig. Bis zum `linalg` oder gar zum plotten kommt das ja gar nicht bei dem Problemfall.

Re: Gebiet zur Positivität der Determinante zu ploten

Verfasst: Sonntag 28. April 2024, 17:34
von Üpsilon
Bei dem konkreten Anliegen könnte die Funktion numpy.apply_along_axis helfen
https://numpy.org/doc/stable/reference/ ... _axis.html

Re: Gebiet zur Positivität der Determinante zu ploten

Verfasst: Sonntag 28. April 2024, 17:42
von Üpsilon

Code: Alles auswählen

>>> matrizen = np.array([[1,2,3,4], [1,1,2,2], [1,0,0,1]])
>>> def mydet(matrix):
...     return np.linalg.det(np.reshape(matrix, (2,2)))
... 
>>> mydet(matrizen[0])
-2.0000000000000004
>>> mydet(matrizen[1])
0.0
>>> mydet(matrizen[2])
1.0
>>> np.apply_along_axis(mydet, 1, matrizen)
array([-2.,  0.,  1.])