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

lft-Funktion

 

gistoid
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2014, 16:18     Titel: lft-Funktion
  Antworten mit Zitat      
Hallo allerseits,

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!

MfG gistoid
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.08.2014, 18:41     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 09:22     Titel:
  Antworten mit Zitat      
Hallo Harald,

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 10:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 10:39     Titel:
  Antworten mit Zitat      
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?

Code:


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
46    
47    type = 1;
48    if nargin > 2
49        for c = 3:nargin
50            numArg = c - 2;
51            if strcmp(varargin(numArg),'calculated')
52                type = 2;
53            elseif strcmp(varargin(numArg),'measured')
54                type = 1;
55            elseif strcmp(varargin(numArg),'close')
56                [e,s,midCycle] = closeCycle(test);
57            else
58                error(sprintf('unknown arument: %s',cell2mat(varargin(numArg))));
59            end
60        end
61    end
62    if ~exist('s')
63        s = test.s;
64        e = test.e;
65        emax = max(e);
66        midCycle = linearSearch(e,emax);
67        midCycle = midCycle(1);
68    end
69    
70    if type == 1
71        if ~isfield(test,'E') | any(isnan(test.E))
72            error('young''s modulus not available');
73        end
74        xe_av = mean(test.E);
75        if ~isfield(test,'rp02') | any(isnan(test.rp02))
76            error('no yield stress available');
77        end
78        xycy_av = mean(test.rp02);
79    elseif type == 2
80        xe_av = ppval(material.E,test.Tmean);
81        xycy_av = ppval(material.xcyc,test.Tmean);
82 %       xnnort_av = ppval(material.xnnort,test.Tmean);
83
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 10:50     Titel:
  Antworten mit Zitat      
Hallo,

ist test.rp02 vielleicht NaN?
Im Zweifelsfall den Debugger nutzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 11:05     Titel:
  Antworten mit Zitat      
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.

MfG gistoid
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 11:18     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 14:48     Titel:
  Antworten mit Zitat      
Hi,

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?

MfG gistoid
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wenn ich über test.rp02=test.xcyc das Feld test.xcyc mit text.rp02 gleichsetze stoppt die Funktion trotzdem wieder in Zeile 76

... und gibt diese Fehlermeldung aus, oder was?

Zitat:
und außerdem wird das Feld test.rp02 automatisch wieder gelöscht und es ist nur noch test.xcyc vorhanden.

Finde doch mal mit dem Debugger raus, wo das Feld gelöscht wird.

Wenn in dem Betreuer der Autor der Funktion verfügbar ist, wäre es dann nicht am geschicktesten, das Problem mit ihm anzugehen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 15:21     Titel:
  Antworten mit Zitat      
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 Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 15:36     Titel:
  Antworten mit Zitat      
Hallo,

bitte mal ein reproduzierbares Beispiel zur Verfügung stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 15:55     Titel:
  Antworten mit Zitat      
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?

MfG gistoid
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 16:12     Titel:
  Antworten mit Zitat      
Hallo,

kann an sich nicht sein, da wird ein anderer Denkfehler dabei sein. Wo genau der liegt, kann ich aber so nicht beantworten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gistoid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 16:23     Titel:
  Antworten mit Zitat      
Alles klar. Vielen Dank soweit. Das wird heut sowieso nix mehr...

MfG gistoid
Private Nachricht senden Benutzer-Profile anzeigen
 
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.