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

schleifen bilden

 

gast1237852458

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2011, 18:07     Titel: schleifen bilden
  Antworten mit Zitat      
hallo!

ich hab folgendes problem:

ich habe eine matrix xx mit der größe 1000x457 und möchte die steigung berechnen. ich bin das ganz so angegangen, dass ich mir die vier eckpunkte definiert habe mit

Code:
x_dir=(1:2,1:2)


das gleiche habe ich für y und z gemacht.

jetzt kann ich mir die steigung aber nur für diesen punkt ausrechen. meine frage ist nun, wie kann ich matlab sagen, dass er meine ganze matrix x abfragen soll?

danke.


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2011, 18:08     Titel:
  Antworten mit Zitat      
sorry, meinte natürlich:

Code:
x_dir=xx(1:2,1:2)
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.09.2011, 21:28     Titel: Re: schleifen bilden
  Antworten mit Zitat      
Hallo,

Du hast gezeigt, wie Du 4 Elemente aus dem Array kopierst. Aber wie berechnest Du daraus die Steigung?
Mach die Funktion GRADIENT, was Du suchst?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2011, 06:36     Titel:
  Antworten mit Zitat      
die steigung hab ich berechnet, hab ich nur nicht online gestellt. aber meine frage wäre, wie muss ich die schleife legen, damit ich auch die punkte (3:4, 3:4), (5:6, 5:6) ... berechnen kann.

danke, lg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.09.2011, 13:28     Titel:
  Antworten mit Zitat      
Hallo,

Das geht wahrscheinlich direkt in der Funktion, mit der Du die Steigung berechnest. Deshalb fragte ich nach der Funktion...
Man kann z.B. die Matrix per RESHAPE so aufteilen, dass die 2x2 Blöcke als Submatrix in einem 4D-Array stehen. Danach kann man die Funktion auf alle Sub-Blöcke anwenden. Theoretisch hört sich das aber komplizierter an als es in der Praxis ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2011, 13:50     Titel:
  Antworten mit Zitat      
wie genau mach ich das mit dem RESHAPE befehl?

hab versucht, das problem so zu lösen:

Code:

for j=1:(length(xx)-1);
    for i=1:(length(yy)-1);
          x{j,i}=xx(j:j+1,i:i+1);
 


wobei xx und yy die dimension (1000x500) haben.
jetzt bekomm ich aber immer die Fehlermeldung:

Index exceeds matrix dimensions.

leider finde ich den fehler nicht!

lg.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.09.2011, 14:16     Titel:
  Antworten mit Zitat      
Hallo,

Was ist in Deinem Code den "yy"?
LENGTH birgt immer die Gefahr, dass die längste der Dimensionen zurückgeliefert wird. Deshalb ist SIZE(XX, 2) sicherer.

Wenn Du die Daten immer in Zweier-Abschnitte verpacken möchtest, wie soll dann mit der ungradzahligen Dimension 457 umgegangen werden?

Code:
x = rand(200, 200);
y = reshape(x, 2, 100, 2, 100);
z = permute(y, [1, 3, 2, 4]);

Jetzt hast Du ein Array der Dimension [2, 2, 100, 100].

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2011, 15:23     Titel:
  Antworten mit Zitat      
ich hab's jetzt mit dem size befehl gemacht. hat auch funktioniert, danke dafür. leider bekomm ich jetzt eine neue fehlermeldung:

??? Undefined function or method 'minus' for input arguments of type 'cell'.

die kommandozeile dafür lautet:

Code:

for i=1:size(x_dir,2);
    j=1:size(y_dir,2);
    delta_x{j,i}=x_dir{j,i}-x_0{j,i};
end
 


lg.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.09.2011, 23:16     Titel:
  Antworten mit Zitat      
Hallo Anonymous,

Zitat:
??? Undefined function or method 'minus' for input arguments of type 'cell'.

Offenbar ist "x_dir{j,i}" wieder eine Variable vom Typ CELL. damit läßt sich aber keine Arithmetic betreiben.

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.