ich bin neu hier im Forum und ein absoluter MATLAB-Anfänger. Für meine Abschlussarbeit muss ich nun Prüfstandsdaten auswerten. Eine mir zur Verfügung gestellte Funktion sieht folgendermaßen aus:
[/code]
[test]=lft(test,material,varargin)
% test: Zyklus bestehend aus Belastungs und Entlastungspfad.
% test ist ein struct der Form:
% test.t: Zeit
% test.e: Dehnung
% test.s: Spannung
% test.Tmean: mittlere Temperatur
% test.E: E-Modul
% test.rp02: Dehngrenze
% material: Werkstoffdaten als Eingabegroessee fuer ppval. Struct mit
% folgenden Feldern:
% material.xnramb: Ramberg-Osgood Verfestigungsexponent
% (notwendig)
% material.iclosure: 1 Risschliessterm nach Heitmann
% 2 Risschliessterm nach Newmann
% material.ilftprefac:0 Vorfaktor dNHRR = 1
% 1 Vorfaktor dNHRR = f(Nramb)
% material.E: E-Modul als Datenstruktur fuer
% ppval (interp1([T1 T2 ...
% Tn],[E1 E2 ... En],'linear','pp')
% material.xcyc: Zyklische Dehngrenze als
% Datenstruktur für ppval
% (interp1([T1 T2 ... Tn],[rp02_1
% rp02_2 ... rp02_n],'linear','pp')
36 if ~isfield(test,'Tmean')
37 error('Tmean must be given');
38 end
39 if ~exist('material')
40 error('material data must be provided.');
41 else
42 if ~isfield(material,'xnramb')
43 error('Ramberg Osgod exponent must be provided: xnramb');
44 end
45 end
Mein Problem ist, dass wenn ich die Funktion bspw. in der Form lft(x) auf meinen eingelesenen Datensatz x (ist als struct aufgebaut) anwenden will, erscheint folgende Fehlermeldung:
Error using lft (line 42)
Not enough input arguments
Da die lft-Funktion im Schritt zuvor jedoch Tmean aus dem struct, in dem auch xnramb steht, welcher fest vorgegeben ist, herauslesen kann, komm ich einfach nicht drauf, wie ich xnramb angeben muss, sodass die Funktion durchläuft?
Hoffe das ist soweit einigermaßen klar und ich mach mich jetzt nicht zum totalen Gespött (wie gesagt, bin absoluter Frischling was MATLAB angeht und dementsprechend grün hinter den Ohren). Vielen Dank für jede Art von Hilfe im Voraus!
die Fehlermeldung besagt es ja:
die Funktion erwartet zwei Eingabeargumente, du übergibst aber nur eines. In der Dokumentation der Funktion hat der Autor ja beschrieben, wie die Argumente auszusehen haben. Was das im Detail bedeutet, kann ich dir als Fachfremder auch nicht erklären.
und erstmal Danke für Deine Antwort. Das ich zu wenige Eingabeargumente angebe habe ich auch schon gecheckt, aber auch wenn ich xnramb (=5.0) bspw. in der Form: lft(x,5.0) als 2. Argument angebe, erscheint trotzdem die gleiche Fehlermeldung. Was ich prinzipiell nicht verstehe ist, dass die lft-Funktion ja offentsichtlich einen Teil meines structs x, nämlich Tmean, verwertet, während sie auf die Werkstoffdaten (welche im selben struct vorliegen) nicht zugreift? Kannst Du mir das evtl. erklären?
Was ich prinzipiell nicht verstehe ist, dass die lft-Funktion ja offentsichtlich einen Teil meines structs x, nämlich Tmean, verwertet, während sie auf die Werkstoffdaten (welche im selben struct vorliegen) nicht zugreift?
Weil die Funktion so aufgebaut ist, dass es diese Eingaben als zwei getrennte Strukturen erwartet.
Danke. Ich komm mittlerweile durch lft(x,material), wobei material ein struct ist, welches ich mit den Werkstoffdaten material.xnramb, material.iclosure usw. besetzt habe auch bis zu Zeile 76 im Quellcode. Nun erscheint jedoch die Fehlermeldung "no yield stress available", was ich mir wiederrum nicht so ganz erklären kann, da rp02 in material enthalten ist?
Nein test.rp02 ist nicht NaN und der Debugger schlägt mir vor in Zeile 75 || anstatt | als Or-Operator zu verwenden, was allerdings zur selben Fehlermeldung führt. Und nochmal Danke für Deine schnelle Hilfe.
der Debugger schlägt mir vor in Zeile 75 || anstatt | als Or-Operator zu verwenden
Das ist nicht der Debugger, sondern der Code Analyzer.
Verwenden des Debuggers: Haltepunkt(e) setzen und dann Schritt für Schritt durch den Code durchgehen. Eine der beiden Bedingungen muss erfüllt sein, sonst würdest du die Fehlermeldung nicht bekommen.
und nochmals Danke! Ich glaube ich habe den Fehler jetzt gefunden. Im Debugger wird kein Feld rp02 von test gefunden, da dieses als xcyc definiert ist. Wenn ich über test.rp02=test.xcyc das Feld test.xcyc mit text.rp02 gleichsetze stoppt die Funktion trotzdem wieder in Zeile 76 und außerdem wird das Feld test.rp02 automatisch wieder gelöscht und es ist nur noch test.xcyc vorhanden. Woran liegt das? Mein Betreuer hat mir gesagt, dass seine Skripte nicht alle konsistent seien, weshalb ich auch schon in Zeile 75 der lft-Funktion isfield(test,'rp02') | any(isnan(test.rp02)) durch isfield(test,'xcyc') | any(isnan(test.xcyc)) ersetzt habe, was allerdings auch nicht den gewünschten Erfolg gebracht hat. Irgendwelche Ratschläge?
Ja es wird die selbe Fehlermeldung ausgegeben und der Betreuer ist leider derzeit im Urlaub und wird das auch noch die nächsten 2 Wochen sein. Deshalb nerv ich hier auch wegen wahrscheinlich ziemlich banalen Zeug so rum. Hab leider keinen anderen Ansprechpartner derzeit
Leider weiß ich nicht wie ich Dir ein reproduzierbares Beispiel aufzeigen soll, ohne den gesamten Quellcode der lft-Funktion und die zugehörigen Datensätze zu posten bzw. zu verschicken. Außerdem wundert mich, dass andere Datensätze bereits in Zeile 72 stoppen, obwohl test.E vorhanden und auch nicht NaN ist?
Alles klar. Vielen Dank soweit. Das wird heut sowieso nix mehr...
MfG gistoid
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
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.