Schrift
[thread]7874[/thread]

Definition einer abfallende Flanke!? (Seite 2)



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Crian
 2006-04-10 18:30
#64660 #64660
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Naja, das ist weniger eine Frage einer konkreten Programmiersprache als mehr der Logik. Aber meine Funktion oben sollte dir weiterhelfen. Das ist eigentlich nur eine etwas aufgebohrte Variante von Ishkas Idee, die besser erweiterbar ist, wenn plötzlich weitere zu beachtende Zustände dazu kommen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
EagleFox
 2006-04-10 18:37
#64661 #64661
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Super, das werde ich gleich mal ausprobieren!

Vielen tausend Dank schon mal!

P.S. Logik ist mir nicht fremd, nur verstehe ich Deine Tabelle nicht. ;-(
Crian
 2006-04-10 19:47
#64662 #64662
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=EagleFox,10.04.2006, 16:37]P.S. Logik ist mir nicht fremd, nur verstehe ich Deine Tabelle nicht. ;-([/quote]
Die ist so zu lesen:

Wert : der aktuelle Wert der Kurve
Ist-Zustand : der Zustand der State-Machine
Soll-Zustand : der Zustand, den die State-Machine jetzt annhemen soll
Flankenabfall ? : ja (Flankenabfall ist eingetreten) oder nein

Wie gesagt die Werte waren nur Beispiele.

Mit solchen State-Mchines lassen sich auch sehr viel Komplexere Dinge abbilden.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
EagleFox
 2006-04-10 21:30
#64663 #64663
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Ah, ok, jetzt wird langsam Licht in meiner Birne! ;-)
Tabelle verstanden.

Ich habe nun Deinen Code integriert, nach besten Wissen und Gewissen.
Ich hoffe das würde so klappen. Aber da die Spektren durch zwei Leerzeilen getrennt sind, fängt das Programm nun an zu meckern, sobald $wert nicht existiert. Was man ihm wahrscheinlich nicht verübeln kann.
Wie kann ich das noch umgehen?

Hier mein "Einbauversuch"

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
my $state = 'start';
my $crit = 3;

sub getDatensatz{
my ($entry) = @_;
my $bool = 0;
my $set = '';
my @steigend;
for my $line(split(/\r?\n/,$entry)){
chomp $line;
my $wert = (split(/\s+/,$line))[-1];

if ($wert >= $crit and $state ne 'high') {
$state = 'high';
}
elsif ($wert < $crit and $state ne 'low') {
if ($state eq 'high') {
$bool = 1;
}
$state = 'low';
}

unless($bool){
push(@steigend,$line);
}
else{
$set .= $line."\n";
}
}
$set .= $_."\n" for(@steigend);
$set .= "\n\n";
return $set;
}


Und hier die Fehlermeldung:

Code: (dl )
1
2
Use of uninitialized value in numeric lt (<) at ./sortier_neu.pl line 55, <$fh> line 9921.
Use of uninitialized value in numeric ge (>=) at ./sortier_neu.pl line 55, <$fh> line 9921.


Zeile 55 ist in diesem Fall:
Code: (dl )
if ($wert >= $crit and $state ne 'high') {


Zeile 9921 ist die erste Leerzeile nach dem ersten Spektrum.
Dubu
 2006-04-10 22:17
#64664 #64664
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Das Problem bei solchen Messwerten ist oft, dass sie nicht immer (streng) monoton steigen oder fallen, sondern auch in einer deutlichen Auf- oder Abbewegung leicht schwanken. Auch wenn man eine "fallende Flanke" hat, muss nicht unbedingt jeder Wert kleiner sein als der vorige. Für Informatiker oder Mathematiker ist das oft erstmal irritierend, denn ein einfaches "wenn größer als x, dann an; wenn kleiner als x, dann aus" funktioniert dann nicht mehr. Deshalb arbeitet man dabei meist mit einer Schalthysterese: "wenn der Wert größer als x2 ist, dann an; wenn der Wert kleiner als x1 ist, dann aus", wobei x1 < x2 ist.
Und genau das macht Ishkas Code, wobei x1=3 und x2=5 ist. :)
EagleFox
 2006-04-10 23:04
#64665 #64665
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Jau, hast voll recht, da habe ich im Moment garnicht dran gedacht. Ich versuche mal lieber Ishkas code einzubinden. Der ist auch eher nach meinem Vorschlag das zu realisieren.
Mal sehen ob es dann läuft. Bei genauer analyse der Flanke sieht man auch ein leichtes "auf und ab" der Werte der jeweiligen Flanke.
EagleFox
 2006-04-11 00:16
#64666 #64666
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Sauber Leute,

vielen Dank für Eure Hilfe. Es klappt nun so, wie ich mir das vorstelle! Ihr seid super!
Crian
 2006-04-11 13:28
#64667 #64667
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Ich hatte sowas geahnt, deshalb ja die state-Machine, kann man ja leicht erweitern um sowas zu handeln.

Mathematiker mögen auch keine unvollständigen Aufgabenstellungen und Informatiker keine löchrigen Pflichtenhefte.

Allerdings war das sehr praxisnah, dass die Spezifikation des Problems erst während der Lösungserarbeitung genauer gegeben wurde ;)

Aber dann hinterher über Mathematiker meckern ^^\n\n

<!--EDIT|Crian|1144748116-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-04-10 15:44.