Wie schaffe ich es in meinem Programm diesen zu realiesieren?
Wie schaffe ich es das k Iterationen durchlaufen werden?
-Hierbei ist das Abbruchkriterium: Puk ändert sich in der nächsten Iteration nicht mehr! Damit wären die Parameter gefunden!
Wie setze ich es programmiertechnisch um, dass die unten aufgeführten if-Abfragen auf den höher liegenden Programmcode zugreifen?
Code:
%----------------Stützpunkte----------------
t=[234];
y=[020];
%----------------Startvektor----------------
x=[40]; %x=[ak bk]
%---------------Dämpfungsparameter----------
uk=1;
%----------------Anzahl der Stützpunkte-----
n=length(t);
%-------------Zugriff auf Symbolik----------
syms ak bk real
%--------------Erzeugung-Startwertematrix---
for i=1:n
f(i)=(t(i)-ak)^2+exp(bk*(t(i)^2+y(i)^2))-5; % <- Modellfunktion end
f=f';
Parameter=[ak bk];
%-------------------------------------------
%--------------Erzeugung-Jacobimatrix-------
v=[ak bk];
j=jacobian(f,v);
%--------------Matrix-Substitution----------
J=subs(j,Parameter,x); %nach jeder Iteration hätte man ein neuen Vektor x
F=subs(f,Parameter,x);
%--------------Korrektur-Vektor-------------
z=min(size(J)); %Dim von eye(z,z)
sk=-inv(J'*J+uk^2*eye(z,z))*J'*F;
xk=x'+sk;
%---Entscheidung für Korrektur-Vektor sk----
%-------Parametersteuerungs-Variablen--------
Beta1=0.2;
Beta2=0.8;
%-------------------------------------------
Könnte man dieses Problem vielleicht lösen wenn man eine function() des Hauptprogramms über den if-Abfragen schreibt lösen?
Könnte mir bitte jemand helfen
zum einen rate ich zu etwas Geduld - es sind ja noch nicht mal 24 Stunden seit der Fragestellung vergangen.
Zum anderen liegt das Ausbleiben einer Antwort oft an der Fragestellung.
Zitat:
Wie schaffe ich es das k Iterationen durchlaufen werden?
Über welchen Programmteil soll iteriert werden? Generell kann man k Iterationen erreichen durch
Hallo Harald,
entschuldige mit der Gedult hast du recht. Ich bin nur am verzweifeln und sitze schon sehr lange an meinem Problem
Die Grundstruktur des Algorithmus sieht sio aus:
--------------------------------------------------------------------------------------
Wähle Startwertvektor x bzw. xk und Anfangswert für den Parameter μk.
Für k = 0, 1, 2, . . .:
1. Berechne F(xk), J(xk).
2. Löse das lineare Ausgleichsproblem
3. Teste, ob die Korrektur sk akzeptabel ist dafür steht der Parameter Puk. Wenn nein, dann wird
μ angepaßt und Schritt 2 wiederholt.
Wenn ja, dann:
4. Setze xk+1 = xk +sk.
--------------------------------------------------------------------------------------
k läuft dementsprechend durch das ganze Programm bis: der Parameter Puk sich in der nächsten Iteration also k+1 nicht mehr ändert!
Ich habe nun versucht das ganze mit Funktionen zu schreiben.
Soweit so gut
Allerdings funktioniert es immer noch nicht?
problem 1: rumgemecker über zu wenig Input arguments
problem 2: Eine vernüftige ausgabe wie in der Datei Ergebnisse
L_M.m läuft bei Ausführung durch, die anderen Dateien sind Funktionen und brauchen somit natürlich Eingabeargumente.
zu 1.: Welche Datei führst du wie aus?
Ich würde eine Fehlermeldung nicht als "Rumgemecker" bezeichnen. Bei dieser speziellen Fehlermeldung reicht an sich das Abzählen der erwarteten und der übergebenen Argumente.
du solltest dich mal mit den Grundlagen von Funktionen auseinandersetzen. Die Eingabeargumente müssen an Funktionen immer übergeben werden; das Drücken des Run-Buttons ist dort also nicht sinnvoll, außer die Run Configurations wurden angepasst.
Wenn du in deinem Skript alle diese Variablen definiert hättest, könntest du korrektur.m so aufrufen:
Subscript indices must either be real positive integers
or logicals.
Error in levenberg_marquardt (line
s=-(DF(x0)'*DF(x0)+mu^2*eye(n))\(DF(x0)'*F(x0));
Das ist nachvollziehbar, da DF eine (konstante) Matrix ist und du sie nicht an einem Vektor "auswerten" kannst.
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.