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

"Pointer" in Matlab

 

florian

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2009, 03:29     Titel: "Pointer" in Matlab
  Antworten mit Zitat      
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

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 09.01.2009, 10:02     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
florian

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2009, 19:20     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 09.01.2009, 20:20     Titel:
  Antworten mit Zitat      
<Bleibt die Frage, wie ich auf eine variable zugreife, deren
<Variablennamen ich lediglich als String vorliegen habe.

Ich würde dafür EVAL verwenden

Code:
a=1, eval(['varname','=', num2str(a)])
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2009, 12:56     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 11.01.2009, 14:39     Titel:
  Antworten mit Zitat      
...und wie immer kann die 64 Bit Version von MATLAB hilfreich sein, wenn es um Speicherprobleme geht...
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Schnogi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2009, 22:38     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 29.01.2009, 12:20     Titel:
  Antworten mit Zitat      
Das Thema ist leider doch nicht wirklich trivial. Es gibt dazu einen Blog von Loren (sie nennt es "In-place Operation")

http://blogs.mathworks.com/loren/20.....place-operations-on-data/

der dem OP vielleicht zu einer weniger scheußlichen Lösung verhilft...
 
Johnson
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.06.09
Wohnort: Hamburg
Version: R2009a
     Beitrag Verfasst am: 24.06.2009, 13:13     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Schnogi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2009, 22:33     Titel:
  Antworten mit Zitat      
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

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.06.09
Wohnort: Hamburg
Version: R2009a
     Beitrag Verfasst am: 27.06.2009, 19:34     Titel:
  Antworten mit Zitat      
ok - wenn man den weg geht stimmt das wohl - hab ich mir mal angeguckt
Private Nachricht senden Benutzer-Profile anzeigen
 
torsten23
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 21.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2010, 09:11     Titel:
  Antworten mit Zitat      
Hallo,

gibt es da mittlerweile schon schönere Möglichkeiten?

Viele Grüße

Torsten
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.