|
|
Problem mit Funktion "scale" |
|
Danyo83 |

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 21.08.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.11.2010, 18:17
Titel: Problem mit Funktion "scale"
|
 |
Hallo Zusammen,
normalweise wenn man die Funktion "scale" benutzt gibt man eine range an auf welche der datensatz skaliert werden soll. Z.B. 100. Dann wird die Zeitreihe zwischen -100 und 100 skaliert. Wenn ich aber eine Finanzzeitreihe mit Wechselkursen habe mit einer Range von bspw. 1,3556 bis 1,3789 und diese dann skalieren will auf 100 und -100. liegen die WErte zwischen 95 und 100.
Weiss jemand wie ich diesen Fehler beheben kann?
Hintergrund ist, dass ich zwei Zeitreihen habe und ich diese auf ein einheitliches format skalieren muss um sie mit einander in beziehung setzen zu können.
Oder habt ihr eine andere Idee wie ich das lösen kann? Bin echt ratlos.
Hoff ihr könnt mir helfen
Besten dank!!!!!
Daniel
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.11.2010, 00:58
Titel: Re: Problem mit Funktion "scale"
|
 |
Hallo Danyo83,
Der Befehl "scale" gehört nicht zu einer Matlabtoolbox. Ich nehme an, die entsprechende Funktion hat entweder einen Bug, oder Du rufst sie falsch auf. Ohne Kristallkugel kann ich da keinen konkreten Ratschlag geben.
Schau Dir doch zuerstmal die Hilfe der Funktion an (hoffentlich vorhanden!): "help scale". Wenn das nicht hilft, lies mal den Inhalt der Funktion: "edit scale". Und wenn das immer noch nicht hilft, poste den relevanten Teil der Funktion und Deinen Aufruf.
Gruß, Jan
|
|
|
Danyo83 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 21.08.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2010, 03:07
Titel:
|
 |
Hi Jan,
danke für deine Antwort.
hier die Funktion:
% Skaliert einen Vektor auf +- scale
% Eingabe: vector = scale(vector,scale)
function [vector] = scale(vector,scale)
maximum = abs(max(vector));
minimum = abs(min(vector));
scaling_factor = 2 * scale/(maximum+minimum);
[n m] = size(vector);
for i = 1:n
vector(i) = vector(i)*scaling_factor - scaling_factor*maximum + scale;
end
scaledValue = 'scaledValue';
Für 'scale' setzte ich dann eben 100 ein. Dann skaliert das normalerweise von -100 bis 100.
Es funktioniert auf alle möglichen Funktionen aber eben nicht auf den Wechselkurs. Ich schicke ihn mal im Anhang mit. Falls du mal Zeit und Lust hast dran zu tüffteln.
Vielen Dank schon mal.
Daniel
Beschreibung: |
|
 Download |
Dateiname: |
Schlusskurse.xls |
Dateigröße: |
137 KB |
Heruntergeladen: |
354 mal |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.11.2010, 13:17
Titel:
|
 |
Hallo Danyo83,
Nein. Dieses Programm skaliert definitiv nicht auf [-scale, scale].
Versuche doch mal:
Ganz nebenbei ist die FOR-Schleife unnötig, weil Matlab mit Vektoren rechnen kann - gerade das ist seine Stärke.
Gruß, Jan
|
|
|
Danyo83 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 21.08.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2010, 19:23
Titel:
|
 |
Hi Jan,
danke dir für deine Antwort. Mag sein, dass die Funktion die die effizienteste ist aber normalerweise funktioniert sie. Auch mit deinem code komme ich auf genau das gleiche ergebnis. Hast du das mal mit der Exceltabelle versucht? Man erhält nur einen Vektor der aber von 95,8 bis 100 reicht
Hast du eine Idee?
Viele Grüße
Daniel
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.11.2010, 22:00
Titel:
|
 |
Hallo Daniel,
Zitat: |
danke dir für deine Antwort. Mag sein, dass die Funktion die die effizienteste ist aber normalerweise funktioniert sie. |
Ich würde von einer Funktion, die [1;2] nicht richtig skalieren kann, nicht gerade sagen, das sie "normalerweise funktioniert".
Dein "scale" scheitert immer dann, wenn alle Zahlen größer als 0 sind. Meine Idee ist also wie bereits angedeutet: Benutze eine Funktion die richtig skaliert!
Tip: In Deinem Code-Beispiel gibt es eine Funktion und eine Variable mit Namen "scale". Das funktioniert zwar, verwirrt aber unnötig.
Eine korrekt arbeitende Funktion wäre z.B.:
Gruß, Jan
|
|
|
Danyo83 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 21.08.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.11.2010, 23:51
Titel:
|
 |
Hi Jan,
besten Dank du bist ein Genie. Damit funktioniert es!!!
Gruß Daniel
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|