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

Zugriff auf Zellen außerhalb einer Matrix unterbinden

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2015, 18:29     Titel: Zugriff auf Zellen außerhalb einer Matrix unterbinden
  Antworten mit Zitat      
Hallo zusammen,

ich wollte mal fragen, ob mir jemand eine Möglichkeit nennen kann, wie ich den Zugriff auf Zellen außerhalb einer Matrix unterbinden kann?

Beispiel (m=Anzahl Zeilen, n=Anzahl Spalten)
Code:
A=[1 2 3; 4 5 6; 7 8 9]

liefert die 3x3-Matrix

A =

     1     2     3
     4     5     6
     7     8     9
 

Wenn ich jetzt an dieser Matrix Formeln anwenden möchte, die zB (i+1,j) oder (i,j-1) enthalten, dann greife ich zwangsweise auf Zellen außerhalb der Matrix zu und Matlab gibt eine Fehlermeldung aus:
Code:

Attempted to access A(0,1); index must be a positive integer or logical.
 

Ich habe es bislang nur mit einer eher mäßigen Lösung hinbekommen, indem ich die Matrix um zwei Spalten bzw. Zeilen erweitert habe:
Code:
A=[0 0 0 0 0; 0 1 2 3 0; 0 4 5 6 0; 0 7 8 9 0; 0 0 0 0 0]

liefert

A =

     0     0     0     0     0
     0     1     2     3     0
     0     4     5     6     0
     0     7     8     9     0
     0     0     0     0     0
 

Wenn ich die Rechnung dann auf den Bereich 2:m-1 und 2:n-1 beschränke, gibt es keine Fehlermeldung und es wird wie gewollt berechnet, zumindest nach jetzigem Stand.

Gibt es eine Möglichkeit, das Ganze irgendwie einzugrenzen, kann ich irgendwie den Zugriff auf Zellen außerhalb einer definierten Matrix unterbinden?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.03.2015, 18:42     Titel:
  Antworten mit Zitat      
Hallo,

meines Erachtens ist das der einfachste Weg - oder den Algorithmus nur über den zulässigen Bereich laufen lassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2015, 21:02     Titel:
  Antworten mit Zitat      
Da ich Werte der Zellen (i+1,j), (i-1,j=, (i,j+1) und (i,j-1) brauche, komme ich notgedrungen in Bereiche außerhalb der Zelle.

Sicherlich wäre es machbar, für diese Bereiche entsprechende Bedingungen aufzustellen, jedoch wäre dies sicherlich weitaus umständlicher, als meine bisherige Methode.

Aber wenn es wohl keine sinnvolle Methode gibt, das Ganze ohne Erweiterung der Matrix zu realisieren, muss ich wohl damit leben.

Trotzdem danke
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.03.2015, 22:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Da ich Werte der Zellen (i+1,j), (i-1,j=, (i,j+1) und (i,j-1) brauche, komme ich notgedrungen in Bereiche außerhalb der Zelle.

Nicht, wenn du den Algorithmus von vorneherein nur auf den mittleren Bereich anwendest.

Zitat:
Aber wenn es wohl keine sinnvolle Methode gibt, das Ganze ohne Erweiterung der Matrix zu realisieren, muss ich wohl damit leben.

Ich finde, deine Methode ist durchaus sinnvoll. Je mehr Informationen du z.B. über den Algorithmus zur Verfügung stellst, desto eher kann man bei der Suche nach einer sinnvolleren Möglichkeit helfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2015, 01:18     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Nicht, wenn du den Algorithmus von vorneherein nur auf den mittleren Bereich anwendest.


Das wäre ja dann meine Erweiterung Wink

Harald hat Folgendes geschrieben:
Je mehr Informationen du z.B. über den Algorithmus zur Verfügung stellst, desto eher kann man bei der Suche nach einer sinnvolleren Möglichkeit helfen.


Eigentlich ist da nicht viel hinter, ich betrachte eine Zelle an der Stelle (i,j) und möchte dann eine Rechnung durchführen, welche auf die jeweils umliegenden Zellen zurückgreift. Das klappt auch soweit, bis eben eine Zelle am Rand der Matrix betrachtet wird, dann sind eine oder zwei Zellen, deren Wert herangezogen wird, außerhalb der Matrix.

Ansich könnte man sicher etwas zusammenbauen, was beispielsweise durch if-Schleifen die Werte von i und j abfragt, all das dürfte aber mehr Aufwand als Nutzen bringen, wenn man dies mit meiner bisherigen Methode vergleicht. Diese war auch mehr durch eine spontane Idee entstanden, da ich bislang nicht viel mit Matlab gearbeitet habe und so nicht wusste, was alles machbar ist und was nicht. Da dachte ich, man könnte das auch "eleganter" lösen.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.03.2015, 00:35     Titel:
  Antworten mit Zitat      
Hallo,

Kennst Du BLOCKPROC?
http://www.mathworks.com/help/images/ref/blockproc.html

Gruß, Jan
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 - 2025 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.