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

Überprüfung der Werte

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 12:00     Titel: Überprüfung der Werte
  Antworten mit Zitat      
Hallo,
ich möchte gerne einen Code schreiben.

Dabei möchte ich 1000 randomisierte double Werte erzeugen. Beispielsweise von -30,0 bis +30,0 und anschließend möchte ich drei Regeln aufstellen:

Erste Regel: Es dürfen vier Werte nicht hintereinander stehen.

Zweite Regel: Die Werte dürfen nicht außerhalb der definierten Schranken liegen, beispielsweise -28,0 und +28,0.

Dritte Regel: Die Differenz der aufeinanderfolgenden Werte darf nicht fünf und mehr betragen.

Diese Regeln sollen mittels Flags markiert werden, damit eingetroffenen Regeln beim Plotten markiert dargestellt werden.

Gerne wollte ich noch meinen Matlab Code modular aufbauen, so dass ich beispielsweise die Regeln hintereinander mit mehreren Werten prüfen kann.

Die Werte für die Regeln sollen als Übergabeparameter mitgegeben werden:

Beispielsweise:
test(randomReihe, ersteRegelnParameter, zweiteRegelParameter1, zweiteRegelParameter2, dritteRegelParameter,)
test(reihe, 4, -28.0, +28.0, 5)

Mit
Code:
r = a + (b-a).*rand(100,1); %hiermit geht das nicht
konnte ich auch nicht die Reihe erzeugen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 05.03.2013, 15:41     Titel:
  Antworten mit Zitat      
Der RAND Befehl sieht eigentlich i.O. aus.

Die erste Regel verstehe ich nicht.

Die Zweite würde ich so implementieren

Code:

r=[-29 27 2 27 29] % Beispielvektor
ix2=(r>28 | r<-28)
 


Die Dritte
Code:


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 17:25     Titel:
  Antworten mit Zitat      
Danke, hättest du vielleicht einen Vorschlag. ich habe es versucht mit der gegebenen Formel, jedoch ohne Erfolg und wie schaut es mit den Flags bzw. Markierungen aus, kannst du mir was vorschlagen.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 05.03.2013, 17:49     Titel:
  Antworten mit Zitat      
Bevor es an die Visualisierung geht würde ich erstmal die Regeln implementieren. Am Besten das mal versuchen und den Schritt hier nochmal posten.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2013, 13:44     Titel:
  Antworten mit Zitat      
Code:
r = a + (b-a).*rand(100,1); %hiermit geht das nicht


die grenzen -30 und +30 klappt nicht, habe es ausprobiert

Code:
r = 30 + (0).*rand(1000,1);
 r = -30 + (0).*rand(1000,1);


kann das einer mal ausprobieren
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 06.03.2013, 15:47     Titel:
  Antworten mit Zitat      
Code:

r=60*rand(100,1)-30
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2013, 19:09     Titel:
  Antworten mit Zitat      
Ach übrigens, bei der ersten regel sollen 4 Werte nicht gleichzeitig hintereinander stehe. Sobald es eintrifft, soll das auch als Fehler markiert werden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2013, 19:34     Titel:
  Antworten mit Zitat      
sorry vier gleiche werte, beispielsweise

... 12,1 12,1 12,1 12,1 ....so soll dieser bereich markiert werden..
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2013, 19:45     Titel:
  Antworten mit Zitat      
Also naja es ist mir noch ein Rätsel, wie ich das mit den flags maxhen soll,

ich habe drei flags, die ich später durch drei unterschiedliche farben beim plotten darstellen möchte...

soll ich für jede regel immer die reihe mit schleife durchlaufen und mit if konstrukten abprüfen..

so wäre es glaub ich ineffizient.
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 07.03.2013, 00:06     Titel:
  Antworten mit Zitat      
Hi,

Schau dir mal
Code:
an. Das kann man auch für Zahlenwerte verwenden. Hier im Forum findest du dazu auch Beispiele.

Grüße,
Seban

PS. Bitte die Code-Umgebung nutzen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 13:05     Titel:
  Antworten mit Zitat      
wie soll es denn mit
Code:
gehen, es kann ja nur die pattern finden, ich will es ja ganz variable machen.
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 07.03.2013, 13:22     Titel:
  Antworten mit Zitat      
Ich hab an so was gedacht
Code:
d = [10 11 11.5 12 12.1 12.1 12.1 12.1 12.3 14];
start_index_des_bereichs = strfind(d==12.1, [0 1 1 1 1 0]) + 1;

oder so etwas
Code:
start_index_des_bereichs = strfind(diff(d) == 0, [0 1 1 1 0]) + 1;
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 18:09     Titel:
  Antworten mit Zitat      
Dein Vorschlag ist super, hat einwandfrei funktioniert.
Nur leider, möchte die anzahl der gleichen Werte selbst definieren, es also variable machen, und außerdem bekomme ich ja nur die Position gesagt.
Habe nun ein Beispiel konstruiert, bräuchte Hilfe um die Fehler zu fixen und die idee mit den flags einzusetzen, beim plotten möchte ich ja sehen, wo ich welche regel verletzt habe.

clear all;
clc;

Code:
A = [-38 -30 -30 -30 -30 -30 -15 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 40];
positiv_grenze = 30; % Regel1
negativ_grenze = -30; % Regel1
anzahl_gleicher_Werte = 5; % Regel3
differenz = 5; % Regel3

%Regel1
start_index_des_bereichs1 = strfind(diff(A) == 0, [0 ones(1,anzahl_gleicher_Werte) 0]) + 1;

%Regel2
start_index_des_bereichs2 = (A > positiv_grenze | A < negativ_grenze);

%Regel3
start_index_des_bereichs3 = diff(A) > differenz;
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2013, 19:49     Titel:
  Antworten mit Zitat      
Hat keiner einen Ansatz für mich? Auch gerne eine andere Lösung die läuft...je einfacher - je besser. Euch einen schönen Tag.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2013, 20:03     Titel:
  Antworten mit Zitat      
Könnt ihr mir bei meinem Problem helfen?
 
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.