ich arbeite gerade an Modellen für die ich bestimmte Parameter benötige. Die Parameter lassen sich nicht direkt ermitteln und werden daher über einen Genetischen Algorithmus bestimmt. Der Aufbau/Code funktioniert auch soweit, jedoch bricht der GA nach einer gewissen Anzahl an Iterationen/Generationen (20 bis 50 Generationen etwa) ab ohne ersichtlichen Grund.. für mich zumindest:)
Aufgrund der Länge kann ich den ganzen Code leider nicht posten und versuche es hier erst mal mit der Fehlermeldung. Vllt hat ja jmd einen Tipp bzw kann mir eine Hilfestellung zum debuggen geben.
Code:
In an assignment A(:) = B, the number of elements in A and B must be the same.
Error in getsteifigkeit_VR (line54)
s(k) = x(IMIN(I));
Error in ZielFkt_GenMaxwell_aE (line103)
Err.(Am_st).c_dyn_sim(n,1) = getsteifigkeit_VR(hys_tmp(end-1).x,hys_tmp(end-1).y,AP,Abtastart);
Error in GA_General_Maxwell_aE>@(Parameter)ZielFkt_GenMaxwell_aE(Parameter,Variablen)
Error in GA_globalPop (line185)
F = ZielFKT(Parameter);
Error in GA_General_Maxwell_aE (line82) [BestIND, Data_GA] = GA_globalPop(Zielfunktion_GenMaxwell, Variablen,...
.. bzw. in der Mutation könnte der Fehler auch stecken:
mPopChilds.Individuen(k, m) könnte auch NaN produzieren. Leider finde ich auch hier den Fehler nicht auf anhieb und wäre daher um Hilfe dankbar:)
Ja Y1 (aus der Kraft F) hat in dieser Simulation auch imaginäre Anteile. In anderen allerdings nicht und dennoch kommt es, wenn auch deutlich später (nach Generationen) zum gleichen Fehler. Die Ampl_tmp muss auch nicht zwangsläufig negativ sein. IMIN kann trotzdem zu nem leeren Array werden.
In den Anhang habe ich die aktuellen Input Daten bis kurz vor dem Fehler reingepackt.
mit den Daten bekomme ich:
>> max(Y1)
ans =
-2.1031 + 0.0061852i
>> min(Y1)
ans =
0.00029738 + 0.00010281i
Die Frage ist: was macht max und min bei komplexen Zahlen? Augenscheinlich gibt es das Element mit dem höchsten bzw. niedrigsten Betrag zurück, was ja auch sinnvoll ist. Das heißt also, dass im Extremfall ein Maximum auch bei -6 liegen kann und ein Minimum bei 3:
v = [-6, 4+i, 3];
>> max(v)
ans =
-6
>> min(v)
ans =
3
Wie man hier am besten die Amplitude ermittelt (oder was Amplitude im Zusammenhang mit komplexen Zahlen überhaupt heißt), kann ich dir jetzt leider auch nicht sagen...
Grüße,
Harald
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.