|
florian |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.01.2009, 03:29
Titel: "Pointer" in Matlab
|
 |
Ich habe ein paar sehr große Matrizen in Matlab.
Nun will ich diese Matrizen alle auf die selbe Art und Weise bearbeiten. Dazu möchte ich verständlicherweise eine Funktion verwenden.
Problem:
Wenn ich der Funktion jedesmal die großen Matrizen übergebe, geht enorm viel Zeit zum Kopieren drauf. Einmal muss die Matrix für die Funktion dupliziert werden und dann muss die alte Matrix durch die neue Matrix, die von der Funktion zurückgegeben wird, überschrieben werden.
Frage:
Kann ich der Funktion einfach nur den Pointer auf die Matrix übergeben? Dann spart man sich alles Kopieren, da die Funktion die Matrix selbst ändert.
Alternative:
Ich arbeite mit globalen Variablen. Dazu müsste ich der Funktion dann aber den Variablennamen der Matrix übergeben. Lässt sich so etwas vielleicht einfacher realisieren?
|
|
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 09.01.2009, 10:02
Titel:
|
 |
Moin,
kannst du mal ein kleines Beispiel als Code reinstellen, welches dein Problem verdeutlicht?
Dann fällt die Hilfe evtl. leichter.
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
florian |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.01.2009, 19:20
Titel:
|
 |
Code-Beispiel?
Bringt hier nicht viel.
Tatsache ist, dass, wenn ich Variablen an eine Funktion übergebe, diese Variablen kopiert werden.
Wenn ich nun eine ziemlich riesige Matrix habe, wird diese also kopiert, wenn ich sie an die Funktion übergebe. Genau das möchte ich aber nicht.
Ich möchte, dass die Funktion auf die Original-Matrix zugreift und diese bearbeitet.
In anderen Programmiersprachen realisiere ich so etwas, indem ich einfach den Pointer auf die Variable übergebe.
Falls in Matlab keine Pointer möglich sind, müsste ich die Matrizen als globale Variablen definieren.
Dann müsste ich der Funktion aber den Variablennamen als String übergeben, weil die Funktion den Variablennamen nicht kennt.
Bleibt die Frage, wie ich auf eine variable zugreife, deren Variablennamen ich lediglich als String vorliegen habe.
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 09.01.2009, 20:20
Titel:
|
 |
<Bleibt die Frage, wie ich auf eine variable zugreife, deren
<Variablennamen ich lediglich als String vorliegen habe.
Ich würde dafür EVAL verwenden
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.01.2009, 12:56
Titel:
|
 |
Ja, so geht es.
Danke für die Idee!
Programmiertechnisch ist diese Lösung zwar scheußlich, aber in der Not frisst der Teufel eben Fliegen.
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 11.01.2009, 14:39
Titel:
|
 |
...und wie immer kann die 64 Bit Version von MATLAB hilfreich sein, wenn es um Speicherprobleme geht...
|
|
|
Schnogi |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.01.2009, 22:38
Titel:
|
 |
Dazu mal eine naive Frage: Wird mit einem Kommando
x = irgendeineFunktion(x);
die Variable x im Speicher tatsächlich stets dupliziert/kopiert? Warum sollte Matlab das tun?
|
|
|
Schnogi |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.01.2009, 12:20
Titel:
|
 |
|
|
Johnson |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: Hamburg
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 24.06.2009, 13:13
Titel:
|
 |
|
 |
|
Hallo, ich bin durch Google auf diesen Thread gestoßen, da ich auch nach einer Möglichkeit zum Referenzieren auf eine Variable (in meinem Fall eine Struktur) suche. Die genannte Möglichkeit, die entsprechenden Strukturen zu "globalisieren" funktioniert natürlich aber ist in der Tat unschön und sollte aus meiner Sicht vermieden werden.
Eine weitere Möglichkeit - die ich selber noch nicht probiert habe, aber aus anderen Programmiersprachen kenne - ist die objektorientierte Umsetzung (wird in Matlab ab Version 2008 unterstützt glaube ich). Das steht mir nur leider nicht zur Verfügung, da ich mit Matlab 2007 arbeiten muss.
Zitat: |
die Variable x im Speicher tatsächlich stets dupliziert/kopiert? Warum sollte Matlab das tun? |
Weil die Funktion einen eigenen Workspace nutzt und der übergebene Wert (es wird der WERT der Variablen übergeben, nicht die Variable selbst, das ist ja das Problem) dann in eine lokale Variable geschrieben wird. Beim zurückgeben wird dieser Wert aus dem Funktion-Workspace wieder in die Variable im "normalen" Workspace geschrieben. Korrigiert mich bitte, wenn ich das falsch sehe.
|
|
|
Schnogi |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.06.2009, 22:33
Titel:
|
 |
Hi, das ist wohl nicht zwangsläufig so, schau mal unter dem Link, den ich oben angegeben habe ("When we call the in-place function using the same input and output variable names from the test function, no extra memory is allocated." etc)[/i]
|
|
|
Johnson |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: Hamburg
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 27.06.2009, 19:34
Titel:
|
 |
ok - wenn man den weg geht stimmt das wohl - hab ich mir mal angeguckt
|
|
|
torsten23 |

Forum-Anfänger
|
 |
Beiträge: 42
|
 |
|
 |
Anmeldedatum: 21.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.07.2010, 09:11
Titel:
|
 |
Hallo,
gibt es da mittlerweile schon schönere Möglichkeiten?
Viele Grüße
Torsten
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|