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

gleichung mit for-schleife

 

elsa98

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2014, 20:13     Titel: gleichung mit for-schleife
  Antworten mit Zitat      
guten abend zusammen,

ich arbeite noch nicht so lange mit matlab und komme mit der aktuellen aufgabe einfach nicht klar. ich hoffe, einer von euch profis, kann mir einen tipp gehen Smile für die bessere überschaubarkeit hab ich die formel als png-bild angehängt.

ich habe eine 98x36 matrix. a und b repräsentieren die zeilen und spalten der matrix, i und j meine Laufvariablen. ich möchte jetzt so was ähnliches wie den rmse bestimmen.
probiert hab ich das mal so

Code:

z = randn(98,36); %beispielmatrix
 
m = size(z,2); %=36
n = size(z,1); %=98

a = 1:36;
b = 1:98;

for i = -(m-1)/2:(m-1)/2;
    for j = -(n-1)/2:(n-1)/2;
        T = sqrt(sum(z-z(a-i,b+j)).^2/(m*n);      
    end
end
 


Die fehlermeldung: ??? Subscript indices must either be real positive integers or logicals.

Leider weiß ich jetzt nicht so recht weiter. ich muss doch die summe über i und j laufen lassen, nur wie kann ich das ganze jetzt definieren, dass der index eine ganze zahl wird?

ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt. Vielleicht kann mir ja einer weiterhelfen.
Danke schonmal.

LG. Elli

formel.png
 Beschreibung:

Download
 Dateiname:  formel.png
 Dateigröße:  9.82 KB
 Heruntergeladen:  322 mal


Harald
Forum-Meister

Forum-Meister


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

schau mal hier:
www.gomatlab.de/for-schleife-mit-index-fehler-t32357.html

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2014, 21:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine schnelle Antwort.

Wenn ich die Formel in deinem Link richtig deute, dürfte es sich um das gleiche Problem handeln. Leider hilft mir das nicht so richtig weiter.
kann ich dann diese formel in matlab überhaupt lösen?

lg.
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2014, 21:48     Titel:
  Antworten mit Zitat      
Sowohl m als auch n können keine geraden Zahlen sein... Sind sie bei Dir aber. Wenn sie gerade sind, laufen Deine Summen von "minus irgendwas komma fünf" bis "plus irgendwas komma fünf". Das wiederum bedeutet, dass Du versuchst, auf einen Index zuzugreifen, den es nicht gibt. Matlab mag nämlich nur ganzzahlige Indizes...
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2014, 22:25     Titel:
  Antworten mit Zitat      
hallo,

genau da liegt das Problem. Nur weiss ich nicht, wie ich das lösen soll. Ich muss die Formel nehmen, die angeben ist.

Ich hab jetzt noch etwas in der Mitschrift nachgelesen. Darin steht, dass a und b die Zeilen und spalten sind also a = 36, b= 98 (richtung und entfernung). bei der formel handelt es sich um die mittlere quadratische abweichung und der mittelwert soll aus einer 3x3 großen fläche ermittelt werden, also 3 punkte in die richtung (n) und 3 punkte in entfernung (m), und das über die gesamte Matrix.

Code:


for a = 2:36-1;
    for b = 2:89-1;
        for i = -(m-1)/2:(m-1)/2;
            for j = -(n-1)/2:(n-1)/2;
                T(a,b) = sqrt(sum(z(a,b)-z(a-i,b+j))^2/9);
            end
        end
    end
end

 


Ich versuch mal zu erklären, was die schleife machen sollte: ich nehmen z.b den 2 punkt her y(2,2) fixiere ihn als mittelpunkt und 'baue' eine 3x3 große Box darüber (y[a-i,b+j]), mit diesen punkten rechne ich mir den rmse aus. danach springe ich mit den schleifen für a und b weiter und 'baue' mir die nächste 3x3 box und rechne mir wieder den rmse aus. Am ende bekomme ich dann eine 36x98 große matrix raus.

jetzt bin ich mir nur nicht sicher, ob die schleife das auch wirklich macht, oder ob ich einfach nur glück hatte und keine fehlermeldung ausgeworfen wird.

lg.
 
Harald
Forum-Meister

Forum-Meister


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

ich habe Zweifel, dass die Schleife das macht, was sie soll. Du nimmst nämlich immer nur die Summe über einen Wert und überschreibst T(a,b) mehrfach.

Da deine Matrix 36 Spalten hat, erstaunt es mich, dass du keine Fehlermeldung bekommst, wenn du auf die 89. zugreifst. Vielleicht arbeitest du aber inzwischen einfach mit einer anderen Matrix.
Code:

T = zeros(36, 89);
for a = 2:36-1;
    for b = 2:89-1;
        for i = -(m-1)/2:(m-1)/2;
            for j = -(n-1)/2:(n-1)/2;
                T(a,b) = T(a,b) + (z(a,b)-z(a-i,b+j))^2;
            end
        end
        T(a,b) = sqrt(T(a,b) / (m*n))
    end
end


Die inneren beiden for-Schleifen sollten sich dann vektorisieren lassen.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2014, 16:51     Titel:
  Antworten mit Zitat      
hallo Harald,

wow, darauf wäre ich wahrscheinlich nie gekommen, danke. So ganz blicke ich aber noch nicht durch. Ist das jetzt die Endlösung, quasi, die Berechnung der Formel von der Angabe?

Die Zeile

Code:

 T(a,b) = T(a,b) + (z(a,b)-z(a-i,b+j))^2;
 


dient dazu, dass T(a,b) nicht immer überschrieben wird, also, dass die Werte in T(a,b) gespeichert werden? Und warum addiere ich?

Vielleicht kannst du mir noch einmal weiter helfen und dann geb ich ruhe Smile

Schönen Sonntag,
elli
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Ist das jetzt die Endlösung, quasi, die Berechnung der Formel von der Angabe?

So wie ich die Aufgabenstellung verstehe: ja.

Letztlich beinhaltet die Formel eine Doppelsumme. Man initialisiert also auf 0 und addiert (weil Summe) die Terme nach und nach auf.

Grüße,
Harald
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.