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

EVAL & ASSIGNIN

 

el transeunte extranjero
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 20.12.2011, 19:45     Titel: EVAL & ASSIGNIN
  Antworten mit Zitat      
Thema geteilt: http://www.gomatlab.de/viewtopic.ph.....975a8fe46b4ef4744181a39af

Hallo zusammen,
Zitat:
Erstelle keine Variablen per EVAL oder ASSIGNIN. Am besten: niemals!


Das hat mich tiefst enttaeuscht. Ich habe eine Vorlage bekommen, die zur dynamischen Programmierung dienen sollte. Bin Matlabanfaenger und mein code ist:
Code:
vars = fieldnames(newData1); for i = 1:length(vars) assignin('base', vars{i}, newData1.(vars{i})); end
Könnte bitte jemand mir erklaeren, wozu das ganze dienen sollte.

Vielen Dank im Voraus.
_________________

Es ist laut geworden im Meer.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

das sieht mir nach automatisch erzeugtem Code von importdata aus.

Letztlich sorgt der Befehl dafür, dass die Felder der Struktur newData1 im Base Workspace als eigenständige Variablen zur Verfügung stehen. Ich würde aber auf Dauer ohnehin empfehlen, mit Befehlen zu arbeiten, die speziell für den Import von Daten des jeweiligen Formats gedacht sind:
- XLSREAD (für .xls[x]-Dateien)
- TEXTSCAN (für Textdateien)

Grüße,
Harald

P.S.: Wenn du dich an einen Thread "dranhängst", stelle den Status bitte auf "offen".
Private Nachricht senden Benutzer-Profile anzeigen
 
el transeunte extranjero
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 21.12.2011, 11:06     Titel:
  Antworten mit Zitat      
Hallo Harald

Danke.Das hatte ich auch verstanden. Ich wollte geanauer verstehen Schritt für Schritt was dieser Code ausführt.Deswegen habe den code hinzugefügt. Weil ich den Code für einen vorhandenen Programm anpassen sollte.

Vielen Dank wieder.

Grüsse

importfile_sent.m
 Beschreibung:

Download
 Dateiname:  importfile_sent.m
 Dateigröße:  701 Bytes
 Heruntergeladen:  653 mal

_________________

Es ist laut geworden im Meer.
Private Nachricht senden Benutzer-Profile anzeigen
 
el transeunte extranjero
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 21.12.2011, 11:19     Titel:
  Antworten mit Zitat      
Wenn Du oder ein anderer bereit waere dieser mir verstaendlicher zu machen, wuerde mich sehr freuen. Weil ich selber damit nichts anfangen kann.

Danke an alle.
_________________

Es ist laut geworden im Meer.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.12.2011, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

eine kommentierte Version dieses Codes:
Code:
vars = fieldnames(newData1); % welche Felder hat newData1?
for i = 1:length(vars) % Schleife über alle Felder
assignin('base', vars{i}, newData1.(vars{i})); % Erstelle für das Feld [vars{i}] im Base Workspace eine Variable mit diesem Namen, die den Wert dieses Feldes übernimmt.
end  


Ich finde jedoch nicht, dass dieser Code besonders gut ist. Daher würde ich den Code lieber durch "vernünftigen" Code ersetzen, siehe originale Antwort.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
el transeunte extranjero
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 21.12.2011, 11:32     Titel:
  Antworten mit Zitat      
Danke sehr

Ich habe den Code von einem mathe Professor bekommen, der sich jahrelang mit Matlab beschaeftigt hat. Hat auch einige Preise bekommen.

Danke wieder für die Erklaerungen. Werde daran arbeiten.

Grüsse aus Madrid

el transeunte extranjero

(Der Durchreisende Auslaender)
_________________

Es ist laut geworden im Meer.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.12.2011, 13:07     Titel:
  Antworten mit Zitat      
Hallo,

dies vorweg: ich will hier nicht den Professor oder seine Errungenschaften in Frage stellen.

Dennoch halte ich daran fest, dass EVAL, EVALIN und ASSIGNIN leicht zu Problemen führen können und daher nach Möglichkeit vermieden werden sollen.

Das ist nicht nur meine persönliche Meinung; selbst MathWorks weist auf potentielle Probleme mit diesen Funktionen hin:
http://www.mathworks.de/support/tech-notes/1100/1103.html

Loren's Blog ("Loren Shure works on design of the MATLAB language at MathWorks".):
http://blogs.mathworks.com/loren/2006/01/04/more-in-eval/
http://blogs.mathworks.com/loren/2005/12/28/evading-eval/

Weitere Referenzen:
http://www.kellogg.northwestern.edu/rc/docs/gmpp.pdf (1.3)
http://books.google.de/books?id=lWa.....mp;dq=avoid+evalin+matlab

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
el transeunte extranjero
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 21.12.2011, 13:40     Titel:
  Antworten mit Zitat      
Okay Harald.

Danke für die ausführlichen Informationen und Links.

Ich warte ein paar Tage. Wenn niemand dazu zu sagen hat oder Fragen stellt, werde ich die Diskussion schliessen.

Grüsse aus Madrid

Frohe Weihnachten.
_________________

Es ist laut geworden im Meer.
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 21.12.2011, 16:13 Uhr von Jan S
Von Beitrag Dynamische Variable in For schleife?? aus dem Forum Programmierung
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.12.2011, 16:30     Titel: Re: EVAL & ASSIGNIN
  Antworten mit Zitat      
Hallo el transeunte extranjero,

Die von Harald gepostete Liste weist auf die Probleme mit EVAL und ASSIGNIN umfassend hin. Neben der Unübersichtlichkeit, die das Debuggen erschwert, und der Fehleranfälligkeit, bremsen die Befehle Matlab auch sehr aus. Matlab's JIT-Compiler sorgt nämlich für einen sehr effizienten Zugriff auf Variablen innerhalb von Schleifen, sofern die Variablen einen festen Typ haben und zur Compile-Zeit bekannt sind. Wenn sie aber während des Programmlaufs automatisch in einem Unterprogramm erzeugt werden und per ASSIGNIN in die Lookup-Table der lokalen Variablen gesteckt werden, hat die JIT keine Chance den Code zu optimieren.
Die Unterschiede in der Laufzeit können einen Faktor von 100 haben!

Es tut mir leid, wenn Du davon tief enttäuscht bist. Es gibt einfach gute und schlechte Programmier-Methoden. Und Matlab kann "dynamische Programmiermethoden" nicht effizient mit EVAL und ASSIGNIN ausführen. Es ist aber immer möglich, einen Algorithmus als Daten eines statischen Programms zu codieren, statt ein dynamisches Programm dafür zu erzeugen. Eine trennung von Code und Daten hat dabei den Vorteil, dass die Komplexität der Programme deutlich gesenkt werden kann, was wiederum der Debugbarkeit zugute kommt.

Ein Professor kann übrigens ohne Zweifel auch mit ineffizienten Programmiermethoden viele Preise gewinnen. Denn auch ein ineffizientes Programm kann in der Lage sein ein zuvor ungelöstes Problem zu lösen. In der Rohfassung sah Einsteins allgemeine Relativitätstheorie auch grausam aus, aber im Laufe der Zeit konnte er und weitere Physiker den "Code" deutlich vereinfachen und klarere Ausdrücke verwenden. Aber das "Verschönern" der Formeln ist eigentlich nur geschicktes Handwerk, während die eigentliche Idee das geniale war. Und wenn Einstein die Feldgleichungen mit EVAL gelöst hätte, wäre ich immer noch tief fasziniert, hätte aber einen Verbesserungsvorschlag zu machen...

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
el transeunte extranjero
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 21.12.2011, 17:56     Titel:
  Antworten mit Zitat      
Hallo Jan,


Danke für die Erklaerungen. Na ja bin in der Welt der Programmierung mit Matlab ein Laie.

Gerne wuerde ich erfahrene Leute wie Sie zu Rate ziehen um mich im Bereich weiter und richtig vertiefen zu können.

Grüsse aus Madris (echt so ausgesprochen von den leuten , die hier leben)

Frohe Weihnachten

el transeunte extranjero
_________________

Es ist laut geworden im Meer.
Private Nachricht senden Benutzer-Profile anzeigen
 
el transeunte extranjero
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.11
Wohnort: Madrid
Version: ---
     Beitrag Verfasst am: 24.12.2011, 11:26     Titel:
  Antworten mit Zitat      
Danke sehr. Hiermit aendere ich die Status der Diskussion als "beantwortet".

Frohe Weihnahten
_________________

Es ist laut geworden im Meer.
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.