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

Funktionen miteinander verknüpfen

 

Samstag

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2012, 11:46     Titel: Funktionen miteinander verknüpfen
  Antworten mit Zitat      
Hallo,

ich möchte verschiedene Funktionen Verknüpfen. Bisher habe ich das hier:
Code:
vz(t<=195) = vz_0(t(t<=195));
vz(t>195&t<=390) = vz_195(t(t>195&t<=390));
vz(t>390&t<=585) = vz_390(t(t>390&t<=585));
vz(t>585&t<=780) = vz_585(t(t>585&t<=780));
vz(t>780&t<=1180) = vz1(t(t>780&t<=1180));

Die Funktionen lauten also vz_0(t),vz_195(t),vz_390(t),vz_585(t) und vz1(t). So bekomme ich aber nur einen Vektor und keine neue Funktion! Wie kann ich aus den 5 Funktionen eine Funktion vz machen???

Grüße


Samstag

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2012, 22:48     Titel:
  Antworten mit Zitat      
Wieso klappt sowas hier nicht:
Code:
for tz = 1:1:1180    

    if 0<=tz<=195
        vz = vz1;
    elseif 195<tz<=390
        vz = vz2;
    elseif 390<tz<=585
        vz = vz3;
    elseif 585<tz<=780
        vz = vz4;
    elseif 780<tz<=1180
        vz = vz5;
    end
.....

Er nimmt trotzdem für vz immer nur die erste Funktion vz1. Wo liegt der Fehler??
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.05.2012, 12:25     Titel:
  Antworten mit Zitat      
Hallo Samstag,

Solcghe Schwierigkeiten kann man gut mit dem Debugger untersuchen. Setze einen Breakpoint in die entsprechende Zeile und führe den Code im Command Window aus.

Hier würdest Du folgendes feststellen:
"0<=tz<=195" macht nicht, was Du erwartest. Matlab berechnet diesen Ausdruck von links nach rechts. Also "0 <= tz" zuerst. Dies stimmt für alle Elemente von "1:1180", also ist der Ausdruck immer TRUE, also LOGICAL(1). Im nächsten Schritt wird dann geprüft "logical(1) <= 195" und Matlab konvertiert "logical(1)" automatisch zu "double(1)" um vergleichen zu können. Und "1 <= 195" ist ebenfalls immer TRUE.

Als Lösung muss man "a < b < c" aufspalten in "a < b & b < c":
Code:
for tz = 1:1:1180    
    if 0<=tz && tz<=195
        vz = vz1;
    elseif tz<=390  % tz muss hier bereits > 195 sein!
        vz = vz2;
    elseif tz<=585
        vz = vz3;
    elseif tz<=780
        vz = vz4;
    elseif tz<=1180
        vz = vz5;
    end
.....

Nebenbei ließe sich das eleganter lösen, wenn die Variablen nicht den Index im Namen tragen würden, sondern z.B. vz{1}, vz{2} etc.
Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Samstag

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2012, 12:35     Titel:
  Antworten mit Zitat      
Danke Jan. Habe es mittlerweile auch schon so abgeändert, aber jetzt verstehe ich was dahinter steckt. D.h. also es gibt keine Möglichkeit eine einzige Funktion draus zu machen!???! So wie es dasteht wäre es nämlich nur eine Übergangslösung.

Grüße
 
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.