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

geplottete Kurve prozentual runterechnen

 

Maverick
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 21.02.2014, 13:28     Titel: geplottete Kurve prozentual runterechnen
  Antworten mit Zitat      
Ich bin es schon wieder Wink

Nun habe ich folgendes Problem: ich möchte eine geplotte Kurve prozentual runterechnen. Das ganze habe ich mal Fachmännisch im Anhang mit Paint schematisch dargestellt.

Wenn meine Daten nun z.B. wie folgt sind:

1
2
3
4
5
6
5
4
3
2
1

möchte ich sie nach der berechnung mit z.B. 50 % um die Hälfte des Wertes haben

0.5
1
2
3
4
5
4
3
2
1

Wie stelle ich das am geschicktesten an?


Die zweite Frage ist, wie kann ich die blaue Kurve aus dem Anhang mitteln das sie weniger Ausschläge hat?

kurve.jpg
 Beschreibung:

Download
 Dateiname:  kurve.jpg
 Dateigröße:  120.36 KB
 Heruntergeladen:  419 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.02.2014, 22:28     Titel:
  Antworten mit Zitat      
Hallo,

zum ersten Problem: mir ist nicht klar, wie der zweite aus dem ersten Vektor erzeugt werden soll. Warum ist z.B. der erste Eintrag des neuen Vektors 0.5 und der zweite 1? Warum ist der zweite Vektor einen Eintrag kürzer?

Zum zweiten Problem:
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maverick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 24.02.2014, 08:34     Titel:
  Antworten mit Zitat      
Habe mich in der ersten beschreibung etwas falsch ausgedrückt bzw. einen Denkfehler gemacht. Die Kurve soll von der Steigung und Höhe um die Hälfte reduziert werden, allerdings im selben Punkt Starten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.02.2014, 09:50     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das richtig verstehe, passt es aber nicht zu deinem Beispiel.
In der Beschreibung widersprechen sich zudem "im selben Punkt starten" und "Höhe um 50% reduzieren".

Grüße,
Harald
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: 24.02.2014, 10:49     Titel:
  Antworten mit Zitat      
Hallo,

zum ersten Teil: du suchst vermutlich soetwas hier. Ich habe mal versucht, deine Daten in etwa nachzubauen, da ist ja ein Muster zu sehen.
Code:
x = 1:0.5:130;
y = 100*sin(x/150*pi) + rand(size(x))*3 - 3000;

ymin = min(y);
figure,plot(x,y),hold on
plot(x,(y-ymin)*0.8+ymin,'r')
plot(x,(y-ymin)*0.5+ymin,'r')
plot(x,(y-ymin)*0.3+ymin,'r')


Beim zweiten Teil mit dem Glätten, bin ich mir nich so richtig sicher. Durch das zero-padding an den Rändern liefert der Filter am Rand nichts schönes. Trick: Daten erst (so wie beim ersten Teil) verschieben, dass links der erste y-Wert die Null ist, dann filtern und wieder zurückverschieben. Ob das wirklich "erlaubt" ist, weiß ich aber nicht - viellleicht weiß Harald da ja etwas drüber und klärt uns beide auf Smile
Prinzipiell kannst Du aber einen einfachen moving average Filter benutzen, oder einen Tiefpassfilter, der die hohen Frequenzen (dein Rauschen) rausfiltert, benutzen. Da bin ich mir sicher. Zur Not kannst du dir auch schnell selbst einen Moving Average Filter schreiben, der kein Zeropadding macht, sondern die Fensterbreite am Rand anpasst und über weniger Werte mittelt.
Code:
% moving average filter
windowsize = 5;
plot(x,filter(ones(1,windowsize)/windowsize,1,y-ymin)+ymin,'k')

% low pass filter
a = 0.5/2;
plot(x,filter(a, [1 a-1], y-ymin)+ymin,'m')
legend('data','0.8','0.5','0.3','moving average','low pass filter')


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maverick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 26.02.2014, 14:21     Titel:
  Antworten mit Zitat      
Meine Kurven habe ich jetzt einfach mit stupider prozentualer multiplikation runtergerechnet X * 0.75 usw.

allerdings bekomme ich das mit dem Filter nicht hin. Meine Daten gehen von 10.8 bis -400.58 , nun weiß ich aber nicht wie ich den Filter so setzte, das ich eine einigermaßen "stabile" Kurve bekomme. Könnt ihr mir dazu was sagen? Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.02.2014, 14:57     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht hilft es, wenn du einen Plot der Daten anhängst.
Was verstehst du unter "stabil"?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maverick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 26.02.2014, 15:06     Titel:
  Antworten mit Zitat      
In meinem ersten Post befindet sich ein Plot der Daten. Mit stabil meine ich keine bzw. weniger Peaks in den oberen- sowie unteren Bereich
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.02.2014, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

... und was hast du mit filter versucht?
Ein gleitender Mittelwert (siehe Vorschlag von Nras) sollte hier ein guter Anfang sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maverick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 26.02.2014, 15:29     Titel:
  Antworten mit Zitat      
Am Vorschlag von Nras bin ich gescheitert, eigentlich muss ich doch nur das y durch meine Daten der y-Achse und das x durch meine Daten der x-Achse ersetzen? Aber es kommt immer die Fehlermeldung:

Error using min
Not enough input arguments.



Bin halt ein Anfänger mit Null Ahnung Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.02.2014, 21:37     Titel:
  Antworten mit Zitat      
Hallo,

damit wir dir bei der Fehlermeldung helfen können, müsstest du schon auch den Code posten, den du verwendet hast.
Der Code von Nras läuft ja. Das Problem muss also in einer Änderung liegen, die du gemacht hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maverick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 27.02.2014, 08:38     Titel:
  Antworten mit Zitat      
Guten Morgen,

habe einfach den Code von Nras verwendet und eine Matrix jeweils für die x und y Daten erstellt.
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: 27.02.2014, 08:54     Titel:
  Antworten mit Zitat      
Hallo,

das ganze hier könnte für alle viel angenehmer und schneller laufen, wenn du auf Bitten und Vorschläge reagierst. Poste doch einfach den Code, den du benutzt inklusive der auftretenden Fehlermeldungen und bestenfalls noch, in welcher Zeile der Fehler bei dir auftritt. Dann kann man das reproduzieren, was die Fehlerrsuche stark vereinfacht.

Eine mögliche Ursache: du hast in dieser folgenden Zeile statt ymin einfach nur min geschrieben:
Code:
plot(x,filter(a, [1 a-1], y-ymin)+ymin,'m')


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.02.2014, 08:55     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung legt nahe, dass du min ohne Eingabeargumente aufgerufen hast. Nras ruft min aber mit Eingabeargumenten auf.
Anscheinend hat sich bei dir also ein Fehler eingeschlichen. Um dir bei dessen Behebung helfen zu können, müssten wir aber genau wissen, was du gemacht hast - also bitte keine Beschreibung, sondern den Code. Ansonsten wird es schwierig bis unmöglich, dir weiterzuhelfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maverick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.11.13
Wohnort: Hessen
Version: R2013a
     Beitrag Verfasst am: 27.02.2014, 09:04     Titel:
  Antworten mit Zitat      
Hier ist der Code, von Nras, den ich genauso verwendet habe:

% moving average filter
windowsize = 5;
plot(x,filter(ones(1,windowsize)/windowsize,1,y-ymin)+ymin,'k')

% low pass filter
a = 0.5/2;
plot(x,filter(a, [1 a-1], y-ymin)+ymin,'m')
legend('data','0.8','0.5','0.3','moving average','low pass filter')

Fehlermeldung:

Undefined function or variable 'ymin'.

Did you mean:
EDU>> plot(x,filter(ones(1,windowsize)/windowsize,1,y-min)+min,'k')
Error using min
Not enough input arguments.
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.