ich melde mich hoffentlich zum letzten mal mit meinem Programm. Meiner Meinung nach fehlt nur noch eine Kleinigkeit damit das Programm so laufen tut, wie es soll.
Ich will meine Ergebnisse aus einem Mehrkörpersimulationsprogramm in Matlab reinladen und plotten lassen. Dafür hab ich eine Matlab Data vom Simulationsmodell erstellen lassen. Nun hab ich in meiner Plotfunktion folgenden Code zum einlesen der Simulationsergebnisse erstellt:
Code:
%Daten von Simulation einlesen
simDatas = readSimulation(simfile, freqs);
%für alle Frequenzen
allFreqs = sort(unique([measData.f, simDatas.f]));
% Simulationsdaten plotten
input2 = find(freq == [simDatas.f]);
plot(ax, 1000*simDatas(input2).x, 0.001*simDatas(input2).F, '-');
result = Formeln(simDatas(input2));
Error in Formeln (line 44)
chars.delta = asin(chars.Aw/(pi*chars.Famp*chars.xamp));
Error in evalPlotMessSim (line 53)
result = Formeln(simDatas(input2));
Error in Hauptprogramm (line 26)
[res, b] = evalPlotMessSim(...
Hab jetzt versucht mit dem debug den Fehler zu finden, allerdings erfolglos. Versteh auch nicht was der erste Fehler aussagen soll. Im workspace werden alle Werte reingeladen die benötigt werden.
chars.Famp und chars.xamp sind vermutlich Vektoren? Dann willst du sie wahrscheinlich komponentenweise (.*) multiplizieren, nicht als Matrizen (*).
Du solltest dann auch ./ statt / verwenden.
vielen Dank für die Hilfe. Es kommen nun keine Fehlermeldungen mehr. Die Hysteresekennlinien der Messungen und Simulation werden nun auch wie gewollt geplottet. Habe allerdings noch ein kleines Problem, dass beim 2 Digramm die dynamische Steifigkeit und der Verlustwinkel nicht geplottet werden. Laut debug, hab ich jetzt herausgefunden, das matlab mir die Werte für Steifigkeit und Verlustwinkel nur für eine Frequenz ausgibt, obwohl ich für alle Frequenzen die Werte haben will.
Folgenden code hab ich dafür geschrieben:
Code:
function[result, b] = evalPlotMessSim(...
strHall,...
freqs,...
file,...
simfile)
%Daten von Messungen einlesen
measData = readMessung(file);
%Daten von Simulation einlesen
simDatas = readSimulation(simfile, freqs);
%für alle Frequenzen
allFreqs = sort(unique([measData.f, simDatas.f]));
% Alle Werte für cdyn und delta für alle Frequenzen
allFreq = [result.freq]; % Ausgabe aller Frequenzen
allCdyn = [result.cdyn]; % Ausgabe aller dynamischen Steifigkeiten
allDelta = [result.delta]; % Ausgabe aller Verlustwinkel
allFreqs ist im workspace als 1x12 double hinterlegt (also alle benötigten Frequenzen).Wieso ist dann freq in der for Schleife ein 1x1double . Liegt der Fehler also in der for Schleife?
Code:
for iplot = 1:length(allFreqs)
freq = allFreqs(iplot);
icol = icol + 1;
if icol>ncols, icol=1; irow=irow+1;
end
ich glaube ich weiss wo der Fehler liegt, weshalb die plots für cdyn und delta nur für einen Wert ausgegeben werden. Durch die mangelnde Erfahrung mit Matlab, weiss ich leider nicht wie ich das in Matlab umsetzen soll. Wie bereits bekannt geb ich mit meiner folgenden Funktion die Plots aus. Der Code ist in zwei Plots unterteilt. Der erste Plot gibt mir die Kraft in Abhängigkeit von Weg für verschiedene Frequenzen in mehreren Plots aus (wie in der Datei x_F_plots zu sehen). Der zweite Plot soll mir in einem Diagramm jeweils die cdyn und delta für alle Frequenzen darstellen (datei cdyn_delta). Ich glaub das Problem liegt an der for Schleife des ersten Plots. Ist es denkbar das ich die Ausgabe der Plots für cdyn und delta vor der for Schleife einbinden muss? Falls ja wie müsste der Befehl aussehen? Sorry, falls ich euch hier zu sehr auf die nerven gehe.
Code:
function[result, b] = evalPlotMessSim(...
strHall,...
freqs,...
file,...
simfile)
%Daten von Messungen einlesen
measData = readMessung(file);
%Daten von Simulation einlesen
simDatas = readSimulation(simfile, freqs);
%für alle Frequenzen
allFreqs = sort(unique([measData.f, simDatas.f]));
es ist sehr schwierig, dir bei sehr langem Code zu helfen, wenn man nicht mal genau weiß, wie du ihn aufrufst. Du kannst das deutlich erleichtern, indem du das Problem auf das wesentliche reproduzierst und uns die Möglichkeit gibst, das auch auszuführen.
ich versuchs jetzt auf ein Minimum zu reduzuieren. Hab folgendes txt.file (Werte für x und F für die entsprechenden Frequenzen) hochgeladen damit du es vielleicht ausführen kannst . Dieses txt.file will ich in zwei Diagrammen, auf unterschiedlicher Weise Darstellen. Das erste Diagramm soll mir in einzelne Diagramme die x-und F-Werte für die jeweiligen Frequenzen darstellen. Das funktioniert auch wunderbar.
Das zweite Diagramm soll mir dann aus allen Hysteresekennlinien des 1ten Diagramms den entsprechenden Wert für dyn.Steifigkeit berechnen und in einem Diagramm plotten (es sind in dem Beispiel 7 Werte).
Formel zur Berechnung dyn.Steifigkeit: c_dyn=Fmax/xmax
Beim zweiten Diagramm hab ich das Problem, dass ich es nicht hinbekomme alle berechneten Werte in einem Diagramm zu plotten.
hab den letzten Beitrag komplett losgelöst von meinem Code erstellt. Möchte erstmal wissen wie ich den Plot fürs zweite Diagramm bekomme. Sprich Matlab soll mir für jede Spalte den maximalen Wert für x und F finden und daraus cdyn berechnen. Anschließend soll Matlab mir alle berechneten Werte in einem Diagramm plotten.
Aber um deine Fragen zu beantworten:
Bei der ersten Frage weiss ich nicht genau was Sie meinen. Die Datei steht mit dem Code dahingehend in Verbindung, das dadurch die Messdaten eingelesen werden.
Das Problem liegt ab dieser Zeile im Code:
Mit dem Debugger hab ich rausgefunden allFreq ein 1x1double ist mit der Frequenz 10Hz. Es müsste aber ein 1x11 double sein um alle Frequenzen abzudecken.
[code]
allFreq = [result.freq];
allCdyn = [result.cdyn];
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.