|
|
|
Verständnisfrage zu Funktionen |
|
| papiertigre |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 23.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 23.11.2011, 15:28
Titel: Verständnisfrage zu Funktionen
|
 |
Hallo,
ich schreibe grade meine erste Funktion und kann die Fehlermeldung nicht ganz verstehen.
Fehlermeldung
ist diese if Abfrage mit dem == nicht erlaubt?
Wie sage ich der Funktion, dass sie nicht bis zum Ende durchrödeln soll, wenn eine Matrix, statt ein Vektor eingegeben wurde?
|
|
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.11.2011, 15:43
Titel: Re: Verständnisfrage zu Funktionen
|
 |
Hallo papiertigre,
Das Problem liegt bei SIZE: Dies gibt die Dimensionen des Inputs zurück, und die bestehen aus mindestens zwei Werten. wenn "size(a)" also z.B. [2,3] ist, bekommst Du "[2,3]==1" und das ergibt [false, false]. Der && Operator benötigt aber ein skalare Werte.
Wenn Du testen möchtest, ob ein Array ein Vektor ist, funktioniert das in modernen Matlab-Versionen mit "isvector" oder mit:
Das berücksichtigt Zeile- und Spalten-Vektoren.
Gruß, Jan
Zuletzt bearbeitet von Jan S am 24.11.2011, 09:14, insgesamt einmal bearbeitet
|
|
|
|
| papiertigre |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 23.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 24.11.2011, 09:13
Titel: Re: Verständnisfrage zu Funktionen
|
 |
| Jan S hat Folgendes geschrieben: |
Hallo papiertigre,
Das Problem liegt bei SIZE: Dies gibt die Dimensionen des Inputs zurück, und die bestehen aus mindestens zwei Werten. wenn "size(a)" also z.B. [2,3] ist, bekommst Du "[2,3]==1" und das ergibt [false, false]. Der && Operator benötigt aber ein skalare Werte.
Gruß, Jan |
Danke für die Erklärung.
Ich habe den Code nun so geändert:
Ich glaube die Funktion macht jetzt auch fast das was ich will, Beispiel:
Nur wenn beide size() Werte größer 1 sind, ist die Bedingung erfüllt, also beim Vektor kann ruhig ein size Wert >1 sein, ohne dass meine Funktion behauptet es wäre eine Matrix.
Nu meine Zweite Frage:
Wie bekomme ich meine Funktion zum erfrühten Abbruch, wenn eine Matrix eingegeben wurde. Warum wird die Funktion trotzdem bis zum Ende durchgeführt?
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 24.11.2011, 09:20
Titel: Re: Verständnisfrage zu Funktionen
|
 |
Hallo papiertigre,
Nein, "if size(a)>1" ist kein stabiler Test für Matrizen. Auch IF benötigt eigentlich einen Skalar als Bedingung, "size(a)>1" ist aber immer noch ein Vektor. Aus Gründen der Rückwärtskompatibilität führt Matlab dann dies aus:
Gleichzeitig mit Deiner Mitteilung hatte ich meine zurückliegende editiert. Siehe dort: "isvector(a)" oder "if ndims(a)==2 && length(a)==numel(a)".
Gruß, Jan
|
|
|
|
| papiertigre |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 23.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 24.11.2011, 11:55
Titel: Re: Verständnisfrage zu Funktionen
|
 |
| Jan S hat Folgendes geschrieben: |
Hallo papiertigre,
Das Problem liegt bei SIZE: Dies gibt die Dimensionen des Inputs zurück, und die bestehen aus mindestens zwei Werten. wenn "size(a)" also z.B. [2,3] ist, bekommst Du "[2,3]==1" und das ergibt [false, false]. Der && Operator benötigt aber ein skalare Werte.
Wenn Du testen möchtest, ob ein Array ein Vektor ist, funktioniert das in modernen Matlab-Versionen mit "isvector" oder mit:
Das berücksichtigt Zeile- und Spalten-Vektoren.
Gruß, Jan |
Danke.
habe es nun mit dem einfach isvector() befehl erledigt.
Eine Frage bleibt bisher aber dennoch offen: Wie bekomme ich die Funktion dazu abzubrechen und '0' auszugeben, falls eine Matrix vorliegt? Bei mir gibt sie trotzdem einen Wert als Antwort.
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|