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

verfälschte Werte bei Funktion mit input einer Matrix

 

Malibu99

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2014, 17:27     Titel: verfälschte Werte bei Funktion mit input einer Matrix
  Antworten mit Zitat      
Hi,
Ich hab ein Problem und zwar berechne ich eine Matrix mit Hilfe einer Funktion, welche als Input ebenfalss eine Matrix mit gleicher Größe bekommt. Funktioniert auch, nur leider kommen andere Werte als erwartet raus.
Wenn ich die Funktion mit 2 verschachtelten for-Schleifen aufrufe, sind die Werte nämlich richtig.
Hier mal ein Beispiel in Kurzform:

Code:

%d1 sei eine 250x250 Matrix mit Werten zw 1-300

for x=1:250
for y=1:250
a(x,y) = functionxy(d1(x,y));
end
end

%hier der Aufruf über die Funktion
b = functionxy(d1);
 


Eigentlich müssten a und b gleich sein. Sind sie auch allerdings nur für kleinere Matrizen. Ab 200x200 Einträgen sind die Werte bei der 2.Methode aber verfälscht.

Bei der Funktion handelt es sich um ein einfaches Ausbreitungsmodell für elektromagnetische Wellen ( Ich werde es mal im Anhang stecken). Die input Matrix sind die Distanzen zwischen Sendemast und Empfängern in [km]

Ich vermute das die Abweichungen von Matlabs internen Beschleunigungsvorgängen und Parallellisierungsprozessen von großen Matrizen Multiplikationen kommt. Aber was bringt mir der Gewinn an Zeit, wenn die Werte falsch sind Evil or Very Mad

gruß Mailbu99

hata_davidson.m
 Beschreibung:

Download
 Dateiname:  hata_davidson.m
 Dateigröße:  979 Bytes
 Heruntergeladen:  254 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: 07.08.2014, 20:27     Titel:
  Antworten mit Zitat      
Hallo,

bei Beispielen hilft es, wenn sie möglich einfach sind (also nicht etliche Unterfunktionen) und reproduzierbar sind.
Zur Reproduzierbarkeit fehlt mir noch, wie diese hata_davidson.m denn mit 2 Argumenten aufgerufen werden soll.

Ja, und was ich mache würde, um dem Problem auf die Spur zu kommen: den Debugger verwenden. Hast du das denn schon versucht?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2014, 21:29     Titel:
  Antworten mit Zitat      
Hallo Harald,
ohja das mit den Parametern hätte ich noch sagen sollen.
Zu Testzwecken reichen bis auf den 2. Parameter Konstanten.
Die Funktionen sehen dann so aus:
Code:

% 1. Variante
output_1 = hata_davidson(400,distance,100,1,1);

% 2. Variante
for x=1:250
  for y=1:250
    output_2(x,y) = hata_davidson(400,distance(x,y),100,1,1);
  end
end
 


Zu Testzwecken hab ich jetzt noch eine Matrix (distance.zip) hochgeladen mit 250x250 Einträgen. Damit kann dann auch der code kompiliert werden.

output_1/2 sind jetzt auch wieder Matrizen mit 250x250 Einträgen.

Allerdings stehen in beiden Matrizen unterschiedliche Werte. Eingentlich müssten in beiden das gleiche drin stehen.

Debuggingmodus hat mir jetzt nicht weitergeholfen, weil bei der 1. Variante die komplette Matrix aufeinmal berechnet wird.

Ich hoffe mein Problem ist etwas klarer geworden.

gruß Mailbu99

distance.zip
 Beschreibung:

Download
 Dateiname:  distance.zip
 Dateigröße:  456.51 KB
 Heruntergeladen:  237 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: 07.08.2014, 22:20     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Debuggingmodus hat mir jetzt nicht weitergeholfen, weil bei der 1. Variante die komplette Matrix aufeinmal berechnet wird.

Hast du es denn mal versucht?
Da sollte einem ja auffallen, dass immer nur eine Verzweigung der if-Anweisung durchgeführt wird.

Der Vorteil von MATLAB ist definitiv das effiziente Arbeiten mit Vektoren und Matrizen. Man muss das halt aber auch als Programmierer richtig nutzen.
if-Verzweigungen überprüfen, ob alle Elemente eine Bedingung erfüllen, was du hier augenscheinlich nicht willst. Stattdessen würde ich logische Indizierung verwenden (siehe Anhang) - und dann kommt auch das gleiche raus. Durch geschickten Einsatz von max kann man das vermutlich noch vereinfachen.

Grüße,
Harald

hata_davidson2.m
 Beschreibung:

Download
 Dateiname:  hata_davidson2.m
 Dateigröße:  1.26 KB
 Heruntergeladen:  259 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Malibu99

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2014, 22:20     Titel:
  Antworten mit Zitat      
Ich glaube jetzt weiß ich wo mein Fehler liegt.
In der Funktion sind if-Schleifen und wenn dann dann die Abfrage kommt
[code]
% distance = Matrix
if distance < 20
...
else
...
end

Dann ist ja klar, dass dann immer der else Zweig genommen wird.

Ok, dann hat sich das glaub ich erledigt Smile
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2014, 22:25     Titel:
  Antworten mit Zitat      
okay ja mit deiner Methode klappt das! vielen Dank! Razz
 
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.