|
|
try-catch Anweisung zur Programmunterscheidung |
|
beepbeep |
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.12.2015, 12:07
Titel: try-catch Anweisung zur Programmunterscheidung
|
|
Guten Tag liebe Gomatlab-Community,
ich würde gerne einen Programmcode schreiben, welcher sowohl unter Matlab, als auch unter Octave lauffähig ist.
Um dies zu ermöglichen wird eine Programmunterscheidung benötigt, da verschiedene Funktionen nicht unterstützt werden.
Hierzu möchte ich einen Flag setzen, welcher für Matlab true und Octave false ist.
Meine Idee ist es dies über eine 'Try-Catch' Anweisung zu ermöglichen.
Leider bricht Matlab schon in der 'try-Zeile' ab und liefert Error: Unexpected MATLAB operator.
Eine If schleife führt zu demselben Ergebniss.
Ich wäre euch sehr dankbar , falls ihr mir hier weiterhelfen könntet.
Liebe Grüße beepbeep
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 17.12.2015, 12:52
Titel: Re: try-catch Anweisung zur Programmunterscheidung
|
|
Hallo beepbeep,
Matlab interpretiert nur Code, den Matlab interpretieren kann. Deshalb kann ein M-File, das den Operator ** enthält, nicht eingelesen werden. Entweder Du verwendest diesen Operator nur in Files, die lediglich in Octave ausgeführt werden, oder Du benutzt statt dessen den Befehl
power
.
Hilfreich wird eine solche Funktion sein:
Dann:
Da erscheint mir der
power
Operator übersichtlicher.
Zitat: |
Eine If schleife führt zu demselben Ergebniss. |
#
Es ist verblüffend, wie oft man im Forum den Ausdruck "IF-Schleife" findet, dabei is "IF" ganz eindeutig keine Schleife.
Gruß, Jan
|
|
|
beepbeep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.12.2015, 15:08
Titel: Re: try-catch Anweisung zur Programmunterscheidung
|
|
Hallo Jan,
vielen Dank für deine schnelle Rückmeldung.
Ich werde es mit deinen Tipps versuchen und mich dann melden.
Gruß
beepbeep
|
|
|
beepbeep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.01.2016, 19:30
Titel:
|
|
Hallo im neuen Jahr,
bitte verzeih, dass erst jetzt die Rückmeldung kommt.
dein Tipp habe ich leider nicht umsetzen können.
Habe allerdings eine Lösung gefunden.
mit Hilfe von
hier besteht der Unterschied zwischen Matlab und Octave darin, dass in Matlab
hingegen unter Octave
habe dies genutzt um eine globale Variable zu definieren
Nun habe ich alle Unterschiede im Code vorher mit einer if-Abfrage "filtern" lassen.
getestet habe ich das ganze unter Octave Version 4.0.0 und Matlab Version 8.2.0.701 (R2013b)
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 13.01.2016, 20:12
Titel:
|
|
Hallo,
also irgendwie verstehe ich deine Umsetzung nicht. Was hat nargin mit einem Test auf Octave zu tun? Bist du dir wirklich sicher, dass es nicht auch unter Matlab den Rückgabewert 1 haben kann?
Jan hat dir doch ein lauffähiges Bsp. gepostet, welches imho deutlich sinnvoller als ein "nargin-test" ist. Ich würde mich an deiner Stelle bemühen Jan's Vorschlag nachzuvollziehen bzw. zu fragen, wenn etwas unklar ist.
|
|
|
beepbeep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.01.2016, 22:44
Titel:
|
|
Hallo,
natürlich kann "nargin" unter matlab auch den Wert 1 annehmen.
Der code den ich unter beiden Programmen lauffähig machen möchte beginnt allerdings mit clear all und scheinbar (zumindest ist das meine Vermutung) interpretiert Matlab im "Grundzustand" "nargin" als 6 wegen der 6 "Buchstaben" und in Octave wird "nargin" als 1 "Wort" interpretiert.
Habe den Code bzw. das Programm mit meiner Lösung sowohl unter Matlab und Octave laufen lassen.
Die ursprüngliche Version war nur unter Matlab lauffähig.
Die Idee habe ich aus dem Programm selbst, da dort bereits eine Unterscheidung zwischen Matlab Version kleiner und größergleich 5 gemacht wird, da es den Befehl "flops" ab Version 5 scheinbar nicht mehr gibt.
|
|
|
Mmmartina |
Forum-Meister
|
|
Beiträge: 745
|
|
|
|
Anmeldedatum: 30.10.12
|
|
|
|
Wohnort: hier
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 14.01.2016, 08:55
Titel:
|
|
|
|
|
Hallo beepbeep,,
was ist dein Ziel?
Alles nur *irgendwie* hinzufrickeln, oder eine ordentliche Lösung zu bekommen, welche einen einigermaßen ordentlichen Programmierstil einhält?
beepbeep hat Folgendes geschrieben: |
natürlich kann "nargin" unter matlab auch den Wert 1 annehmen.
[...]
und scheinbar (zumindest ist das meine Vermutung) interpretiert Matlab im "Grundzustand" "nargin" als 6 wegen der 6 "Buchstaben" und in Octave wird "nargin" als 1 "Wort" interpretiert.. |
Dann ist dies schlicht nicht als sichere Unterscheidung geeignet.
"Vielleicht ist das das Gaspedal, wenn jemand anderes das Auto fährt, bremst es aber damit. Aber vermutlich paßt das so."
beepbeep hat Folgendes geschrieben: |
Der code den ich unter beiden Programmen lauffähig machen möchte beginnt allerdings mit clear all |
Natürlich kann ich, wenn ich ein Zimmer neu streichen will, erstmal das ganze Haus abreißen und neu bauen...
Ein clear all ist so gut wie nie sinnvoll.
Was steht denn in "nargin" zur Laufzeit drinn? Hast du dies mal überprüft?
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
beepbeep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.01.2016, 14:17
Titel:
|
|
Hallo Martina,
verzeih, dass ich mich erst jetzt melde.
Was wäre denn eine Abfrage, die einen entsprechenden Programmierstil einhält, bei der ich als Antwort meine globale Variable mat_oct für Octave mat_oct = 1 und für Matlab mat_oct = 0 stetzen kann.
Ich möchte nicht zwei komplette Programmdateien erstellen. Der Code unterscheidet sich lediglich an 4 Stellen, die ich durch eine if Abfrage nach mat_oct unterscheiden möchte.
Liebe Grüße
beepbeep
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 19.01.2016, 16:46
Titel:
|
|
wozu brauchst du denn globale variablen ? jan hat oben doch die funktion isOctave gepostet. die gibt dir doch 1 oder 0 zurück je nachdem ob matlab oder octave läuft.
was genau hat denn dabei nicht geklappt ?
_________________
richtig Fragen
|
|
|
beepbeep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.01.2016, 17:59
Titel:
|
|
Habe mich jetzt nochmals intensiv mit Jans Antwort auseinander gesetzt.
Mir hat für meine Unterscheidung die Zeile
exist ('OCTAVE-VERSION', 'builtin')
gereicht.
Mit Hilfe dieser Abfrage habe ich mir nun mit
meine Variable definiert.
Im vorhanden Programm wird mit globalen Variablen gearbeitet, also habe ich hier nur eine hinzugefügt (
global mat_oct
) und an allen Stellen wo der Code sich unterscheiden soll eine If abfrage, wie bereits bei der
nargin
Lösung.
Ist dies jetzte eine Lösung die vom Programmierstil her akzeptabel ist?
Habe mich dabei an dem vorhanden Programm orientiert.
Liebe Grüße
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 19.01.2016, 18:41
Titel:
|
|
naja globale variablen sind nicht sehr schön. sie sind unübersichtlich und vergrößern das risiko von namenskollisionen
darum die funktion isOctave
wird sie in malab ausgeführt hat sie den rückgabe wert 0 in octave ist er nicht 0
da rum kannst du dann einfach machen
auf dein beispiel oben bezogen
so wie jan das oben im zweiten teil beschrieben hat.
_________________
richtig Fragen
|
|
|
beepbeep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 17.12.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.01.2016, 20:00
Titel:
|
|
Alles klar, dann versuche ich die globale Variable zu vermeiden.
vielen Dank euch allen für die Mithilfe
|
|
|
|
|
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 - 2024
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.
|
|