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

Interpolation

 

cordman
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2013, 21:29     Titel:
  Antworten mit Zitat      
Ich stehe gerade vor der gleichen Aufgabe und habe mir die Berechnung einmal "nachgebaut" (hätte es nett gefunden wenn du die komplette Lösung einmal gepostet hättest - so läuft es ja normalerweise hier).

Vielleicht verstehe ich es nicht richtig aber eigentlich sollten es doch nach Durchlauf des Programms weniger 15-Minuten-Mittelwerte als 10-Minuten-Mittelwerte sein, oder!? Sind es aber natürlich nicht wenn die Schleife 52560 mal durchläuft.. Aber irgendwie weiß ich auch nicht was ich ändern muss Wink

Hier der Code und im Anhang die Beschreibung bzw. Daten:

Code:

% Winddaten in 10-Minuten-Auflösung <52560x1 double>
Winddaten_10 = rand(5260,1);
% Vektor für Winddaten in 15-Minuten-Auflösung
Winddaten_15 = [];

% Berechnung
for n=1:1:size(Winddaten_10,1)-1    
    gm = abs((mod(2*m(n),3))-1)+1;
    gm1 = abs((mod(2*m(n+1),3))-1)+1;    
    n    
    t15 = (Winddaten_10(n,1)*gm + Winddaten_10(n+1,1)*gm1)/3    
    Winddaten_15 = vertcat(Winddaten_15,t15);
end
 


Hier die Funktion m.m:

Code:

function [ rueckgabewert ] = m( n )
    rueckgabewert = ((3*n + mod(n, 2)) / 2) - 1;
end
 


Ich glaube ich sehe gerade den Wald vor lauter Bäumen nicht mehr Wink
Kann mir jemand helfen?

Quelle_dena_Mittelwertbildung.JPG
 Beschreibung:

Download
 Dateiname:  Quelle_dena_Mittelwertbildung.JPG
 Dateigröße:  109.84 KB
 Heruntergeladen:  370 mal
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 12.02.2013, 11:50 Uhr von Jan S
Von Beitrag 10-minuten in 15-minuten Werte (Wind, etc) umrechnen aus dem Forum Programmierung


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.02.2013, 12:03     Titel:
  Antworten mit Zitat      
Hallo cordman,

Bitte öffne für eione neue Frage ein neues Thema. Wenn Du das andere Thema passend findest, wäre ein Link dorthin sinnvoll: http://www.gomatlab.de/10-minuten-i.....etc-umrechnen-t19807.html
Das Anhängen einer neuen (auch ähnlichen) Frage nennt man Thread-Highjacking und es macht den "beantwortet"-Status sinnlos und erhöht den Konfusionslevel, weil keiner mehr weiß, ob die Orginal-Frage oder die neue Frage beantwortet wird.

Ich kann eine solche Formel nicht nachvollziehen:
Code:
gm = abs((mod(2*((3*n + mod(n, 2)) / 2) - 1,3))-1)+1;

Ohne Frage erschlägt mich der Komplexitätsgrad, obwohl die eigentliche Berechnung sicherlich einfach ist.

Was genau ist Deine Frage?
Du hast Daten mit einer Auflösung von 10 Minuten und möchtest per linearer Interpolation Daten mit 15 Minuten Auflösung erhalten? Neben INTERP1, ging dies auch per Hand:

Code:
% Winddaten in 10-Minuten-Auflösung <52560x1 double>
Winddaten_10 = rand(52560, 1);
a = Winddaten_10(1:3:end);  % matching times
b = 0.5 * (Winddaten_10(2:3:end) + Winddaten_10(3:3:end));
c = [a.', b.'];
Winddaten_15 = c(:);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 12:32     Titel:
  Antworten mit Zitat      
Moin Jan,

danke für deinen Vorschlag!

Das mit dem Thread-Hijacking verstehe ich aber da ich 1:1 das machen möchte was der "Eröffner" des Threads wollte (ohne Änderung der Aufgabenstellung), nämlich einfach 10-Minuten-Mittelwerte in 15-Minuten-Mittelwerte umrechnen, macht es meiner Meinung nach keinen Sinn dafür einen neuen Thread zu eröffnen. Das wäre dann ja unnötige Redundanz.. Am besten wäre es meiner Meinung nach gewesen wenn er einfach seine Lösung gepostet hätte. Dann hätte ich garnicht Fragen müssen..

Nun denn - ich will hier auch keinen Flamewar starten, sondern bin froh, dass du mir helfen möchtest Wink

Also die Aufgabenstellung ist 1:1 das zu tun was in der Dena Netzstudie (siehe http://www.dena.de/fileadmin/user_u.....ht_dena-Netzstudie_II.pdf S. 109 im PDF oder JPG in meinem letzten Post steht), nämlich aus den 10-Minuten-Mittelwerten gewichtete 15-Minuten-Mittelwerte zu berechnen. Eigentlich ist die Iterationsvorschrift ja schon gegeben. Auf die schnelle würde ich sagen, dass das nicht einer linearen Interpolation entspricht. Aber da will ich mich nicht festlegen Smile


Ich glaube auch, dass ich es mittlerweile habe lösen können. Hier mal mein Code:

Code:

clc
clear all

% Winddaten in 10-Minuten-Auflösung <52560x1 double>
Winddaten_10 = [1:1:52560]';

% Vektor für Winddaten in 15-Minuten-Auflösung
Winddaten_15 = [];

% Berechnung der gewichteten 15-Minuten-Mittelwerte
for n=1:1:size(Winddaten_10,1)
    gm = abs((mod(2*m(n),3))-1)+1;
    gm1 = abs((mod(2*(m(n)+1),3))-1)+1;    
    %Testausgabe = [n,Winddaten_10(m(n),1),Winddaten_10(m(n)+1,1)]
    t15 = (Winddaten_10(m(n),1)*gm + Winddaten_10(m(n)+1,1)*gm1)/3;
    Winddaten_15 = vertcat(Winddaten_15,t15);
end
 


Die Funktion m(n) ist folgendermaßen aufgebaut und sollte auch richtig sein:

Code:

function [ rueckgabewert ] = m( n )
    rueckgabewert = ((3*n + mod(n, 2)) / 2) - 1;
end
 


Das einzige Problem ist, dass im letzten Durchlauf noch einmal auf das "m(n)+1"-te Element aus Winddaten_10[] zugegriffen wird. Aber das sollte ja nicht weiter stören..

Könnte soweit richtig sein, oder!?

Danke schon mal!

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
cordman
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 17:09     Titel:
  Antworten mit Zitat      
So, nun funktioniert es auch ohne Fehler! Da m aus n generiert wird darf die Schleife nur bis zur Zeilenanzahl des Viertelstundenvektors laufen..

Hier nochmal der Code des Programms:

Code:

clc
clear all

% Winddaten in 10-Minuten-Auflösung <52560x1 double>
%Winddaten_10 = [1:1:6*24*365]';
load('Winddaten_10.mat');

% Vektor für Winddaten in 15-Minuten-Auflösung
Winddaten_15 = zeros(4*24*365,1);

% Berechnung der gewichteten 15-Minuten-Mittelwerte
for n=1:1:size(Winddaten_15,1)
    % Gewichtung
    gm = abs((mod(2*m(n),3))-1)+1;
    gm1 = abs((mod(2*(m(n)+1),3))-1)+1;
    % Errechneter Wert im jeweiligen Schritt
    t15 = (Winddaten_10(m(n),1)*gm + Winddaten_10(m(n)+1,1)*gm1)/3;
    % Errechneten Wert in Vektor speichern
    Winddaten_15(n,1) = t15;
    %Ausgabe_der_Parameter = [n,m(n),m(n)+1,Winddaten_10(m(n),1),gm,Winddaten_10(m(n)+1,1),gm1]
end
 


und der Funktion m(n):

Code:

function [ rueckgabewert ] = m( n )
    rueckgabewert = ((3*n + mod(n, 2)) / 2) - 1;
end
 


Trotzdem danke!
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: 12.02.2013, 17:20     Titel:
  Antworten mit Zitat      
Hallo cordman,

Nach 1.5 Jahre wird der Autor des alten Threads wohl nicht mehr reagieren.
Danke, dass Du versucht hast Redundanz zu vermeiden! Und ich stimme Dir zu, dass es immer sehr hilfreich ist, wenn die Fragenden die Lösung posten.

Bemerkung: "clear all" löscht alle Funktionen aus dem Speicher und das Nachladen von der Festplatte verbraucht viel Zeit. Wenn Du die Variablen löschen möchtest, hilft "clear" oder "clear variables".

Wenn ich die Tabelle aus dem geposteten Bild richtig verstehe:
Code:
W_10 = (1:52560)';
n_10 = length(W_10);
n_15 = n_10 * 3 / 4;  % !!! BUG, siehe folgende Antwort !!!
W_15(1:2:n_15) = (W_10(1:3:n_10) * 2 + W_10(2:3:n_10)) / 3;
W_15(2:2:n_15) = (W_10(2:3:n_10) + W_10(3:3:n_10) * 2) / 3;

Gibt dies das gleiche Ergebnis? Dann könnte man sich das Gezwitscher mit den MOD-Operatoren sparen...
Wenn n_15 kein Integer ist, müsste man n_10 einfach verkleinern - der letzte Wert ist dann sowieso nicht mehr vorschriftsmäßig zu berechnen.

Gruß, Jan

Zuletzt bearbeitet von Jan S am 13.02.2013, 15:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
cordman
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 18:56     Titel:
  Antworten mit Zitat      
Danke für den Tipp! Habe ich gleich mal geändert. Bin noch nicht so lange mit MATLAB unterwegs..

Nee, bei deinem Code kommt nur eine Fehlermeldung. Ist aber auch egal denn ich habe ja meine Lösung und vor allem mit seriöser Quelle auf die ich verweisen kann. Letztendlich ist mir auch nicht wichtig wie elegant die Berechnung gelöst ist sondern dass ich schnell mit den Resultaten weiterarbeiten kann Wink
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: 13.02.2013, 15:41     Titel:
  Antworten mit Zitat      
Hallo cordman,

Oh, da blutet mein Programmierer-Herz. Ich finde den angegebenen Algorithmus so verwurstet, dass ich die Quelle auf keinen Fall las "seriös" betrachten kann.

Ja, es gibt tatsächlich eine Fehlermeldung, da der Code einen Bug enthält:
Code:
W_10 = (1:52560)';
n_10 = length(W_10);
% n_15 = n_10 * 3 / 4; FALSCH!!!
n_15 = n_10 * 2 / 3;
W_15(1:2:n_15) = (W_10(1:3:n_10) * 2 + W_10(2:3:n_10)) / 3;
W_15(2:2:n_15) = (W_10(2:3:n_10) + W_10(3:3:n_10) * 2) / 3;

Du hattest am Anfang des Thread betont, dass es praktisch wäre, wenn der Code gepostet würde, der das Problem löst. Die geschachtelten MOD-Aufrufe halte ich aber für keine nachvollziehbare Lösung, sondern für einen ineffizienten Hirnverzwirner. Ich finde, ganz schön eitel, dass mein Code leichter zu debuggen und zu verstehen ist. Auf alle Fälle läuft er deutlich schneller. Und es wäre doch sinnlos, Windenergie-Anlagen zu optimieren, und dafür Atomstrom zu verschleudern, oder?
Und seriös bin ich auch, ehrlich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 13.02.2013, 19:25     Titel:
  Antworten mit Zitat      
Sorry for off-topic:

Jan S hat Folgendes geschrieben:
Ich finde, ganz schön eitel, dass mein Code leichter zu debuggen und zu verstehen ist. Auf alle Fälle läuft er deutlich schneller. Und es wäre doch sinnlos, Windenergie-Anlagen zu optimieren, und dafür Atomstrom zu verschleudern, oder?
Und seriös bin ich auch, ehrlich.

<3
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
cordman
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2013, 11:02     Titel:
  Antworten mit Zitat      
Ich bin mir nicht sicher ob der Code wirklich das gleiche macht die der aus der Studie. Wobei er zunächst einmal auf jeden Fall eleganter aussieht Wink

Habe aber auch keine Lust das noch auszuprobieren, da ich wie gesagt mein Ziel schon erreicht habe Razz
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: 15.02.2013, 01:00     Titel:
  Antworten mit Zitat      
Hallo cordman,

Aber ich habe es ausprobiert: Mein Code erzeugt das exakt gleiche Ergebnis.
Laufzeit des Orginal-Codes mit den MOD-Befehlen: 0.169 sec
Laufzeit mit meinem Code: 0.0018 sec

Natürlich werfen Dich 0.167 Sekunden Dich in Deinem Projekt nicht arg zu weit zurück. Aber ein Speedup von 100 ist doch nicht schlecht, oder?

@Seban:
Unter http://en.wikipedia.org/wiki/List_of_emoticons wird "<3" als "Herz" erklärt. Nun, Du hast die Antwort ja bereits als Off-Topic erklärt... ;-)
Seriös bin ich übrigens wirklich - ich trage zur Zeit noch nicht mal einen Doktortitel.

Gruß, Jan
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.