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

Problem mit Funktion "scale"

 

Danyo83
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2010, 18:17     Titel: Problem mit Funktion "scale"
  Antworten mit Zitat      
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
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: 06.11.2010, 00:58     Titel: Re: Problem mit Funktion "scale"
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Danyo83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2010, 03:07     Titel:
  Antworten mit Zitat      
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

Schlusskurse.xls
 Beschreibung:

Download
 Dateiname:  Schlusskurse.xls
 Dateigröße:  137 KB
 Heruntergeladen:  354 mal
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: 06.11.2010, 13:17     Titel:
  Antworten mit Zitat      
Hallo Danyo83,
Zitat:
Code:

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';  % Unnötig?!
 

Nein. Dieses Programm skaliert definitiv nicht auf [-scale, scale].
Versuche doch mal:
Code:

scale(1, 100)  % >> [100], ok
scale(transpose([1, 2]), 100)  % >> [33.33333, 100] ????
scale(transpose([-1, 1]), 100)  % >> [-100, 100] ok
 

Ganz nebenbei ist die FOR-Schleife unnötig, weil Matlab mit Vektoren rechnen kann - gerade das ist seine Stärke.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2010, 19:23     Titel:
  Antworten mit Zitat      
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 Sad
Hast du eine Idee?

Viele Grüße

Daniel
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: 06.11.2010, 22:00     Titel:
  Antworten mit Zitat      
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.:
Code:

function Y = Scale(X, Range)
minX = min(X(:));
maxX = max(X(:));
Y = (2 * Range / (maxX - minX)) * (X - minX) - Range;
return;
 

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2010, 23:51     Titel:
  Antworten mit Zitat      
Hi Jan,

besten Dank du bist ein Genie. Damit funktioniert es!!!

Gruß Daniel
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.