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

m-file erstellen und schreiben

 

Driss
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2011, 18:04     Titel: m-file erstellen und schreiben
  Antworten mit Zitat      
Hallo Zusammen,

ich brauche eure Hilfe!.

Ich möchte einen m-file erstellen, wo ich Messdaten(als Matrix) initializieren kann. Ich habe es versucht mit: fprintf() aber ich bekomme immer wieder das Problem, dass der initizializierte Wert alle Index folgen Werte annimmt.
ich möchte sowas haben:

Force =
[1 n
2 n-1
3 .
. .
. .
. .
n 1]

Dafür habe ich im Workspace der parameter Force mit der Größe 200*2(entspricht 200 Zeilen und 2 Spalten).


Danke im Vorraus

Driss
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.12.2011, 18:08     Titel:
  Antworten mit Zitat      
So was?

Code:

n=200;
Force=[[1:n]', [n:-1:1]'];
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.12.2011, 23:16     Titel:
  Antworten mit Zitat      
Hallo Andreas,

Winzige Verbesserung - spart viele Nanosekunden Laufzeit:
Code:
n = 200;
Force=[(1:n)', (n:-1:1)'];

"1:n" ist schon ein Vektor. Ihn per [] in einen Vektor zu konvertieren kostet tatsächlich Zeit.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Driss
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2011, 09:14     Titel:
  Antworten mit Zitat      
Hallo,

erst mal danke schön über die schnelle Antwort. Ich glaube, daß ihr micht falsch verstanden habt.
Die Matrix Force existiert schon bei mir als 200*2 mit Werten.

Nun möchte ich diese Matrix, die ich schon aus einer txt Datei ausgelesen habe, in einer m-file Datei schreiben.
D.h ich soll erstmal eine m-file erstellen. Das ist mein Einsatz bis jetzt:

IDD = fopen('D:\XXX\INITI.m','wt')
fprintf(IDD, 'Force = %g', Force)
fclose(IID)

Aber es funktioniert noch nicht!.


Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 13.12.2011, 09:50     Titel:
  Antworten mit Zitat      
Daten werden üblicherweise in eine MAT Datei oder eine ASCII Datei geschrieben, siehe SAVE Kommando. Welche Grund könnte es geben Daten in eine MATLAB Code Datei zu schreiben?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2011, 12:38     Titel:
  Antworten mit Zitat      
Hallo Driss,

Bitte erkläre "Aber es funktioniert noch nicht!" genauer. Wir können nicht erraten, was das Problem ist.

Vielleicht hilft dies (jetzt rate ich doch):
Code:

fid = fopen('D:\XXX\INITI.m', 'w');
if fid == -1, error('Cannot open file'); end
F = transpose(Force);
fprintf(fid, 'Force = [%g, %g; ...\n', Force(1:2));
fprintf(fid, '  %g, %g; ...\n', Force(3:end - 2));
fprintf(fid, '  %g, %g];\n', Force(end-1:end));
fclose(fid);


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Driss
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2011, 15:09     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich danke dir für die Antwort. "Aber es hat funktioniert !"

Danke.

Eine weitere Frage. Dieses mal zur for und if Anweisungen.

Ich habe einen String deklariert wie:
KK = {'m_veh' 'm_us_f' 'm_us_r' 'Ixx' 'Iyy' 'Izz' 'mz' 'mx' 'my' 'Cx' 'Ax' 'Cy' 'Ay'};

und mit for und if möchte ich die einzelnen Parametern inizializieren.

Code:

for j = 1: length(K)

     if(hahahaha)
KK{i} = 0;
end
end
 


"Aber es funktioniert noch nicht!"

Danke und Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2011, 18:08     Titel:
  Antworten mit Zitat      
Hallo Driss,

Bitte öffne einen neuen Thread für eine neue Frage. Ansonsten kann man den "Beantwortet"-Status nicht ordentlich setzen.

Bitte benutze die Code-Umgebung für Matlab-Code.

Zitat:
Ich habe einen String deklariert wie:
Code:
KK = {'m_veh' 'm_us_f' 'm_us_r' 'Ixx' 'Iyy' 'Izz' 'mz' 'mx' 'my' 'Cx' 'Ax' 'Cy' 'Ay'};

Das ist ein Cell String. Ein String wäre ein CHAR Vektor.

Zitat:
und mit for und if möchte ich die einzelnen Parametern inizializieren.
Welche Parameter denn? KK ist eine Liste aus Strings, mit Parameter meinst Du aber wahrscheinlich Variablen.
"KK{i}=0" ersetzt den String in der i.ten Cell mit der Zahl 0.

Ich bitte Dich, statt "es funktioniert nicht" eine Beschreibung des Problems zu posten. Je genauer Du Dein Problem beschreibst, desto leichter fällt es zu antworten. Mit "funktioniert nicht" müssen wir zunächst Raten, was Dein Programm leisten soll und zweitens erforschen, was stattdessen passiert.

Wenn Du die Variablen initialisieren möchtest, deren Namen im Cell-String gespeichert sind: Das ist eine fehleranfällige Meta-Programmier-Methode. Es geht zwar, erzeugt aber immer wieder Schwierigkeiten und bremst Matlab sehr aus. Ein ordentlicher Ansatz könnte dies sein:
Code:
m_veh = 0;
m_us_f = 0;
m_us_r = 0;
Ixx = 0;
Iyy = 0;
Izz = 0;
mz = 0;
mx = 0;
my = 0;
Cx = 0;
Ax = 0;
Cy = 0
Ay = 0;


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Driss
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2011, 11:21     Titel:
  Antworten mit Zitat      
Hallo Jan,

erst mal danke für die Antwort. Ich muss ehrlich sagen, daß ich kein Programmierer bin. Deswegen scheitert ja manchmal an bistimmten Stellen.

So jetzt zurück zum Thema, ich lese ja Daten von einer excel Datei und parallel dazu möchte ich die folgenden Variabeln initializieren:

m_us_f, m_us_r, Ixx, Iyy, Izz, mz, mx, my, Cx, Ax, Cy, Ay;

Ich lese 2 Spalten aus einem excel sheet und dann ich untersuche, in welchem Index die ausgelesenen Daten sich befinden somit kann ich auf den Werten über Indexen zugreifen. Aber diese Werten möchte ich auf die oben gennante Variabeln zuweisen.

Hier ist mein Einsatz:
Code:

 K = {a b c d e f g h I G k l m }; % ausgelesene Daten
KK ={m_us_f m_us_r Ixx Iyy Izz mz mx my Cx Ax Cy Ay} % Variabeln
yy = 0;   % ist eine Hilfe für Untersuchung ob ein Parameter vorhanden ist

[num,txt, raw1]= xlsread('data.xls', 2, 'B:B');
[num,txt, raw2]= xlsread('data.xls', 2, 'C:C');

raw1 = raw1(1:50);
raw2 = raw2(1:length(raw1));

for j = 1: length(K)

    for i = 1:length(raw1)              
   
    xx = strcmp(raw1(i), K{j}); % untersuchung, ob der ausgelesene Parameter vorhanden        
   
        if (xx ==  1)   % wenn ja
           
          Data_vehicle(j) = raw2{i}; % HIER MÖCHTE ICH DIE  
                                                  %INITIALIZIERUNG MACHEN
         
          KK{j} = raw2{i}
          yy = xx;
                 
       
        elseif (xx ==  0)&& (i>=length(raw1))&& (yy ~= 1)
                       
           
             KK(j) = []; %Wenn er nicht vorhanden ist bekommt der %Variabel keinen Wert.
     
        end

    end
 


Ich hoffe, daß ich das problem besser beschreiben könnte.

Danke im Vorraus

Driss

edit bei denny: Bitte Codeumgebung verwenden. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.12.2011, 12:02     Titel:
  Antworten mit Zitat      
Hallo Driss,

Bitte verwende die Code-Umgebung, um ein Programm zu posten. Der Code aus Deiner letzten Nachricht ist sehr unübersichtlich.

Code:
KK = {m_us_f m_us_r Ixx Iyy Izz mz mx my Cx Ax Cy Ay} % Variabeln

Wurde die Variablen "m_us_f" etc vorher definiert? Dann ist dies ein CELL-Vektor, der die Inhalte der Variablen enthält.
Code:
KK{j} = raw2{i}

Dies überschreibt nun den Wert, der im i.ten Element des Cell-Arrays gespeichert ist. Ist dies Dein Ziel? Oder möchtest Du der entsprechenden Variablen einen Wert zuweisen? Im letzteren Fall: Das funktioniert nicht.

Ich habe den Eindruck, Du verwechselst Variablen und ihre Werte.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Driss
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2011, 15:11     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja ich möchte der entsprechenden Variablen einen Wert zuweisen.
Code:
KK = {m_us_f m_us_r Ixx Iyy Izz mz mx my Cx Ax Cy Ay} % Variabeln  

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 14.12.2011, 17:59     Titel:
  Antworten mit Zitat      
Falls das mal gelöst ist - ich bin immer noch neugierung warum man sowas überhaupt machen möchte.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.12.2011, 18:39     Titel:
  Antworten mit Zitat      
Hallo Driss,

Wie gesagt: Das funktioniert nicht.
Wenn Du KK so wie oben definiert hast, enthält es nur noch die Werte der Variablen. Man kann so aber nicht auf die Variablen selbst zugreifen.

Was Du vorhast ist ein Programmier-Modell, bei dem das Programm rekursiv auf seinen eigenen Source-Code zugreift. Sowas ist zwar möglich, aber sehr anspruchsvoll. Matlab ist dafür nicht besonders geeignet, ich würde eher LISP dafür wählen. Nützlich ist das, wenn man etwas mit künstlicher Intelligenz brauchst, z.B. Spracherkennung.

Wenn Du Programmieranfänger bist, rate ich auf jeden Fall davon ab. Initialisiere die Variablen ganz explizit mit "m_us_f = 0". Komplizierte Programmiertechniken machen ein Programm nicht schlauer, sondern sie machen hauptsächlich das Finden von Fehlern unmöglich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Driss
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2011, 20:25     Titel:
  Antworten mit Zitat      
Hallo Jan,

Zitat: 'Wenn Du KK so wie oben definiert hast, enthält es nur noch die Werte der Variablen. Man kann so aber nicht auf die Variablen selbst zugreifen'.

Ja stimmt das ist das Problem, was ich gemeint habe, daß es noch nicht funktioniert.

Gibt es eine andere Möglichkeit die Variabeln so zu inizialisieren?.

Danke

Driss
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2011, 23:49     Titel:
  Antworten mit Zitat      
Andreas Goser hat Folgendes geschrieben:
Falls das mal gelöst ist - ich bin immer noch neugierung warum man sowas überhaupt machen möchte.

Andreas


Hallo,
nicht ganz unabhängig von der Fragestellung kann es durchaus mal vorkommen,
dass man von irgendwoher eine Liste mit Schlüssel-Wert-Paaren hat:
Code:
%% Schluessel-Wert Liste
J={'b',5; 't',7; 'a',3; 'd',9};

Man will aber den Schlüsseln intern andere Namen geben:
Code:
% gewuenschte Schluessel
K={'a','b','c','d'};
% interne Namen
N={'Aa','Ab','Ac','Ad'};

Dabei sind nur ein paar Schluessel relevant, oder man weiß nicht ob
überhaupt alle Schluessel definiert sind.
Man kann dann z.B. ein struct erzeugen:
Code:
[dummy,idx1,idx2]=intersect(K,J(:,1));
% idx1: Position in K <-> idx2: Position in J

% Zuweisung der Werte aus J zu den internen Namen in N
N(2,idx1)=J(idx2,2);

% erzeugen eines Structs
V=struct(N{:});

disp(V);
%    Aa: 3
%    Ab: 5
%    Ac: []
%    Ad: 9

in dem alle internen Namen definiert sind und mit den gegebenen Werten
gefüllt, oder eben leer, falls das entsprechende Schlüssel-Wert-Paar nicht
exisitiert. Jetzt kann im weiteren Programm auf diese struct
zugegriffen werden, ohne jedesmal eine Existenzabfrage machen zu müssen.

Gruß
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.