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

dringendes programmierproblem

 

bgrob
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 26.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2009, 15:06     Titel: dringendes programmierproblem
  Antworten mit Zitat      
hi leute!

ich bin gerade mitten in meiner bachelor-arbeit und bin auf ein problem gestossen, das ich auch in anderen sprachen nicht lösen konnte (meine programmierkentnisse sind noch nicht so weit gediehen).

es geht um folgendes: im habe ein text file das wie folgt aussieht:
1900.12 2.53
1900.12 2.45
1900.12 5.56
1905.34 1.39
1905.34 6.43

ich möchte nun, dass mir matlab von der rechten spalte den durchschnitt der werte berechnet, die zum jeweiligen jahr gehören und es mit dem jahr wieder ausspuckt:

1900.12 3.51 (=2.53+2.45+5.56/3)
1905.34 3.91

kann mir jemand sagen, wie ich das programmieren kann? wahrscheinlich mit arrays und so...

ich danke euch von herzen wenn ihr mir helfen könnt!!
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.05.2009, 16:40     Titel:
  Antworten mit Zitat      
Hallo,

mir ist folgende Idee eingefallen:

Code:

 str=[sprintf('1900.12 2.53\n'),...
        sprintf('1900.12 2.45\n'),...
        sprintf('1900.12 5.56\n'),...
       sprintf('1905.34 1.39\n'),...
       sprintf('1905.34 6.43\n')]

% string als Kommazahlen auslesen und zeilenweise trennen
val=textscan(str,'%f %f','delimiter','\n');
%
[d_val, n_val]=deal(val{:});

% unikate von jahren finden
un_val=unique(d_val);
% mean vector initialisieren
m_val=zeros(length(un_val),1);
%
% 1) in der Schleife positionen von Jahresaufkommen finden
% 2) mean bilden
% 3) Ausgeben
for i=1:length(un_val)
  idx         = d_val==un_val(i);
  m_val(i) = mean(n_val(idx));
  fprintf('%g %g\n',un_val(i),m_val(i) );
end

 



Natürlich muss du noch Text-Einlese-Routine einbauen
z.B. so:
Code:

fid= fopen('Mein_Text.txt','rt+');
val=textscan(fid,'%f %f','delimiter','\n');
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
bgrob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 26.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2009, 16:59     Titel:
  Antworten mit Zitat      
hi denny!

ganz herzlichen dank für deine hilfe!

nur noch eines (es ist mir fast ein wenig peinlich): wo muss ich denn die text-einlese routine einbauen, die du unten noch geschrieben hast?

habs bis jetzt vergeblich versucht Sad der rest funktioniert tadellos!

ich danke dir nochmals herzlich!
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 26.05.2009, 17:13     Titel:
  Antworten mit Zitat      
Das ist nur der Code der die ersten Zeilen des Beispiels ersetzt, da du ja geschrieben hast, dass du Textdateien hast.

Code:

% string als Kommazahlen auslesen und zeilenweise trennen  
fid= fopen('Mein_Text.txt','rt+');
val=textscan(fid,'%f %f','delimiter','\n');
fclose(fid);
%
[d_val, n_val]=deal(val{:});
.
.
.


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
 
bgrob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 26.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2009, 17:47     Titel:
  Antworten mit Zitat      
hi alex,

danke für deinen rat!
ich habe nun den code eingetippt, wie du's gesagt hast und dann bekomme ich folgenden fehler:

Code:

???   idx         = d_val==un_val(i);
    |
Error: The input character is not valid in MATLAB statements or expressions.
 


ich habe das text file (das auch 'Mein_Text.txt' heisst) in die 'current directory' getan.
liegt der fehler wohl hier?

nochmals danke für die tipps!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.05.2009, 18:03     Titel:
  Antworten mit Zitat      
Hallo,

Der Fehler passiert bereits schon vorher irgend wo,

kannst du bitte dein txt File einhängen, oder durch PN zusenden
zumindest ein stück davon
Private Nachricht senden Benutzer-Profile anzeigen
 
bgrob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 26.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2009, 23:09     Titel:
  Antworten mit Zitat      
cia denny!

hier ist mein text file angehängt. es ist im wesentlichen genau das gleiche, wie schon weiter oben verwendet.

danke schön!

Mein_Text.txt
 Beschreibung:

Download
 Dateiname:  Mein_Text.txt
 Dateigröße:  68 Bytes
 Heruntergeladen:  559 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.05.2009, 00:56     Titel:
  Antworten mit Zitat      
Komisch, bei mir läuft, verstehe ich nicht, woran es scheitert.
Funktioniert es genau mit diesen angehängten txt-File nicht?

Versuch es noch mal den untenstehenden Code zu kopieren und in Matlab-Shell direkt auszuführen.


Code:

fid= fopen('Mein_Text.txt','rt+');
val=textscan(fid,'%f %f','delimiter','\n');
fclose(fid);

[d_val, n_val]=deal(val{:});

% unikate von jahren finden
un_val=unique(d_val);
% mean vector initialisieren
m_val=zeros(length(un_val),1);
%
% 1) in der Schleife positionen von Jahresaufkommen finden
% 2) mean bilden
% 3) Ausgeben
for i=1:length(un_val)
  idx         = d_val==un_val(i);
  m_val(i) = mean(n_val(idx));
  fprintf('%g %g\n',un_val(i),m_val(i) );
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
bgrob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 26.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2009, 09:23     Titel:
  Antworten mit Zitat      
hi denny,

vielen dank für deine prompte hilfe!

als ich es heute morgen ausprobiert habe, hat alles tadellos funktioniert!

danke nochmals!

bgrob
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 - 2024 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.