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

Anfängerksript zum Matrix auslesen und schreiben

 

diri3l
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 16.06.2014, 23:03     Titel: Anfängerksript zum Matrix auslesen und schreiben
  Antworten mit Zitat      
Hallo,

ich brauche ein kleines Skript, das aus 3 verschiedenen Matrizen Schrittweise die Daten ausliest und in einer Formel verarbeitet. Die Ausgegebenen Werte sollen geplottet werden.

Die Matrizen heißen "S13", "S14" und "S15". Sie besitzen jeweils 13001 Zeilen und 4117 Spalten.

In dem Skript sollen nun die Werte aus Spalte i, Zeile j aus S13, aus S14 und S15 gelesen werden. Also der Wert an der selben Position, jeder Matrix.

Aus den 3 ausgelesenen Werten, soll ein neuer Wert berechnet werden:

v_res_i = sqrt((S13(Zeile1:Spalte1))^2 + (S14(Zeile1:Spalte1))^2 + (S15(Zeile1:Spalte1))^2)


Und dies natürlich für alle Zeilen und Spalten in den 3 Matrizen.

In der Matrix v_res_i sollen dann die ausgerechneten Werte stehen. Das heißt, aus 3 Matrizen, wird eine Matrix.

Die Werte der resultierenden Matrix sollen dann geplottet werden. Soweit bin ich aber noch nicht.

Könntet ihr mir sagen, ob ich auf dem richtigen Weg bin?

Code:

clc

for i = 1:13001
   
    for j = 1:4117
       
           v_resi = sqrt((S13(i,j)).^2 + (S14(i,j)).^2 + (S15(i,j)).^2);
       
    end

end
 


Da ich in Matlab neu bin und auch allgemein mit Programmierung ziemlicher Novize bin wäre ich für Hilfe sehr Dankbar.

Daniel
Private Nachricht senden Benutzer-Profile anzeigen


TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 17.06.2014, 00:04     Titel:
  Antworten mit Zitat      
Hi diri,

ich würde folgende Verbesserungen vorschlagen:

Code:
% Testdaten erzeugen (einfacher für uns zu testen)
S13 = rand(13001, 4117);
S14 = rand(13001, 4117);
S15 = rand(13001, 4117);

% Ergebnismatrix vordefinieren
v_res_i = zeros(13001, 4117);

for i = 1:13001
   
    for j = 1:4117
       
           v_res_i(i,j) = sqrt((S13(i,j))^2 + (S14(i,j))^2 + (S15(i,j))^2);
       
    end

end


Wenn du weißt, wie groß deine Matrix sein wird spart es dir unheimlich viel Rechenzeit einfach eine null-Matrix dieser Größe zu definieren und diese dann innerhalb der Schleife zu befüllen.

Ich habe die Punktquadrierung (.^2) mal entfernt, da du in der Schleife immer einen expliziten Punkt in der Matrix ansteuerst. Operationen mit einem Punkt machen es leichter mit Matritzen zu arbeiten.
Entweder quadrierst du also vorher die gesamte Matrix mit S13 = S13.^2
oder du machst es in der Schleife ganz normal.

Hoffe, ich konnte dir damit das Skripten etwas näher führen.

Schönen Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 17.06.2014, 15:26     Titel:
  Antworten mit Zitat      
TurboUlli hat Folgendes geschrieben:

Code:
% Testdaten erzeugen (einfacher für uns zu testen)
S13 = rand(13001, 4117);
S14 = rand(13001, 4117);
S15 = rand(13001, 4117);
end


Das sind nur Beispielmatrizen zum testen, ja? Dann brauche ich die ja für mich nicht.

TurboUlli hat Folgendes geschrieben:

Code:

% Ergebnismatrix vordefinieren
v_res_i = zeros(13001, 4117);
 


Wenn du weißt, wie groß deine Matrix sein wird spart es dir unheimlich viel Rechenzeit einfach eine null-Matrix dieser Größe zu definieren und diese dann innerhalb der Schleife zu befüllen.


Das macht Sinn, dass das dann schneller geht. Danke!

TurboUlli hat Folgendes geschrieben:

Code:

for i = 1:13001
   
    for j = 1:4117
       
           v_res_i(i,j) = sqrt((S13(i,j))^2 + (S14(i,j))^2 + (S15(i,j))^2);
       
    end

end



Ich habe die Punktquadrierung (.^2) mal entfernt, da du in der Schleife immer einen expliziten Punkt in der Matrix ansteuerst. Operationen mit einem Punkt machen es leichter mit Matritzen zu arbeiten.
Entweder quadrierst du also vorher die gesamte Matrix mit S13 = S13.^2
oder du machst es in der Schleife ganz normal.


Achso, das heißt mit den Punkt-Operatoren kann ich komplette Matrizen bearbeiten? Oha, das habe ich nicht gewusst, danke. Dann passt das ja auch soweit.
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 17.06.2014, 15:34     Titel:
  Antworten mit Zitat      
Der Überesicht halber mit neuem Post weiter:

Bisher sieht es so aus:

Code:
% Ergebnismatrix vordefinieren
v_res_i = zeros(13001,4117);

for i = 1:13001
   
    for j = 1:4117
       
           v_res_i(i,j) = sqrt((S13(i,j))^2 + (S14(i,j))^2 + (S15(i,j))^2);
       
    end

end
 


Jetzt gehts ums Plotten. Aus der neu erstellten Matrix "v_res_i" sollen Spaltenweise Plots erstellt werden. Also Plot 1 mit allen Einträgen der Spalte 1. Nach erstellung des Plots, soll dieser als .eps und als .emf gespeichert werden. (Ich arbeite unter Ubuntu, mein Betreuer unter Windows. Daher für mich eps und für ihn .emf)
Gleiches natürlich für alle Spalten von 1 bis 4117.

Code:
for i = 1:13001
   
    for j = 1:4117
       
        plot(v_res_i(i,j));
       
    end
   
    print('-depsc2', sprintf('/***/Master/Studienarbeit IGB/Matlab/V_res/EPS/V_res_Schlag_%04d.eps', i));
    print('-dmeta', sprintf('/***/Master/Studienarbeit IGB/Matlab/V_res/EMF/V_res_Schlag_%04d.emf', i));

   
end
 


Irgendwie will das nicht so ganz. Ich glaube ich habe einen Fehler in der for-Schleife.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 17.06.2014, 16:22     Titel:
  Antworten mit Zitat      
Hallo,

für weitere Laufzeiteinsparung kann man auch komplett auf die Schleifen verzichten:
Code:
v_res_i = sqrt(S13.^2+S14.^2+S15.^2);

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 17.06.2014, 16:58     Titel:
  Antworten mit Zitat      
Hi,

ah der Vorschlag von Nras ist der beste Weg. Hab ich irgendwie nicht daran gedacht Shocked

Was den Plot angeht muss es anders gemacht werden.
Der plot-Funktion kannst du einen Vektor übergeben und diese werden dann auf der y-Achse über eine normierte x-Achse geplotet.
Sieht also wie folgt aus:


Code:

    for i = 1:4117
        % : steht für die gesamte Spalte bzw. Zeile
        plot(v_res_i(:,i));
       
    end


Dann sollte die print-Funktion bei dir auch funktionieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 17.06.2014, 18:15     Titel:
  Antworten mit Zitat      
Hallo Nras,

vielen Dank für den Tip! Damit geht es wirklich viel schneller. Habe bisher immer nur geguckt, dass es "irgendwie" geht und wenig werd auf Eleganz und Effizienz gelegt. So hat das immer ein paar Minuten gedauert. Jetzt rauscht das in 3 Sekunden durch Laughing

Uli, perfekt, das funktioniert alles so weit!

So siehts also im Moment aus:

Code:

clc

% Vektoren der Geschwindigkeit, gemittelt über alle 3 Raumrichtungen
% erzeugen

 v_res_i = sqrt(S13.^2+S14.^2+S15.^2);

% Vektoren der Geschwindigkeit, aufgeteilt auf die einzelnen Schlagfenster plotten

for i = 1:4117
    plot(v_res_i(:,i))

    print('-depsc2', sprintf('/***/Master/Studienarbeit IGB/Matlab/V_res/EPS/V_res_Schlag_%04d.eps', i));
    print('-dmeta', sprintf('/***/Master/Studienarbeit IGB/Matlab/V_res/EMF/V_res_Schlag_%04d.emf', i));


end
 


Zwei Kleinigkeiten fehlen noch zu meinem Glück.

1. Das Speichern als EPS klappt wunderbar, aber nicht als EMF.

In der Doku steht, dass Plot mit -dmeta EMFs ausspuckt: http://www.mathworks.de/de/help/matlab/ref/print.html. Trotzdem bekomme ich die Fehlermeldung, dass -dmeta hier nicht erlaubt ist:


Code:

Error using inputcheck>LocalCheckDevice (line 282)
Illegal device option, '-dmeta', specified.

Error in inputcheck (line 208)
[ pj, devIndex ] = LocalCheckDevice( pj, deviceToCheck, devices );

Error in print (line 166)
    [pj, devices, options ] = inputcheck( pj, inputargs{:} );

Error in Aufgabe3_Bestimmung_Vres (line 14)
    print('-dmeta', sprintf('/***/Master/Studienarbeit
    IGB/Matlab/V_res/EMF/V_res_Schlag_%04d.emf', i));
 


2. Ändern der Skalierung der X-Achse.

Im Moment hab ich 13001 Samples. Die Samplingfrequenz beim Aufzeichnen Betrug 1/10000. In einer Spalte befinden sich also 1,3 Sekunden des fortlaufenden Signals. Statt der Samples sollen aber die Sekunden/ms auf der X-Achse stehen. Wie rechne ich die Samples in Sekunden um und skaliere die X-Achse entsprechend?
Private Nachricht senden Benutzer-Profile anzeigen
 
TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 17.06.2014, 19:15     Titel:
  Antworten mit Zitat      
Hey diri,

zu 1.
leider weiß ich nicht, wo der Fehler bei dir herkommt. Bei mir hat alles reibungslos geklappt mit

Code:

print('-depsc2', sprintf('irgend_ein_Pfad/V_res_Schlag_%04d.eps', i));
print('-dmeta', sprintf('irgend_ein_Pfad/V_res_Schlag_%04d.emf', i));
 

Welche Matlab Version benutzt du?
Als Alternative könntest du evtl. ein anderes Dateiformat versuchen, statt -dmeta
Oder dein Betreuer schafft sich mal Ghostscript oder EPS Viewer o.Ä. an Very Happy


zu 2.
du hast im Grunde deine Lösung in deiner Frage geschrieben, ohne es zu merken Wink
Die Messung verläuft mit einer Frequenz von 1/10.000
Also musst du nur einen Zeitvektor erstellen, der dein Messspektrum abdeckt.
z.B.:

Code:

% Messfrequenz f
f = 1/10000;
% Zeitvektor für die x-Achse
% von 0 bis zur Länge der Matrix v_res_i (in Sekunden) in den Schritten f
zeit = 0 : f : length(v_res_i)*f;

...

plot(v_res_i(:, i), zeit);
% Formatierungen für die x-Achse - z.B...
xlim([0 1.5]);
xlabel('t [s]');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 17.06.2014, 21:19     Titel:
  Antworten mit Zitat      
Okay, die EMF Geschichte kann warten Wink Ich benutze Version 2013a

Code:

clc

% Messfrequenz f
f = 1/10000;

% Vektoren der Geschwindigkeit, gemittelt über alle 3 Raumrichtungen
% erzeugen

 v_res_i = sqrt(S13.^2+S14.^2+S15.^2);

% Zeitvektor für die x-Achse
% von 0 bis zur Länge der Matrix v_res_i (in Sekunden) in den Schritten f
zeit = 0 : f : length(v_res_i)*f;
 
% Vektoren der Geschwindigkeit, aufgeteilt auf die einzelnen Schlagfenster plotten

for i = 1:4117
    plot(v_res_i(:,i),zeit)
    xlim([0 1.5]);
    xlabel('t [s]');
 
 

    print('-depsc2', sprintf('***/Master/Studienarbeit IGB/Matlab/V_res/EPS/V_res_Schlag_%04d.eps', i));


end
 


Bei mir kommt da die Fehlermeldung:

Code:

Error using plot
Vectors must be the same lengths.

Error in Aufgabe3_Bestimmung_Vres (line 18)
    plot(v_res_i(:,i),zeit)
 


Ich glaube da stimmt was mit der Reihenfolge nicht. xlim und xlabel sind klar, auch wo sie hingehören. Zum Plot. f ist eine Konstante und damit kann sie ja gleich zu Anfang geschrieben werden. zeit ist von v_res_i abhängig und sollte demnach danach kommen.

Kann es sein, dass die Matrix invertiert werden muss? Wenn er über die Länge des Vekotrs meckert? Oder liegt es daran, dass zeit hier 13002 Werte, also einen mehr als v_res_i hat. Er fängt bei 0 an. Also müsste Zeit bei 0 ++ beginnen?

Edit: Wenn ich manuell, eingreife und die erste Spalte des Vektors Zeit lösche, sodass dieser nur noch 13001 Werte aufweißt, klappt die Sache. Der Plot ist allerdings um 90° verdreht. Demnach muss zeit tatsächlich invertiert werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 17.06.2014, 21:54     Titel:
  Antworten mit Zitat      
diri3l hat Folgendes geschrieben:

Kann es sein, dass die Matrix invertiert werden muss? Wenn er über die Länge des Vekotrs meckert? Oder liegt es daran, dass zeit hier 13002 Werte, also einen mehr als v_res_i hat. Er fängt bei 0 an. Also müsste Zeit bei 0 ++ beginnen?


Hoppla - du hast natürlich recht! Die Syntax lautet schließlich plot(x, y) also muss der Zeitvektor zuerst kommen.

Das mit der Länge des Vektors hast du auch richtig erkannt. Ich habs nicht mehr getestet, sondern hab es nur so heruntergeschrieben und das wieder übersehen.
Ich würde eher sagen nicht bei 0++ beginnen, sondern bei length(y) - 1 enden. Also..

Code:

zeit = 0 : f : (length(v_res_i)*f)-1;
% den Zeitvektor transponieren
zeit = zeit';
 


Hoffe, damit geht es dann Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 18.06.2014, 00:14     Titel:
  Antworten mit Zitat      
TurboUlli hat Folgendes geschrieben:

Code:

zeit = 0 : f : (length(v_res_i)*f)-1;
% den Zeitvektor transponieren
zeit = zeit';
 



Ich glaube die -1 gehört hier vor das "mal" *. Damit klappt es dann. Ich bin mir allerdings nicht ganz sicher ob das so korrekt ist. Denn: Der Vektor soll ja nicht zwangsläufig bei 0 anfangen. Er soll mit dem ersten Wert beginnen. Mit der obigen Lösung wird ja der letzte Wert weg geschnitten, statt die Null am Anfang zu unterdrücken. Ich möchte nicht kleinlig sein... aber ich bin mir da nicht ganz sicher.

Weiterhin ist der Plot, oder vielmehr sein Inhalt um 90° verdreht. Die X-Achse stimmt, da wir ja die Beschriftung selbst festgelegt haben. Das kommt auf jeden Fall durch die Skalierung, die da in den Plot mit reingeschrieben wird. Ich denke das mit der Orientierung des Vektors noch etwas nicht stimmt.

Edit: Ich habs:

Code:

clc

% Messfrequenz f
f = 1/10000;

% Vektoren der Geschwindigkeit, gemittelt über alle 3 Raumrichtungen
% erzeugen

 v_res_i = sqrt(S13.^2+S14.^2+S15.^2);

% Zeitvektor für die x-Achse
% von 0 bis zur Länge der Matrix v_res_i (in Sekunden) in den Schritten f
zeit = 0 : f : ((length(v_res_i)-1)*f);
zeit_vert = zeit';
 
% Vektoren der Geschwindigkeit, aufgeteilt auf die einzelnen Schlagfenster plotten

for i = 1:4117
    plot(zeit_vert,v_res_i(:,i))
    %xlim([0 1.5]);
    xlabel('t [s]');
 

    print('-depsc2', sprintf('/***/Master/Studienarbeit IGB/Matlab/V_res/EPS/V_res_Schlag_%04d.eps', i));


end
 


Im Plot müssen die Position der zeit_vert und v_res_i vertauscht werden. Es gilt ja plot(X,Y)... zeit_vert kommt auf die X-Achse.

Danke so weit! Morgen gehts weiter Wink

Zuletzt bearbeitet von diri3l am 18.06.2014, 00:28, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 18.06.2014, 00:22     Titel:
  Antworten mit Zitat      
Entschuldige, du hast natürlich wieder Recht. Das -1 muss von der Länge abgezogen werden und dann mit der Frequenz aufmultipliziert werden und nicht so, wie ich es geschrieben habe.
Ich sollte wohl doch lieber vorher einen kleinen Test durchlaufen lassen, bevor ich meinen Vorschlag schreibe Confused

Welches delta t du betrachtest ist ja dir überlassen. Ich habe es einfach bei 0 beginnen lassen, weil ich es normaler weise so kenne bei Messreihen.
An den Ergebnissen sollte das ja nichts ändern, da du nichts davon verrechnest, sondern einfach die bildliche Darstellung richtig gestalten möchtest. Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 18.06.2014, 00:30     Titel:
  Antworten mit Zitat      
Kein Problem, ich bin dir mehr als dankbar für deine Hilfe. Sonst wäre ich nie so weit gekommen, bzw. es wäre wesentlich mühseliger geworden. Habe die Geschichte oben noch mal editiert. Also den Punkt mit den vertauschten X- und Y-Achsen.

Gute Nacht Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
diri3l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.01.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 01.07.2014, 22:35     Titel:
  Antworten mit Zitat      
So es geht weiter, bin endlich wieder da und am Ball Very Happy

Neue Aufgabe:

Ich habe 5 Matrizen. Jede Matrix ist 13001 (Zeilen) x 4117 (Spalten) groß.

Ich Muss aus Matrix 1 das Maximum der ersten Spalte suchen. Gleiches gilt für alle 5 Matrizen. Also immer das Maximum der ersten Spalte. Alle 5 Werte sollen dann in eine Datei geplottet werden. Danach gehts weiter mit der zweiten Spalte, der Dritten und so weiter...

Die Matrizen heißen

v_res_1
v_res_2
v_res_3
v_res_4
v_res_5

Ich hab das jetzt so probiert:

Code:

%ML1
v_res_1 = sqrt(S13.^2+S14.^2+S15.^2);

%ML2:
v_res_2 = sqrt(S10.^2+S11.^2+S12.^2);

%ML3:
v_res_3 = sqrt(S4.^2+S5.^2+S6.^2);

%ML4:
v_res_4 = sqrt(S1.^2+S2.^2+S3.^2);

%ML5:
v_res_5 = sqrt(S7.^2+S8.^2+S9.^2);



for i = 1:4117
    plot(max(v_res_1(:,i),[],1),'g')
   
    hold on
       
    plot(max(v_res_2(:,i),[],1),'r')
   
    hold on
       
    plot(max(v_res_3(:,i),[],1),'b')
   
    hold on
   
    plot(max(v_res_4(:,i),[],1),'c')
   
    hold on
   
    plot(max(v_res_5(:,i),[],1),'m')
   
    hold off

print('-depsc2', sprintf('/PfadzudenPlots/Schlag_%04d.eps', i));
end
end
 


Aber irgendwie klappt es nicht. Es kommen nur einzelne Plots mit Punkten, nicht mit einer Kurve heraus. Es soll eigentlich eine Abklingkurve sichtbar werden. In jedem Plot müssten ja 5 Punkte, also die 5 Maxima der 5 verschiedenen Matrizen in den jeweiligen Spalten vorhanden sein. Was raus kommt, ist aber sowas, wie im Anhang befindlich.

1.png
 Beschreibung:

Download
 Dateiname:  1.png
 Dateigröße:  5.18 KB
 Heruntergeladen:  186 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
TurboUlli
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 26.05.14
Wohnort: NRW
Version: 2014a
     Beitrag Verfasst am: 02.07.2014, 00:30     Titel:
  Antworten mit Zitat      
Hi diri,

ich möchte ein paar kleine Verbesserungen vorschlagen Smile

Der befehl hold on muss nur ein Mal aufgerufen werden. Dieser gilt für alle ausgeführten plots, bis du wieder hold off aufrufst.
Du musst es also nicht mehrfach innerhalb der Schleife aufrufen, sondern kannst es ein Mal außerhalb der Schleife aufrufen.

Die Punkte liegen alle auf 1, weil du keine x-Achse angibst. Da du für jeden einzelnen Punkt den Plot Befehl immer wieder aufrufst, betrachtet Matlab diese nicht als zusammengehörenden Vektor, sondern als einzelnen Punkt, bei denen du "zufällig" jeden fünften mit der gleichen Farbe versehst. Also werden die immer schön über der 1 aufgetragen.

Mein Vorschlag wäre die Maxima immer in einen Zwischenvektor zu packen, so dass du am Ende wirklich einen Vektor hast. Wenn du den dann plottest, wird ihm eine normierte x-Achse zugewiesen und alles sollte fein sein.

Code:

% Speicher vorbelegen
Max1 = zeros(4117, 1);
Max2 = zeros(4117, 1);
Max3 = zeros(4117, 1);
Max4 = zeros(4117, 1);
Max5 = zeros(4117, 1);

for i = 1:4117
    Max1(i) = max(v_res_1(:,i));
    Max2(i) = max(v_res_2(:,i));
    Max3(i) = max(v_res_3(:,i));
    Max4(i) = max(v_res_4(:,i));
    Max5(i) = max(v_res_5(:,i));
end

hold on
plot(Max1, 'g');
plot(Max2, 'r');
plot(Max3, 'b');
plot(Max4, 'c');
plot(Max5, 'm');
hold off
 
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.