WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gradientenbetrag einer Matrix

 

Harp
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 26.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 15:47     Titel: Gradientenbetrag einer Matrix
  Antworten mit Zitat      
Hallo,

ich habe eine Matrix, deren Elemente eine skalare Funktion darstellen. Die explizite Funktionsgleichung habe ich nicht!

Ich muss nun den Betrag des Gradienten dieser skalaren Funktion berechnen.

Ich habe mir überlegt, dass ich die Richtungsableitung in x und y-Richtung bilde und dann den Betrag der Wurzel der Quadrate dieser Richtungsableitungen bilde.

Also:
Ergebniss(i,j) = Betrag( Wurzel( FX(i,j)^2 + FY(i,j)^2 ) )

Ersten Teil bekomme ich mit der Funktion "gradient" hin:
Code:

[FX,FY]= gradient(Matrix)
 

Aber wie schaffe ich es nun, die einzelnen Elemente der Matrix zu quadrieren und die wurzel daraus zu ziehen?
Oder gibt es einen coolen Matlab Befehl, der alles auf einmal erledigt?

Vielen Dank im Voraus!!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.06.2012, 15:30     Titel: Re: Gradientenbetrag einer Matrix
  Antworten mit Zitat      
Hallo Harp,

Ich stelle mir als Fläche ein Quadrat vor, welches entlang der Diagonalen gekippt ist. Die Berechnung des Gradienten in X und Y-Richtung ergibt dann jeweils zu kleine Werte. Der Betrag der Wurzel der Summe der Quadrate liegt da an den exakten Werten nicht deutlich näher dran.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harp
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 26.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2012, 10:01     Titel:
  Antworten mit Zitat      
Hallo Jan,

erstmal vielen Dank für deine Antwort.

Leider ist sie nicht gerade das, was ich mir erhofft habe. Wink

Das die von mir angewandete Methode nicht sehr genau ist, ist mir bewusst. Im konkreten Fall geht es jedoch um einen Verlauf vom Wert 0 zu 1 über eine entsprechende Geometrie, mit nur kleinen Werteänderungen. Also die von dir beschriebene Kante wird nicht auftreten.
Aus dem von mir genutzten Simulationsprogramm erhalte ich eben nur die disktreten Werte an den entsprechenden Koordinaten und keine Funktionsgleichung. Aufgrund der vorgegebenen Geometrie (Abfall von 1 auf 0 wird auf bestimmte Bereiche begrenzt) sehe ich auch keine große Hoffnung, die erhaltenen Werte mit einer Funktion anzufitten und dann den Gradienten zu berechnen.

Zurück zum Problem. Ich habe natürlich weiter gesucht und gefunden, dass Matlab, Matrizen mit .* elementweise multipliziert. Folglich habe ich bis jetzt mein Problem so angegangen:
Code:
[DX,DY]=gradient (D);
E=abs(sqrt(DX.*DX+DY.*DY));

Soweit ich das in einem Minimalbeispiel beurteilen konnte, funktioniert das auch wie gedacht. Jetzt suche ich nur noch nach einem Befehl, mit welchem man alle Elemente , welche einen gewissen Schwellenwert überschreiten, auf 0 setzen kann, da am Übergang von den Werten mit 1 zu Bereichen außerhalb des Wertebereichs ein Sprung von 1 auf 0 auftritt, da die nicht definierten Bereiche auch mit 0 in der Matrix stehen. Und dann der erhaltene Gradient viel stärker ist als der langsame Abfall von 1 auf 0.

Ich hoffe, dass ist jetzt nicht zu verwirrent. Bei Bedarf, kann ich auch eine Datei mitschicken.

Viele Grrüße
Harp
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.