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

Vektor Länge ändert sich nach Berechnung

 

metalphony
Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 06.01.2014, 11:30     Titel: Vektor Länge ändert sich nach Berechnung
  Antworten mit Zitat      
Guten Morgen,
ich habe einen Vektor "gemessene_werte.fp" der länge 1-601.
Aus diesem berechne ich folgendermaßen einen Gradienten-Vektor :
Code:
gradient_fahrpedal_vektor = diff(gemessene_werte.fp)./0.01;

das Ergebnis passt soweit, jedoch ist der "gradient_fahrpedal_vektor" nicht mehr wie der "gemessene_werte.fp" 601 indices lang (1-601), sondern nur noch 600 (1-600). Siehe Bilder...
Woran liegt dass? Wie bekomme ich es hin dass nach der Gradientberechnung der gradient_fahrpedal_vektor genauso lang ist wie der Vektor (gemessene_werte.fp) aus dem dieser berechnet wurde?

gradient_fahrpedal.png
 Beschreibung:

Download
 Dateiname:  gradient_fahrpedal.png
 Dateigröße:  65.6 KB
 Heruntergeladen:  387 mal
fp_neu.png
 Beschreibung:

Download
 Dateiname:  fp_neu.png
 Dateigröße:  55.91 KB
 Heruntergeladen:  396 mal
Private Nachricht senden Benutzer-Profile anzeigen


metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 06.01.2014, 11:37     Titel:
  Antworten mit Zitat      
OK. Hab gerade selbst verstanden dass die Verkürzung des Vektors an der diff-Funktion liegt...ist ja auch logisch. Aber wie könnte ich meine Berechnung anpassen sodass der Gradient-Vektor ebenfalls die Länge 601 besitzt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.01.2014, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

diff berechnet die Differenz aufeinanderfolgender Werte. Da es zum ersten Wert keinen vorhergehenden Wert gibt, fehlt diese Differenz quasi.

Wenn eine Ableitung angenähert werden soll, würde ich das hier so machen:
Code:
dy = zeros(size(y));
dy(1) = (y(2)-y(1))/0.01; % Vorwärtsdifferenz
dy(2:end-1) = (y(3:end) - y(1:end-2))/(2*0.01); % zentraler Differenzenquotient
dy(end) = (y(end)-y(end-1))/0.01; % Rückwärtsdifferenz


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

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 06.01.2014, 11:47     Titel:
  Antworten mit Zitat      
hmm...verstehe die Methode leider nicht so ganz.
Gibts denn eine Möglichkeit den Ursprungsvektor vor der Berechnung um einen Indize vorne, also 0-601 buw. hinten 1-602 zu ergänzen? Wäre für die Auswertung nicht von Bedeutung!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.01.2014, 12:36     Titel:
  Antworten mit Zitat      
Hallo,

wird ausführlich hier beschrieben
http://de.wikipedia.org/wiki/Differenzenquotient
(insbesondere der Unterpunkt "Varianten")

Kurzzusammenfassung: zentrale Differenzenquotienten bieten bessere Annäherungen an die Ableitung als einseitige. An den Randpunkten ist aber nunmal nach außen kein weiterer Punkt verfügbar, also nimmt man dort den einseitigen Differenzenquotient.

Natürlich kannst du irgendeinen mehr oder weniger sinnvollen Wert an die Daten anhängen. Mein Vorschlag sollte jedoch genauer sein.

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

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 06.01.2014, 12:52     Titel:
  Antworten mit Zitat      
Danke! Aber wie genau kann ich denn Werte im Nachhinein einfügen? Wie könnte ich z.B den Indize "0" einfügen? Wenn das möglich wäre, könnte ich diesen mit einer 0 belegen. Das würde dass Ergebnis nicht verfälschen weil die Messung bzw. der Vektor eh mit 0 anfängt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.01.2014, 13:02     Titel:
  Antworten mit Zitat      
Hallo,

z.B.
Code:
dy = [0, dy];

oder
Code:
dy = [dy, 0];

Dadurch ergibt sich zwar dann keine Verfälschung, aber eine Verschiebung zu x- bzw. Zeitwerten.

Was die meines Erachtens beste Lösung wäre, habe ich ja schon gesagt.

Grüße,
Harald
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 - 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.