Ich möchte eine Funktion definieren, die die sin- und cos-Funktion zusammen in einem Schaubild plottet. Optional soll das Doppelte der sin- und cos-Funktion ebenfalls im selben Schaubild erscheinen können.
Die Funktion soll also ungefähr so aussehen:
wobei x (y) ein Vektor für die sin (cos) Funktion ist. doppeltX und doppeltY sind boolesche Werte, die angben, ob die optionalen Funktionen ebenfalls geplottet werden sollen. Default soll false sein.
Ich hab da jetzt aber Schwierigkeiten, das mit den optionalen Werten hinzubekommen. Ich benutze den inputParser-Ansatz.
Mein Code ist:
addRequired(p,'x',@isnumeric); %für die verlangten Inputs
addRequired(p,'y', @isnumeric);
addParamValue(p,'doppeltX',defaultDoppelterPlot,checkDoppelterPlot); % ich habe auch addParameter probiert und p.addParamValue ohne das p in Klammer
addParamValue(p,'doppeltY',defaultDoppelterPlot, checkDoppelterPlot);
Leider funktioniert das nicht. Was mich noch mehr überrascht ist, dass ich mit der Funktion addParamValue eigentlich es folgendermaßen eingeben sollte:
Wenn ich das aber mache, heißt die Fehlermeldung, dass es zu viele Argumente gibt und wenn ich nur x und y einbeziehe, sind es zu wenig. Dabei sollte es ja gerade funktionieren mit der Funktion addParamValue, weil sie sich ja optionalen Werten widmet.
Habt ihr zufällig eine Idee? Wäre euch dankbar
addRequired(p,'x',@isnumeric); %für die verlangten Inputs
addRequired(p,'y', @isnumeric);
addParamValue(p,'doppeltX',defaultDoppelterPlot,@ischar); % ich habe auch addParameter probiert und p.addParamValue ohne das p in Klammer
addParamValue(p,'doppeltY',defaultDoppelterPlot, @ischar);
% parse methode muss verwendet werden
p.parse(x,y,varargin{:})
% Variablen werden in dem struct p.Results gespeichert
Schau dir die Dokumentation zu inputParser noch einmal an. Da sind noch mehrere Fehler drin:
1) du musst im Funktionsaufruf varargin verwenden
2) die Funktion checkDoppelterPlot exisitiert nicht
3) der Aufruf der parse Methde fehlt. Dadurch werden die Argumente in dem struct p.Results gespeichert. Entsprechend musst du den restlichen Code anpassen.
Verfasst am: 29.08.2014, 11:55
Titel: optionale Einträge entweder @isnumeric oder einen def.Strin
Angenommen, ich möchte einen weiteren optionalen Input hinzufügen, der einen (einzigen) String zulassen soll, sowie numerische Werte. Wenn ich also z.B. den String dasDoppelteX schreibe, soll es mir die Funktion 2* sin(x) plotten. Wenn ich allerdings den numerischen Wert num eingebe, soll es num*sin(x) plotten. Intuitiv würde ich meinen Code in etwa so setzen. Habt ihr eine Idee?
switch p.Results.ZusaetzlicherPlot case dasDoppelteX
plot(2*sin(x));
case isnumeric(p.Results.ZusaetzlicherPlot) %oder vielleicht double?
plot(p.Results.ZusaetzlicherPlot*sin(x));
case isstring(p.Results.ZusaetzlicherPlot) && ~= dasDoppelteX
msg= Als String-Eintrag ist nur dasDoppelteX zugelassen
end
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
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.