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

Semesterarbeit+Matlab=Hilfe

 

blabla25
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2010, 13:34     Titel:
  Antworten mit Zitat      
Danke für die Hinweise. Ich werde mal etwas rumprobieren und versuchen mit der Hilfe zu Recht zu kommen.

Hab allerdings noch eine Frage:
Ist cumtrapz der richtige Befehl wenn ich über die Messergebnisse integrieren möchte?

Ich hab jetzt y=cumtrapz(n{1,1} (:,3)) als Befehl für eine Messreihe eingegeben. Dieser Befehl bedeutet doch, das er die Messreihe aus der ersten Zelle nimmt und dort die dritte Spalte integriert.

Aber wie macht er das? Dadurch das es recht viele Messergebnisse sind nimmt er dann einfacch die Messwerte und addiert sie auf? Quasi so, als würde man die Fläche unterm Graphen in Rechtecke teilen und diese aufaddieren.

Ich glaube nämlich langsam das mein Ergebnis falsch ist... Braucht er nicht quasi auch ne x-Achse? Um zu wissen von wo bis wo er integriert bzw. wie breit die einzelnen Rechtecke sind die er da aufaddiert?

Entschuldigt wenn ich so umständlich schreibe, ich hoffe das ihr mich jedoch versteht.
Private Nachricht senden Benutzer-Profile anzeigen


blabla25
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2010, 14:34     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo blabla25,

Zitat:
Die X-Achse (Zeitachse) ist zu eng beianeinder. Ich würde sie gerne etwas strecken, der Plot soll breiter werden.

Das ist nicht klar. Soll die Figure breiter werden, die AXES, oder die Limits der X-Werte? Für letzteres siehe XLIM.

Zitat:
Und das beschriften der y-Achse funktioniert nur auf der linken Seite. Wie beschrifte ich die rechte Seite?

Siehe "doc plotyy".
Das lesen der Hilfe-Texte ist immer hilfreich, wenn man nach Antworten sucht:
Code:

  help plotyy
  doc plotyy
  docsearch plotyy ylabe


Zitat:
Der nächste Schritt wäre dann für mich den Mittelwert über die Messreihe zu bilden:
Ich hab 50 Messreihen. Zu jeder Messreihe gehören 10.000 Werte.

Du könntest MEAN verwenden, wenn die Daten als Array vorlägen. Wenn ich es richtig verstehe, sind die einzelnen Messreihen aber in Cells gespeichert. Dann könntest Du sie ja in ein Array kopieren:
Code:
DataArray = cat(3, n{:})

Nun solltest Du per MEAN Deine Lösung finden können.

Gruß, Jan


Ich noch mal.... Soweit läuft Matlab bei mir mit meinen gewünschten Funktionen, jedoch hakt es noch hier und da.

Folgendes:
Jede Zeile einer Spalte von jeder Messung muss mit 10 multipliziert werden. Dies habe ich folgendermaßen gelöst:

Code:

for i=1:1:50
    for ii=1:1:10000
        n{1,i}(ii,3)=n{1,i}(ii,3)*10
        ii+1
    end
    i+1
end
 


Dies nimmt allerdings eine gewisse Zeit in Anspruch... gibt es da ne schnellere Möglichkeit?

Zweites, immer noch aktuelles Problem, sind die Mittelwerte über die Messungen.

Dies habe ich so gelöst:
Code:

for i=1:1:10000
    for ii=1:1:3
        Mittelwertdruck(i,ii)=n{1,ii}(i,3)
        ii+1
    end
    Mittelwertdruck(i,55)=mean(Mittelwertdruck(i,:))
    i+1
end
for i=1:1:10000
    for ii=1:1:3
        Mittelwertspannung(i,ii)=n{1,ii}(i,2)
        ii+1
    end
    Mittelwertspannung(i,55)=mean(Mittelwertspannung(i,:))
    i+1
end
 


Damit erzeuge ich mir neue Matrizen in denen die Werte abgespeichert werden und ich dann den Mittelwert der einzelnen Werte über die Messreihen erzeugen kann.

Dies dauert allerdings bei der Datenmenge einfach zu lange und ich breche ab. Das es funktioniert, weiß ich, denn ich habe es mit einer geringeren Datenmenge probiert. Auch hier suche ich eine Alternative....


Code:

DataArray = cat(3, n{:})
 


bringt mich irgendwie nicht weiter... Ich möchte ja die 10.000 Mittelwerte der Messwerte über 50 Messungen.

Hoffe ihr könnt mir noch mal helfen.

edit by denny: Bitte Code-Umgebung 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: 16.12.2010, 15:49     Titel:
  Antworten mit Zitat      
Hallo blabla25,

Zitat:
Code:

for i=1:50
    for ii=1:10000
        n{1,i}(ii,3)=n{1,i}(ii,3)*10
        ii+1   % Sinnlos hier!
    end
    i+1  % Sinnlos hier!
end

Es bringt nichts, innerhalb einer Schleife den Zähler manuell heraufzuzählen.
Dies ist wohl schneller:
Code:

for i=1:50
   n{i}(:, 3) = n{i}(:, 3)*10;
end

Vielleicht ist doch "n{1, i}" nötig, aber wenn n ein Cell-Vektor ist, kann man auf den ersten Index verzichten.

Code:

for i=1:1:10000
    for ii=1:1:3
        Mittelwertdruck(i,ii)=n{1,ii}(i,3)
        ii+1
    end
    Mittelwertdruck(i,55)=mean(Mittelwertdruck(i,:))
    i+1
end
 

Bitte schau Dir nochmal an, wie man FOR-Schleifen programmiert. Das "ii+1" und "i+1" ist hier reine Zeitverschwendung. Ausserdem shcreibst Du aller Ergebnisse ins Command-Window, was auch eine Menge Zeit vergeudet. Matlab läuft deutlich schneller, wenn Du die Zeilen mit einem Semikolon beendest und die Zwischenergebnisse nicht geschrieben werden.

Das MEAN Kommando kannst Du auch auf eine Matrix anwenden, statt es in jeder Iteration auf einen Vektor anzuwenden. Das geht deutlich schneller.
Bitte versuche das erstmal und poste dann den überarbeiteten Code nochmal.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2010, 15:50     Titel:
  Antworten mit Zitat      
Ach, ich glaub ich habs...

Code:

for i=1:1:10000
    for ii=1:1:51
        x(ii,1)=mean(Array(i,2,ii))
        ii+1
    end
    y(i,2)=mean(x(:,1))
    i+1
end

for i=1:1:10000
    for ii=1:1:51
        x(ii,1)=mean(Array(i,3,ii))
        ii+1
    end
    y(i,3)=mean(x(:,1))
    i+1
end
 


Da sind die Laufvariablen der Schleifen wieder mächtig groß, d.h. es dauert wieder sehr lange die Mittelwerte zu bilden. Irgendjemand ne Alternative oder Tipp wie es schneller geht?

edit by denny: Bitte Code-Umgebung verwenden, Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
blabla25
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 28.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2010, 16:09     Titel:
  Antworten mit Zitat      
Das wäre mein Code:

Code:


Array=cat(3,n{:});
for i=1:1:10001
    y(i,1)=n{1,1}(i,1);
end
for i=1:1:10001
    for ii=1:1:51
        x(ii,1)=mean(Array(i,2,ii));
    end
    y(i,2)=mean(x(:,1));
end
for i=1:1:10001
    for ii=1:1:51
        x(ii,1)=mean(Array(i,3,ii));
    end
    y(i,3)=mean(x(:,1));
end
clear x
 


Und mit den ; geht es deutlich schneller... Danke an dieser Stelle. Bin halt totaler Anfänger...
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: 17.12.2010, 00:14     Titel:
  Antworten mit Zitat      
Hallo blabla25,

Die FOR-Schleifen sind überflüssig und rauben viel Zeit:
Code:
for i=1:1:10001
    y(i,1)=n{1,1}(i,1);
end

==>
Code:
y = n{1,1}(1:10001,1);

Wenn die Dimensionen passen, geht das auch noch schneller:
Code:
y = n{1}(:,1);


Deinen Code zur Mean-Bildung verstehe ich nicht. Ich nehme aber an, das sich das auch ohne Schleife lösen läßt. Vielleicht hilft Dir das weiter:
Code:

x = rand(10000, 2, 51);
x = reshape(x, 10000, 102);
y = sum(x, 2) / 102;
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
texaner

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2012, 21:02     Titel: antwort
  Antworten mit Zitat      
Code:

clear all
clc
% Input of  force Output and transfer function.

p5 = xlsread('tek0000ALL.csv','A450000:B500000'); % time +pitot pressure
y= xlsread('tek0000ALL.csv','C450000:C500000');  % Force balance output

t=p5(:,1); p5 = p5(:,2);% Assigning first &second column time and pressure
y=y(:,1); % force


plot(t,p5)
figure
plot(t,y)
 


oder mann kann auch

Code:

clc
% Input of  force balance Output and transfer function.
case1 = input('Input Step Load from Force Balance : ','s');
case2 = input('Input Step Load from Force Balance : ','s');
known_output = strcat(' ',case1,'.xlsx');
response=strcat(' ',case2,'.csv');
y = xlsread(known_output,'A3325:B10014');
g=  xlsread(response,'A2105:B8794');  % for g2
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.