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

Trapezfunktion

 

babsi87

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2014, 15:00     Titel: Trapezfunktion
  Antworten mit Zitat      
Hallo zusammen,

ich probiere gerade die vordefinierte Funktion zur Berechnung der 'Trapezoidal membership function' etwas umzuändern, damit diese meiner Definition entspricht.

Die 'neue' Definition wäre: trap(x, a,b,s,t)
x = 0:50;
a = 20, b = 45, s = 5, t = 5

und ist definiert:

0 --> x < (a-s) oder x > (b+t)
(x-a+s)/s --> (a-s) <=x <= a
(b+t-x)/t --> b <= x <= (b+t)
1 --> a <= b <= b

Ich hab jetzt probiert, die Indize herauszufinden, bei denen die Bedingungen stimmen.

Code:

index = find((a-s) <=x & x <=a);
y1(index) = (x(index)-a+s)/s;

index = find(b<=x & x <=  (b+t));
y2(index) = (b+t-x(index))/t;

index = find(a<= x & x<=b);
y3(index) = 1;
 


Ich bekomme für die y-Werte 3 unterschiedlich lange Vektoren. Nur jetzt weiß ich nicht mehr weiter. Wie kann ich jetzt die y-Vektoren miteinander kombinieren, dass ich am Ende eine Trapezfunktion rausbekomme, wie in der vordefinierten Funktion 'trapmf'?

LG.
Babsi


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2014, 16:50     Titel:
  Antworten mit Zitat      
hallo zusammen,

mit zeros hab ich jetzt bei allen drei vektoren die gleiche länge. in der vordefinierten funktion steht, dass zum schluss y mit min(y1,y2) berechnet wird, nur hab ich jetzt drei y-vektoren. leider weiß ich nicht so ganz wie ich das jetzt angehen soll, damit ich am ende meine neu-defininierte trapezfunktion rausbekomme. Bzw. bin ich mir nicht recht sicher, ob der obere ansatz überhaupt stimmt.

Hoffe einer von euch kann mir helfen.
Thx,
babsi
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.02.2014, 17:20     Titel:
  Antworten mit Zitat      
Hallo Babsi,

Ich habe gerade hier ein Beispiel gepostet, das zeigt wie man Funktionen für verschiedene Wertebereiche berechnen kann. Hilft dir das weiter?

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2014, 19:58     Titel:
  Antworten mit Zitat      
hallo,

ja, danke das hilft. Komisch ist nur, dass bei der dritten Variante bei mir was anderes rauskommt, als bei der zweiten.
Das Konzept müsste doch auch funktionieren, wenn ich drei y(t) Bereiche habe. Ich addiere den dritten dann einfach dazu?

LG. babsi
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.02.2014, 20:08     Titel:
  Antworten mit Zitat      
Ohne deinen Code kann man nur raten, also am besten mal posten.
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2014, 20:17     Titel:
  Antworten mit Zitat      
sorry, bin auch schon ganz verwirrt Smile

Code:


a = 20; b = 45; s = 5; t = 5;

%Variente 1
 i=1;
 for x = 0:0.1:80;
     if (a-s) <= x && x<=a;
         y2(i) = (x-a+s)/s;
     elseif b <= x && x <= (b+t)
         y2(i) = (b+t-x)/t;
     elseif a <= x && x<= b;
         y2(i) = 1;
     end
     i=i+1;
 end

%Variante 2
x = 0:80;
y = ((x-a+s)/s).*((a-s)<=x & x<=a) + ((b+t-x)/t).*(b <= x & x <= (b+t)) + 1.*(a <= x & x <= b);

 


Bei Variante 1 funktioniert es, da sieht der Plot plausibel aus und der Wertebereich stimmt, sollte zwischen 0 und 1 liegen.
Bei der 2. jedoch liegen die Werte zwischen 0 und 2. Irgendwie steh ich gerade voll auf der Leitung!!

Danke.
LG. Babsi
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.02.2014, 21:08     Titel:
  Antworten mit Zitat      
Deine Wertebereiche sind nicht eindeutig, du berechnest für einige x mehrere y. Mit den if-Anweisungen fällt das nicht auf, da nur Berechnungen für die erste wahre Bedingung ausgeführt werden. In der vektoriellen Form hingegen werden alle Werte berechnet und fließen in die Summe ein, sofern die logische Bedingung erfüllt ist. Durch die Uneindeutigkeit "überlagern" sich die Berechnungen quasi.

Hier wird das deutlich:
Code:
ya= ((x-a+s)/s).*((a-s)<=x & x<=a);
yb= ((b+t-x)/t).*(b <= x & x <= (b+t));
yc= 1.*(a <= x & x <= b);
plot(ya); hold on; plot(yb, 'r'); plot(yc, 'g');

_________________

Richtig fragen
Debugging
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.