% Ergebnisse von Frequenz, Weg und Kraft aus sbr.file
simfrequenz = sim.timeInt.RS_result.SRS_f.Sch_001.values;
simkraft = sim.timeInt.RS_result.SRS_Fx.Sch_001.values;
simweg = sim.timeInt.RS_result.SRS_x.Sch_001.values;
% Indizies finden für Simulationsdaten im Bereich ±1% for ifreq = 1:length(freqs)
flo = freqs(ifreq)*0.99;
fhi = feqs (ifreq)*1.01;
idx = (flo < simfrequenz) && (simfrequenz <= fhi);
data(ifreq) = struct('f', freqs(ifreq), 'x', simweg(idx), 'F', simkraft(idx));
end
strFileMess = ['HALL_' strHALL '_Messungen.csv'];
strFileSim = cellfun(@(x)[strPathSim 'HALL_test_var_' strHALL '.' x '.mat'], subvars, 'UniformOutput', false); %Verwendet die Funktion für jede Zelle in einem Zellenbereich
Hallo,
erstmal vielen Dank für die Antwort. Bin totaler Neuling in Matlab und muss jetzt in meiner Bachelorarbeit mit Matlab programmieren um Simulationsergebnisse zu plotten. Komme da langsam aber sicher eine meine Grenzen und weiß nicht mehr weiter. Um auf deine Frage zurückzukommen wo readsimulation aufgerufen wird.
Dafür hab ich eine weitere Funktion aufgestellt um die Simuationsergebnisse zu plotten. Mit folgendem code:
%Plots in drei Spalten verteilen
nSpalten = 3; %Seite wird in 3 Spalten aufgteilt
nReihen = ceil(length(alle_Frequenzen)/nSpalten); %Anzahl der Reihen auf der Seite mit Obergrenze
iSpalten = 0;
iReihen = 1;
result = Formlen();
forplot = 1:length(alle_Frequenzen)
freq = alle_Frequenzen(plot);
iSpalten = iSpalten + 1;
if iSpalte>nReihen, iSpalte=1; iReihen=iReihen+1;
end
ein Problem dürfte sein, dass die Argumente im Aufruf von readSimulation gegenüber der Deklaration vertauscht sind.
readSimulation(simfile, freqs) vs. readSimulation(freqs, simfile)
Danke für den Link Harald, werd mich heut abend mal damit auseinandersetzen.
Ich poste hier mal meine zwei Hauptprogramme und die dazugehörigen Funktionen. Ich denke mein Fehler liegt bei den Input und Output Argumenten der jeweiligen Funktionen.
Hauptprog_v01 dient dazu die ganzen Messdaten und Simulationsergebnisse aus den Funktionen aufzurufen und zu plotten.
readSimulation liest die Simulationsergebnisse ein
Code:
function data = readSimulation( simfile, freqs)% (simfile,freqs)=Werte die eingelesen werden; data=Werte die von Funktion berechnet werden
%Einlesen der Simulationsergebnisse
% Detailed explanation goes here
% Ergebnisse von Frequenz, Weg und Kraft aus sbr.file
simfrequenz = sim.timeInt.RS_result.SRS_f.Sch_001.values; %Simulationsergbenisse Frequenz
simkraft = sim.timeInt.RS_result.SRS_Fx.Sch_001.values; %Simulationsergebnisse Kraft
simweg = sim.timeInt.RS_result.SRS_x.Sch_001.values; %Simulationsergebnisse Weg
% Indizies finden für Simulationsdaten im Bereich ±1% for ifreq = 1:length(freqs) %integer über den gesamten Einlesebereich der Frequenz
flo = freqs(ifreq)*0.99; %Frequenz low
fhi = feqs (ifreq)*1.01; %Frequenz high
idx = (flo < simfrequenz) && (simfrequenz <= fhi); %Index im Bereich zwischen flo und fhi
data(ifreq) = struct('f', freqs(ifreq), 'x', simweg(idx), 'F', simkraft(idx)); %Strukturausgabe ('F' wird auch idx verwendet, da es die gleiche Länge hat) end
readMessungen soll die Messergenisse aus einem CSV-File einlese
Code:
function data = readMessungen(file) %(file)=Werte die eingelesen werden; data=Werte die von Funktion berechnet werden
%Einlesen der Messungen (csv.file) und abspeichern im Strukturbereich
% Detailed explanation goes here
table = readtable(file); %liest Tabellendaten ein
data = struct('f', {}, 'x', {}, 'F', {}); %definierte Strukturbereiche
n=0;
for i = 1:2:width(table) %for Schleife zum durchlaufen der Tabelle für alle Frequenzen
n = n+1;
name = table.properties.variable(i);
freq = str2double(regexprep(name, {'_','[a-zA-Z]'},{'.' ''})); %aufteilen der Frequenzspalten (jede Frequenz beinhalter den Weg x und die Kraft F)
data(n) = struct(...
'f', freq, ...
'x', str2double(outs(table{1:end,i+0})),... %Umwandlung in den numerischen Bereich
'F', str2double(outs(table{1:end,i+1}))); %Umwandlung in den numerischen Bereich
end
%Plots in drei Spalten verteilen
nSpalten = 3; %Seite wird in 3 Spalten aufgteilt
nReihen = ceil(length(alle_Frequenzen)/nSpalten); %Anzahl der Reihen auf der Seite mit Obergrenze
iSpalten = 0;
iReihen = 1;
result = Formlen();
forplot = 1:length(alle_Frequenzen)
freq = alle_Frequenzen(plot);
iSpalten = iSpalten + 1;
if iSpalte>nReihen, iSpalte=1; iReihen=iReihen+1;
end
du hast mit dem Debugger (s.o.) viel bessere Möglichkeiten, den Fehler zu finden als jemand, der den Code nicht ausführen kann.
Die Fehlermeldung "Input must be a row vector of characters." sollte sich so überprüfen und korrigieren lassen.
Die Fehlermeldung "The file extension '.mat' is not recognized." ist an sich selbsterklärend. Man kann mit readtable nur Dateien mit bestimmten Endungen einlesen. .mat gehört nicht dazu.
Matlab meckert, weil simfile eine char sein soll, ist aber eine cell, wahrscheinlich cell string . Jedenfalls muss du ganz am Anfang schauen, woher simfile kommt und warum es dort cell ist. Sonst kannst du dir mit Prüfungsroutinen behelfen z.B. mit
iscell
vorher prüfen und entsprechend handeln.
Nett wäre wenn dazu schreiben würdest, was eigentlich falsch war. Damit die andere, welche auch ähnliche Probleme haben, das auch sehen können.
Dort ist der Doppelpunkt einfach falsch an der Stelle(typischer Syntaxfehler weil man sich vertippt hat), da du auf Struct-Felder zugreifen möchtest muss dort statt Doppelpunkt ein Punkt sein.
Hallo denny, da hast du absolut recht sorry.
Genau der Doppelpunkt war der Fehler
Gruss kwd46056
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.