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

logische Tabelle

 

noppoel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 27.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2011, 22:09     Titel: logische Tabelle
  Antworten mit Zitat      
Hallo zusammen!

Ich habe eine logische Tabelle die die mindestlaufzeiten bzw. mindesstopzeiten eines motors darstellen soll.
z.B.

1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0

Die Mindestlaufzeit beträgt genauso wie die mindeststopzeit 4 Spalten

In Zeile 1 läuft der Motor durch- ok.
In Zeile 2 sind nur 3 einsen hintereinander- d.h. die Mindestlaufzeit ist nicht erfüllt. Ich will also dass Matlab statt die bisherige Zeile 2 zu

1 1 1 1 0 0 0 0 0 0
ändert.
In Zeile 3 läuft der Motor für 4 Stunden- ok. Danach stoppt er- aber nur für 3 Stunden- nicht ok.

Richtig wäre also:
1 1 1 1 0 0 0 0 0 0

Zeile 4- ok. Motor steht.

Hat jemand ne Idee wie ich das programmieren könnte?

Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 11.07.2011, 11:14     Titel:
  Antworten mit Zitat      
Können ALLE logischen Zustände vorkommen und entspricht das Bsp. der tatsächlichen Matrixgröße (also 10 Spalten) ? Ist 1111000011 auch zulässig?

Du könntest zunächst alle 1 zählen und die Summe auf gerade/ungerade prüfen. Bei ungerade muss ja auf jeden Fall angepasst werden. Bei gerade nur dann, wenn nicht 4 fortlaufende Indizes bei den 1 Zuständen.
Private Nachricht senden Benutzer-Profile anzeigen
 
noppoel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 27.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2011, 17:13     Titel:
  Antworten mit Zitat      
Hi,

ja 1111000011 wäre auch zulässig.

Das mit zählen hab ich auch schon probiert. Mein Problem ist dass er nicht am Ende einer Zeile stoppt sondern in der nächsten Zeile weiterzählt bis eine 1 kommt.

Logic_commit = [1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 ]

Code:

Nzeros = 0;
B= zeros(size(Logic_commit));
A = Logic_commit;

c = 1;


for yy = 1:size(A,1)
    for ii = 1:size(A,2)
        if Logic_commit(yy,ii)==0;
            Nzeros = Nzeros+1;
            B(yy,ii) = Nzeros;
        else
            Nzeros = 0;
        end
    end
end
 


Irgendwelche Ratschläge?
Private Nachricht senden Benutzer-Profile anzeigen
 
noppoel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 27.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2011, 17:21     Titel:
  Antworten mit Zitat      
Nachtrag:

Die echte Matrix aht eine Grösse von 190x24
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.07.2011, 17:51     Titel:
  Antworten mit Zitat      
Du hast aber immer noch nicht beantwortet, ob alle Zustände möglich sind...
0001000000 z.B. Was soll da nachher rauskommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.07.2011, 21:56     Titel:
  Antworten mit Zitat      
Probier das mal...ich untersuche jetzt immer in einer Zeile 4er Päckchen. Ansonsten wären es einfach zu viele Fälle zu unterscheiden. Ich habe auch noch einen Hinweis bei der 2. for Schleife gegeben. Bei 190 musst du das Ende anpassen...ansonsten bekommst du einen Fehler, da auf Elemente außerhalb der Matrx zugegriffen wird.

Code:

B= zeros(size(Logic_commit));
A = Logic_commit;

for i = 1:size(A,1) % Zeilenanzahl
    % immer 4er Päckchen prüfen
    for j = 1:4:size(A,2) % 190 ist nicht durch 4 teilbar...für reale Größe der Matrix anpassen
        % finde alle Einträge ungleich 0 in der i. Zeile
        index=find(A(i,j:j+3));
        anzahl_einer = length(index);
        switch(anzahl_einer)
            case 1
                B(i,j:j+3) = 0;
            case 2
                B(i,j:j+3) = 1;
            case 3
                B(i,j:j+3) = 1;
            otherwise % alles ok -> kopiere A
                B(i,j:j+3) = A(i,j:j+3);
        end        
    end    
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 13.07.2011, 09:10     Titel:
  Antworten mit Zitat      
Ich habe vergessen zu erwähnen, dass ich Logic_commit jeweils um 2 Werte pro Zeile auf 12 erweitert habe, damit es glatt durch 4 geht.

Ist 190 die Zeilen- und 24 die Spaltenanzahl der Matrix? Dann geht es naturlich auf. Ich komme mit Zeilen und Spalten immer mal durcheinander.
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 13.07.2011, 10:52 Uhr von denny
Von Mathematik nach Programmierung
 
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.