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

transiente Variablenpaare in Matrix zählen

 

Nena
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 12:25     Titel: transiente Variablenpaare in Matrix zählen
  Antworten mit Zitat      
Hallo,

ich möchte gerne eine Matrix erstellen die mir von zwei transienten Variablen die jeweils gleichen Wertepaarungen zählt und mir später eine prozentuale Darstellung der jeweiligen Wertepaarung liefert.
Beispiel:
Wertepaar 1 2 3 4 5 6 7 8 9 10
T 20 20 20 20 20 25 25 25 30 30
F 55 55 55 55 55 60 60 60 55 65
Das Skript sollte dann so eine Matrix ausrechnen:
F F F
M 55 60 65
T 20 5 0 0
T 25 0 3
T 30 1 0 1

Diese kann könnte ich dann in eine prozentuale Verteilung umrechnen.

Wie mache ich das am besten? Confused


LG Nena
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: 07.05.2015, 14:10     Titel: Re: transiente Variablenpaare in Matrix zählen
  Antworten mit Zitat      
Hallo Nena,

Deine Tabelle ist nicht lesbar. Versuche sie als Code zu formatieren. Vielleicht wird dann klar, was Du meinst und was M, T und F bedeutet.

Was hast Du bisher versucht und woran scheiterst du noch?

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 15:02     Titel:
  Antworten mit Zitat      
Hallo Jan,

Code:
%% Ableitung der T-F-Matrix
T=[20   20   20   20   20   25   25   25   30   30];
F=[55   55   55   55   55   60   60   60   55   65];


S=T;
S1=F;

% Variablenklassen für Matrixeintrag
Fe=[0:5:100];
% Temperatur
Te=[0:5:100]';

    f=length(Fe);
    t=length(Te);
    a=S;
    c=S1;    

    Werte{1,1}=a';
    Werte{1,2}=c';

    Werte=cell2mat(Werte);
    IND=isnan(Werte);
    Werte(IND==1)=[];
    for kk=1:length(Werte)
        if Werte(kk,2)>100
            Werte(kk,2)=100;
        end
        end
%Hier stimmt es nicht!
    M=zeros(t,f);
        for i=2:1:length(Werte)
            q=floor(Werte(i,1)/5)+1;
            r=floor(Werte(i,2)/5)+1;
            M(q,r)=M(q,r)+1;        
        end;


Code:
  %So Sollte es aussehen    
%         M=[5   0   0;
%            0   3   0;
%            1   0   1]


Ich hoffe jetzt ist es klarer.

Aktuell schreibt er nicht die richtige Anzahl der Wertepaarungen in das korrekte Matrixfeld.

Hast du eine Idee?

Grüße Nena

edit winkow: bitte verwende die code umgebung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.05.2015, 15:21     Titel:
  Antworten mit Zitat      
phu ok fangen wir mal oben an.
Code:
S=T;
S1=F;
wozu werden hier neue variablen erzeugt? hat das einen sinn? weder T noch F oder S oder S1 werden verändert. irgendwoe oder?
ok weiter
Code:
% Variablenklassen für Matrixeintrag
Fe=[0:5:100];
% Temperatur
Te=[0:5:100]';
 

wozu wird das gemacht? das scheint nirgends verwendung zu haben außer das die länge dieser vektoren bestimmt wird.. das kann man auch anders machen ohne die vectoren zu erzeugen.
Zitat:
a=S;
c=S1;

ok hier werden nochmal variablen erzeugt die wieder nicht verändert werden.... verwirrung zweiter stufe. jetzt sind die selben variablen schon unter 3 namen vorhanden.
Code:
Werte{1,1}=a';
    Werte{1,2}=c';
hallo hier kommt der 4. name.. allerdings wird es von matritzen in cell umgewandelt....
Code:
und wieder zurück.
alles könnte man druch
Code:
Werte=[T',F']
ersetzen.
Code:
IND=isnan(Werte);
    Werte(IND==1)=[];

das funktioniert hier wenn keine nan drin sind ... sonst führt das zu einer neu ordnung des vektors da nicht beide spalten unterschiedlich lang sein können. das sollte also nochmal überdacht werden.
Code:
for kk=1:length(Werte)
        if Werte(kk,2)>100
            Werte(kk,2)=100;
        end
        end

das kann man einfach durch logisches indizieren ersetzt werden.
außerdem würde ich nicht length verwenden sondern size mit dimensionsangabe. length gibt immer das größere aus.. das ist nicht immer das was man sucht.
Zitat:
Aktuell schreibt er nicht die richtige Anzahl der Wertepaarungen in das korrekte Matrixfeld.

was ist eine wertepaarung? das habe ich noch nicht verstanden und aus deinem code der das falsche macht kann ich leider nicht erkennen was das richtige ist. kannst du das nochmal genauer beschreiben ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 15:34     Titel:
  Antworten mit Zitat      
Ein Wertepaarung ist beispielsweise
T(1,1) und F(1,1)
oder
T(1,2) und F(1,2)

Alle Wertepaarungen die für T=20 und F=55 haben sollen aufaddiert werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.05.2015, 15:49     Titel:
  Antworten mit Zitat      
Code:
T=[20  15 20   20   20   20   25   25   25   30   30 10 15];
F=[55  55 55   55   55   55   60   60   60   55   65 20 55];
Werte=[T',F'];
[C,ia,ic] = unique(Werte,'rows');
nelements = hist(ic,1:numel(ia))

das könnte helfen. wie das jetzt in einer matrix angeordnet werden soll is mir aus deiner erklärung noch nicht klar geworden.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 16:19     Titel:
  Antworten mit Zitat      
Hallo Winkow,

ich hoffe das Bild hilft dir weiter , was ich meine.

Deine Rechnung geht schon in die richtige Richtung. Jetzt fehlt mir nur noch die richtige Darstellung in der Matrix.

Vielen Dank schon mal für dein Input.

TF_Matrix.jpg
 Beschreibung:

Download
 Dateiname:  TF_Matrix.jpg
 Dateigröße:  18.35 KB
 Heruntergeladen:  294 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.05.2015, 16:29     Titel:
  Antworten mit Zitat      
das ist viel eindeutiger. das bild hättest du gleich hochladen sollen.
Code:
T=[20   20   20   20   20   25   25   25   30   30];
F=[55   55   55   55   55   60   60   60   55   65];

Tu=unique(T)
Fu=unique(F)
M=nan(numel(Tu),numel(Fu));
for kk=1:numel(Tu)
    for ll=1:numel(Fu)
        M(kk,ll)=sum(T==Tu(kk) & F==Fu(ll))
    end
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 20:49     Titel:
  Antworten mit Zitat      
Hallo Winkow,


habe gerade noch einen Fehler in meinem ersten Beispiel entdeckt.
Dein Beispiel hat super funktioniert. Ich hatte aber vergessen, dass ich Sortierung ja eigentlich im Gesamtsystem brauche. Confused Confused

Wenn ich nun die Matrixinhalte in eine Gesamtmatrix bringen wie in angehängtem Bild. Wie mach ich das am besten?

Gesamt_TF_Matrix.png
 Beschreibung:

Download
 Dateiname:  Gesamt_TF_Matrix.png
 Dateigröße:  16.62 KB
 Heruntergeladen:  319 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Nena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2015, 20:27     Titel:
  Antworten mit Zitat      
Hallo,
hat mir vielleicht noch jemand eine Idee wie ich die Gesamtmatrix programmieren kann?
Vielen lieben Dank.

Nena
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.05.2015, 10:27     Titel:
  Antworten mit Zitat      
was hast du denn versucht? du weist ja wo die matrix in der großen matrix hinsoll weil du ja die eckpunkte kennst. was klappt also nicht?
code beispiel fehlermeldung etc.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2015, 12:48     Titel:
  Antworten mit Zitat      
Hallo Winkow,

ich brauche als Endresultat eine 21X21 Matrix,

mit folgendem Code schreibt er mir zwar die Wertepaare an den Anfang der Matrix, dort gehören sie aber nicht hin. Sad

M soll sozusagen über Fe und Te aufgespannt werden und die Wertekombinationen von T und F wiederspiegeln.

Code:
T=[20   20   20   20   20   25   25   25   30   30];
F=[55   55   55   55   55   60   60   60   55   65];


% TF_gesamt
Fe=[0:5:100];
% Tgesamt
Te=[0:5:100]';

    f=length(Fe);
    t=length(Te);
   
Tu=unique(T)
Fu=unique(F)

M=zeros(t,f);
% M=nan(numel(Tu),numel(Fu));
for kk=1:numel(Tu)
    for ll=1:numel(Fu)
        M(kk,ll)=sum(T==Tu(kk) & F==Fu(ll))
    end
end
 


Vielen Dank schon mal für deine Idee.
Ich steh gerade programmiertechnisch voll auf dem Schlauch.

Grüße

Nena
edit winkow: code umgebung verwenden
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.05.2015, 12:55     Titel:
  Antworten mit Zitat      
dann musst du entweder die kleine matrix an die stelle in der großen einfügen so wie ich schon gesagt habe. oder du lässt die schleife über deine fe und te laufen anstatt über tu und fu das ist allerdings wahrscheinlich langsamer. bei 21 elementen ist das aber nicht so problematisch. man könnte auch mit arrayfun arbeiten denke ich aber das spaart nich wirklich zeit. und cih wiederhole mich nochmal... bitte verwende die code umgebung.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nena
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2015, 21:52     Titel:
  Antworten mit Zitat      
Very Happy jetzt hat es geklappt. Nochmals vielen Dank für die super Tips.Schönes Wochenende.
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.