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

Problem mit Vektor

 

radian
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2008, 19:12     Titel: Problem mit Vektor
  Antworten mit Zitat      
Hallo, möchte in einer Schleife Monatswerte in einen Vektor mit unterschiedlicher größe schreiben.
Was kann ich tun. Hier erstmal der Quelltext bis zur Problemstelle.
Code:
% Funktion zur Darstellung der Modulgruppenerträge über ein Jahr
function ModulGrErtrag(filename, savename, Pmax)
%
% Übergbewerte:
% -------------
% filename      ->  sensor*.dat Sensordatei (dat-File mit Energiertrag der Modulgruppe z.B. sensor16.dat)
%                   Diese Datei enthält E-total eines Strings. Damit kann
%                   für Y_A,m = E_A,m /P_0  die E_A,m Energie berechnet werden.  
% savename      ->  sensor*.mat Sicherung der Sensordatei in mat-Format
% Pmax          ->  maximale Modulgruppenpleistung
%
% Sch, Bär, 28.10.07
format long;
% Laden und Einlesen der Datei in temporärer Variable
fid = fopen(filename);
Tmp = textscan(fid,'%10n %19c %f', 'Whitespace' );
fclose(fid);

% Sichern der Daten in Datenstrucktur
    ID = Tmp{1,1};
    fDate = Tmp{1,2};
    % Konvertierung des Datums in eine Serielle Zahl
    Date  = datenum(fDate,'dd.mm.yyyy HH:MM:SS');
    %Time = Tmp(1,3);
    Value = Tmp{1,3};

    % Sichern der Datenstrucktur in *.mat - File
    savefile = savename;
    save(savefile, 'ID', 'Date', 'Value')
 
% Laden der Sensordaten
    sensorStr = load(savename);

% Entfernen überflüssiger Variablen
    clear fid Tmp ID  Value savename filename ans savefile Date fDate;

% Kontrolle auf Ungültige Werte
BoolVektor              = sensorStr.Value > 0;
CheckedValueVektor      = sensorStr.Value(BoolVektor);
CheckedDateVektor       = sensorStr.Date(BoolVektor);
%--------------------------Filterung der monatlichen Werte--------------------------
% Vorteil nun, ist dass E-total schon für jeden String im Datensatz z.B.
% sensor16.dat vorhanden ist somit nicht extra berechnet werden muss.
% Daher kann der Monatsertrag der Energie, durch
% letzter Energiewert - erster Energiewert berechnet werden. Das Ergebniss ist E_A,m
   
  Monatsertrag =[1,1]   ;
    % Daten Januar
    for i = 1:11
        eval(['Datumsgrenze1 = datenum(''01.', num2str(i, '%02u'), '.2004 00:00:00'',''dd.m.yy HH:MM:SS'');'])
        eval(['Datumsgrenze2 = datenum(''01.', num2str(i+1, '%02u'), '.2004 00:00:00'',''dd.m.yy HH:MM:SS'');'])
        BoolVektor  = (CheckedDateVektor >= Datumsgrenze1) & (CheckedDateVektor < Datumsgrenze2);
        Monatsertrag(i)   =  CheckedDateVektor(BoolVektor); %Problemstelle
    end ....

Wie man sieht, ist im Vektor Monatsertrag kein Wert speicherbar. Warum, Weiteres Problem, CheckedDateVektor kann durch den BoolVektor eine variable länge erhalten. Dennoch möchte ich die Werte sichern. Geht das auch über eine Strucktur von 12(Monate)? Wenn ja, wie?
Bitte um Hilfe. Den derzeit erhalte ich nur die Fehlermeldung:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> ModulGrErtrag at 53
Monatsertrag(i) = CheckedDateVektor(BoolVektor);
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.02.2008, 21:14     Titel:
  Antworten mit Zitat      
Du hast hier mehrere Probleme,

1) Du versucht ein Array in eine Dimension einzufügen

Code:

Monatsertrag =[1,1] ;
.
.
.
Monatsertrag(i) = CheckedDateVektor(BoolVektor);
 


also sollst du entweder, wenn du die Maßen von Monatsertrag kennst, vorher den Speicher reservieren:
ungefähr so:
Code:

Monatsertrag =zeros(11,100)
 


oder
einfach leer lassen, ist dann in der Ablauf langsamer und Speicherplatz hungriger
Code:

Monatsertrag =[]
 


2) Hier kann es aber bei dir eventuell dann erneut später krachen
Code:

Monatsertrag(i) = CheckedDateVektor(BoolVektor);
 


wenn CheckedDateVektor(BoolVektor) unterschiedlich groß lange Arrays liefert. Es sein denn du bist dir immer sicher, dass immer gleich große Arrays rauskommen, da kannst so lassen.

darum mein Vorschlag wäre es so zu machen:

[code]

Monatsertrag =zeros(11,length(CheckedDateVektor))
.
.
.
Monatsertrag(i,BoolVektor) = CheckedDateVektor(BoolVektor);
[code]

Wie du die Nullwerte wegkriegst musst du wohl selbst rausfinden
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.