verfälschte Werte bei Funktion mit input einer Matrix
Malibu99
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.08.2014, 17:27
Titel: verfälschte Werte bei Funktion mit input einer Matrix
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
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
Malibu99
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.08.2014, 21:29
Titel:
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:
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.
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
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.08.2014, 22:25
Titel:
okay ja mit deiner Methode klappt das! vielen Dank!
Einstellungen und Berechtigungen
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
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.