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

Array in struct soll nicht überschrieben werden

 

Grünschnabel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 03.07.2015, 11:59     Titel: Array in struct soll nicht überschrieben werden
  Antworten mit Zitat      
Hallo Zusammen,
ich habe eine kleine Funktion geschrieben, die mehrfach im Skript ausgeführt werden soll.
Code:
function[ Element ] = Sort_Data ( Input, Key, NElement, NTimeStep, NNodesElement )

Inf = 'Initialisierung';
Element  = struct(Inf, cell(1, NElement));

n = str2num(regexprep(Key, '\D+', ' '));
nstr = num2str(n);
Str1 = ['S' nstr]

a=1;
for i = 1 : NElement
    for j = 1 : NNodesElement
        for k = 1 : NTimeStep

            Element(i).(Str1)(j,k)=Input (a);
            a=a+1;
           
        end
    end
end

end


Wenn ich die Funktion mit drei unterschiedlichen Key:
Code:
Key1 = 'S11Top'
Key2 = 'S22Top'
Key3 = 'S12Top'

durchlaufen lasse, erhalte ich folgendes Ergebnis:
Code:
Element.Initialisierung
Element.S12


Somit wurde die letzte Anwendung der Funktion (Key3) abgespeichert. Das kann ich nachvollziehen.

Meine Frage: Wie kann ich die Funktion so verändern dass mir jeweils ein "neue Ebene" (Nennt man das array in struct?!?) erzeugt wird. Mein Wunschergebnis soll wie folgt aussehen:
Code:
Element.Initialisierung
Element.S11
Element.S22
Element.S12


Hat jemand einen Tipp für mich?!? Question

Vielen Dank im Voraus. Rolling Eyes
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen


Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 06.07.2015, 13:10     Titel:
  Antworten mit Zitat      
Hallo Zusammen,
hat keine eine Idee oder ist meine Frage eventuell falsch gestellt?!?

Der prinzipielle Ablauf sollte so aussehen (Schematische Darstellung!):
Code:

x= Buche11
[output]=Funktion (x, Inputdata)
output.Baum11

Zweiter Durchlauf mit anderem x
Code:

x= Fichte22
[output]=Funktion (x, Inputdata)
output.Fichte22

Dweiter Durchlauf mit anderem x
Code:

x= Eiche33
[output]=Funktion (x, Inputdata)
output.Eiche33


Nach dreifacher Anwendung meiner Funktion wollte ich im output folgende Struktur haben:
Code:

output.Buche11
output.Fichte22
output.Eiche33


Habt ihr eine Idee wie ich das verwirklichen kann oder geht es nicht?!? Dann muss ich die Funktion etwas abändern und an meine Randbedingungen anpassen (und das wollte ich eigentlich vermeiden, da ich mit meiner "generischer Funktion" arbeiten wollte?!?

Vielen Dank im Voraus. Question
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.07.2015, 13:19     Titel:
  Antworten mit Zitat      
hmm ich hab 3 ideen dazu. kann das aber grade nicht testen.
1. globale variablen.
2. peresistent variable.
3. element muss einer der übergabe parameter der funktion werden.
die letzte lösung finde ich am besten.
kleine anmerkung meinerseits:
i und j sind die imaginären einheiten. ich würde sie nicht als laufvariable verwenden.
input und inf sind matlab befehle. sie als variablenname zu verwenden ist sehr verwirrend und führ außerdem dazu das du sie nicht mehr benutzen kannst. das ist in deiner funktion erstmal egal aber ich würde mir das garnicht erst angewöhnen.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 06.07.2015, 13:54     Titel:
  Antworten mit Zitat      
Lieber Winkow,
vielen Dank für die Tipps und die Anmerkungen!!! Sehr nett, dass Du dies hier erwähnst. Ich werde deine Anmerkungen gleich berücksichtigen.

Jetzt mache ich mir mal Gedanken um Deine 3 Ideen. Vielen Dank für den Denkanstoß!

Beste Grüße
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.07.2015, 17:09     Titel:
  Antworten mit Zitat      
Hallo,

ich favorisiere stark Winkows dritten Vorschlag:
die bisherige Datensammlung als Eingang an die Funktion übergeben, erweitern, und als Rückgabeargument zurückgeben.

Wenn man es geschickt anstellt, wird vermieden, dass unnötige Kopien der Daten erstellt werden (copy-on-write bzw. in-place), siehe z.B.
http://blogs.mathworks.com/loren/20.....-functions-and-variables/
http://blogs.mathworks.com/loren/20.....place-operations-on-data/

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.