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

Simple Funktion liefert falsches Ergebnis

 

Dr. If

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 14:08     Titel: Simple Funktion liefert falsches Ergebnis
  Antworten mit Zitat      
ich habe eine ganz einfache Funktion:
Code:

function [y] = f(x)
   if x >= 120
      y = 1;
   else
      y = 2;
end

f(1)
   ans = 2
   
f(1000)
   ans = 1
   
t = 0:10:300;
f(t)
   ans = 2


Warum bekomme ich als Ergebnis für den Aufruf "f(t)" nur einen einzigen Wert und warum immer 2? Die Funktion müsste doch auch mit Werten kleiner als 120 aufgerufen werden?!

Vielen Dank vorab.


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 06.09.2011, 14:17     Titel:
  Antworten mit Zitat      
Hallo Dr. If,
wo sollen denn die anderen Werte herkommen?
Du setzt immer y = 1 für Werte größer gleich 120 und y = 2 für Werte unter 120.

Du überschreibst y ja immer wieder.
y ist nicht als Vektor definiert.

Einfacher wäre:
Code:

t = 0:10:300;
y = ones(size(t));
y(t<120) = 2;
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
nighty

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 14:21     Titel:
  Antworten mit Zitat      
x wird hier als Vektor behandelt und somit auch als Vektor verglichen. Das Ergebnis des Vergleichs ist wieder ein Vektor.
Ein if-Zweig wird durchlaufen, wenn alle Elemente des Vektors wahr sind.


Code:
x = 0:10:300;
 vergleich = (x >= 120);

if vergleich
disp('ALLE Werte waren groessergleich 120');
else
disp('mindestens einer der Werte war kleiner 120');
end
 
 
Dr. If

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 14:24     Titel:
  Antworten mit Zitat      
Hallo _Peter_,

danke für deine Antwort.

Okay, meine eigentliche Funktion ist etwas komplizierter:

Code:
function [s] = s_c(t)
    if t >= 120
        s = f_s(50, 120) + f_s(100, t - 120);
    else
        s = f_s(50, t);
    end
end


Ich möchte alle Ergebnise dieser Funktion von 0:10:300 haben. Wir kann ich das machen? Wenn ich keine Fallunterscheidung habe, und die Funktion so aufrufe, bekomme ich doch auch einen Vektor zurück?!

Nimmt er immer nur den letzten Wert von dem Input-Intervall?
 
Nighty

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 14:44     Titel:
  Antworten mit Zitat      
Hallo Dr. If,

du könntest einen Vektoren bauen, der aus zwei Vektoren je nach Ergebnis des Vergleiches zusammengesetzt wird:

Code:

function [ s ] = s_c( t )

vergleich = (t >=120);    % vergleich ist 1, wenn t >= 120, sonst 0
 
 s = vergleich.*(f_s(50,120)+f_s(100,t-120))...
     + (~vergleich).*(f_s(50,120)+f_s(100,t-120))
 
% s wird an den Stellen aus der ersten Funktion gebildet, wo vergleich 1 ist.
% wo ~vergleich 1 ist, wird die zweite Funktion genommen.
% s ist wieder ein Vektor

end
 


Viele Grüße
Nighty
 
Nighty

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 14:51     Titel:
  Antworten mit Zitat      
Hab mich beim Kopieren deiner Funktionen verklickt... meinte:

Code:

 s = vergleich.*(f_s(50,120)+f_s(100,t-120))...
     + (~vergleich).*(f_s(50, t));
 
 


Nighty hat Folgendes geschrieben:

Code:

 s = vergleich.*(f_s(50,120)+f_s(100,t-120))...
     + (~vergleich).*(f_s(50,120)+f_s(100,t-120))
 

 
Dr. If

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 15:32     Titel:
  Antworten mit Zitat      
@Nighty

Danke, dass scheint so zu funktionieren. Wie genau darf ich die Syntax "..." deuten? Bedeutet das einfach, dass das aktuelle Kommando in der nächsten Zeile fortgesetzt wird?
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 06.09.2011, 15:47     Titel:
  Antworten mit Zitat      
Hallo Dr.If

"..." hast du richtig interpretiert Wink
wird eingesetzt, falls mal der Code zu lang für eine Zeile ist. Das ist übersichtlicher als zu scrollen.

Gruß Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Nighty

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 15:48     Titel:
  Antworten mit Zitat      
Freut mich das zu hören.

Ja. Ich dachte, dass der Code hinterher vielleicht umbricht, weil das Fenster zu klein ist. Außerdem sieht man so ganz schön, dass sich die Funktion aus zwei Teilen zusammensetzt.

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