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

Intervallgrenzen mithilfe zweier Vektoren

 

pescatore265
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 15:21     Titel: Intervallgrenzen mithilfe zweier Vektoren
  Antworten mit Zitat      
Moin,

ich versuche gerade aus zwei Vektoren Intervallgrenzen zu generieren.
Als kleines Beispiel:

V1 = [ 30; 40; 55; 65]
V2 = [ 60; 50 ; 70; 90]

Meine gewünschten Intervallgrenzen in diesem Beispiel wären jetzt:

[30, 40]
[40, 55]
[50, 55]
[55, 60]
[60, 65]
[65, 70]
[70, 90]

Kann mir jemand, bei der Umsetzung helfen. Ich hantiere hier mit for und if Schleifen, komme aber zu gar nichts.

Bin über jeden noch so kleinen Tipp dankbar !

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


pescatore265
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 15:24     Titel:
  Antworten mit Zitat      
bei der einen Grenze hat sich leider ein Fehler eingeschlichen.
[40,50] sollte das sein Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Flo310790
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 15:33     Titel:
  Antworten mit Zitat      
hi,
also ich hoff ich hab richtig verstanden was du machen willst

wie wäre es alle vorhandenen intervallgrenzen in einen vektor zu packen diesen dann aufsteigend sortieren und dann mit "benachbarten" intervallgrenzen zweierpaare bilden...
Private Nachricht senden Benutzer-Profile anzeigen
 
pescatore265
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 15:40     Titel:
  Antworten mit Zitat      
Moin,

danke erstmal Smile

Ich könnte das bestimmt so machen, wie du das sagt, aber das ist dann ja quasi manuell, weil ich nach deiner Variante selbst die Intervalle erkennen muss, um sie dann einzutragen oder ?

Mein Ziel ist es das Ganze zu automatisieren. Das Beispiel war gerade nur aus der Luft gegriffen. Ich versuche ein Programm zu schreiben, dass ich zwei beliebige Vektoren, die in meinem Fall Temperaturen enthalten, mit beliebiger Länge und beliebigen Einträgen an das Programm übergebe und mir dieses dann die Intervallgrenzen, wie sie in meinem Beispiel aussehen, generiert.

Ich hoffe, ich habe mich jetzt verständlicher ausgedrückt Laughing

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Flo310790
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 15:52     Titel:
  Antworten mit Zitat      
ja aber das sollte doch auch für beliebig lange vektoren gehen
[a_1,.....,a_m]

[b_1,....,b_n]

nach größe sortieren und in einem vektor

[c_1,.....,c_m+n]

und intervalle sind dann
[c_1 c_2]
[c_2 c_3]
...
[c_m+n-1 c_m+n]
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: 05.11.2014, 15:53     Titel:
  Antworten mit Zitat      
Hallo,

Hatte die selbe Idee wie Flo. So könnte man es machen:
Code:
V1 = [ 30; 40; 55; 65];
V2 = [ 60; 50 ; 70; 90];

V = sort([V1; V2]);

V_neu(:,1) = V(1:size(V,1)-1);
V_neu(:,2) = V(2:size(V,1));


Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Flo310790
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 15:55     Titel:
  Antworten mit Zitat      
das mit dem sort wollt ich grad noch ergänzen Wink

und falls temperaturen evtl doppelt auftauchen könnten man das wohl mit unique lösen

mfg
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: 05.11.2014, 16:03     Titel:
  Antworten mit Zitat      
Stimmt, dazu einfach in Zeile 4 ergänzen
Code:
V = unique(sort([V1; V2]));

_________________

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 16:07     Titel:
  Antworten mit Zitat      
Danke sehr !

Hat super funktioniert ! Und ich vertreibe mir die Zeit mit unnötigen Schleifen Laughing

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
pescatore265
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 16:39     Titel:
  Antworten mit Zitat      
Es hat fast alles super geklappt Smile

Der Befehl unique() verursacht bei mir einen Fehler. Könnt ihr mir sagen, weshalb ?

Code:


Matrix_Temp_HS = unique(sort([T_Output_HS ; T_Input_HS]))

Matrix_Temp_HS_neu(:,1)= Matrix_Temp_HS(1:size(Matrix_Temp_HS,1)-1)
Matrix_Temp_HS_neu(:,2)= Matrix_Temp_HS(2:size(Matrix_Temp_HS,1))

 


Matrix_Temp_HS =

40
45
60
160
220
327

??? Subscripted assignment dimension mismatch.

Error in ==> ProgrammBa at 88
Matrix_Temp_HS_neu(:,1)= Matrix_Temp_HS(1:size(Matrix_Temp_HS,1)-1)


Die Matrix ohne unique() sieht wie folgt aus:

Matrix_Temp_HS =

40
45
60
160
160
220
220
327

Allerdings erhalte ich dann überflüssige Intervalle wie [160,160] und [220,220]

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Flo310790
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 17:22     Titel:
  Antworten mit Zitat      
also ich hab das mit zwei zufallsmatrizen laufen lassen
T_Output_HS = rand(10,1);
T_Input_HS = rand(8,1);

da funktionierts...

hast du vllt einen zeilenvektor als eingabe ?


hast recht hab ma en beispiel mit gleichen Zahlen laufen lassen... ich gehs ma durch
Private Nachricht senden Benutzer-Profile anzeigen
 
pescatore265
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 17:29     Titel:
  Antworten mit Zitat      
ne, sind beides Spaltenvektoren.

btw warum brauche ich einmal "-1" ?

Matrix_Temp_HS_neu(:,1)= Matrix_Temp_HS(1:size(Matrix_Temp_HS,1)-1)

Ich habe jetzt versucht, über Schleifen die überflüssigen zeilen zu löschen. Matlab löscht die auch und zeigt mir die gewünschte Matrix an, schmeißt mir aber trotzdem eine Fehlermeldung aus.

Code:


Matrix_Temp_HS = sort([T_Output_HS ; T_Input_HS])

Matrix_Temp_HS_neu(:,1)= Matrix_Temp_HS(1:size(Matrix_Temp_HS,1)-1)
Matrix_Temp_HS_neu(:,2)= Matrix_Temp_HS(2:size(Matrix_Temp_HS,1))

Laenge_Matrix_Temp_HS_neu = length(Matrix_Temp_HS_neu)

for i = 1 : 1 :Laenge_Matrix_Temp_HS_neu
   
    if Matrix_Temp_HS_neu(i,1)== Matrix_Temp_HS_neu(i,2)
       
        Matrix_Temp_HS_neu(i,:)= []
       
    end
   
end

 


Matrix_Temp_HS_neu =

40 45
45 60
60 160
160 220
220 220
220 327


Matrix_Temp_HS_neu =

40 45
45 60
60 160
160 220
220 327

??? Index exceeds matrix dimensions.

Error in ==> ProgrammBa at 95
if Matrix_Temp_HS_neu(i,1)== Matrix_Temp_HS_neu(i,2)
Private Nachricht senden Benutzer-Profile anzeigen
 
Flo310790
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 17:34     Titel:
  Antworten mit Zitat      
das -1 brauchst du damit du in der ersten spalte nur bis zum vorletzten eintrag gehst weil der letzte ja keine vordere intervallgrenze sein kann

bei der spalte fängst du dafür bei 2 an weil der erste eintrag ja keine hintere grenze sein kann

also ich ahb das jetzt alles nochmal laufen lassen und bei mir geht es ?! kann es sein das in deinem workspace noch was gestand was des ganze durcheinander gebracht hat ?
ist nämlcih bei mir der fall wenn ich den workspace nicht lösch und dann andere matrizen verwende kommt bei mir der fehler
Code:

T_Output_HS = [30;40;50;90];
T_Input_HS = [30;50;90;100;120];
Matrix_Temp_HS = unique(sort([T_Output_HS ; T_Input_HS]));

Matrix_Temp_HS_neu(:,1)= Matrix_Temp_HS(1:size(Matrix_Temp_HS,1)-1);
Matrix_Temp_HS_neu(:,2)= Matrix_Temp_HS(2:size(Matrix_Temp_HS,1)) ;

 

funktioniert mit leerem workspace
Private Nachricht senden Benutzer-Profile anzeigen
 
pescatore265
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 04.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 17:38     Titel:
  Antworten mit Zitat      
alles klar, danke für die Erklärung Smile

Und das Löschen des Workspaces hat es auch gebracht. Super!

Vielen lieben Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Flo310790
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 06.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 17:43     Titel:
  Antworten mit Zitat      
also ich hab denk ich den fehler...
falls du Matrix_Temp_HS_neu nicht löscht hat die ja eine gewisse größe..
falls du dann eine neue eingabe machst versucht das programm diese in die alte Matrix zu schreiben.... und dann kommt der fehler mit den unterschiedlichen größen..

meine idee wäre es die matrix mateix_temp_hs_neu mit nullen der entsprechenden größe vorzubelegen

Code:

Matrix_Temp_HS_neu = zeros(size(Matrix_Temp_HS,1)-1,2);
Matrix_Temp_HS_neu(:,1)= Matrix_Temp_HS(1:size(Matrix_Temp_HS,1)-1);
Matrix_Temp_HS_neu(:,2)= Matrix_Temp_HS(2:size(Matrix_Temp_HS,1)) ;
 
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.