Verfasst am: 11.07.2014, 09:50
Titel: Frage zur Optimization Toolbox
Tag zusammen,
Ich habe eine Frage bezüglich meines Codes:
Code:
%
function F = funktionLong(x,xwerte)
Sh = x(10).*xwerte(:,2) + x(11)
Sv = x(12).*xwerte(:,2) + x(13)
X = xwerte(:,1) + Sh
D = 0.6.*xwerte(:,2)
BCD = (x(3).*xwerte(:,2).^2 +x(4).*xwerte(:,2)).*exp(-x(5).*xwerte(:,2))
C = x(6)
E = (x(7).*xwerte(:,2).^2 + x(8).*xwerte(:,2) + x(9)).*(1-x(14).*sign(X))
B = BCD./C.*D
Y = D.*sin(C.*atan(B.*X-E.*(B.*X-atan(B.*X))))
F = Y + Sv
end
problem = createOptimProblem('lsqcurvefit','x0',x0,'objective',@(x,xwerte) funktionLong(x,xwerte),'lb',lb,'ub',ub,'options',opts,'xdata',xwerte,'ydata',ydata);
ms = MultiStart('PlotFcns',@gsplotbestf);
[xmulti,errormulti] = run(ms,problem,1000);
Das ganze ist die so genannte "Magic Formula", ein Reifenmodell. Ziel ist es das Modell an meine mit FEM erzeugten Datensätze zu fitten. Ursprünglich habe ich mit knapp 1000 Datensätzen gearbeitet. Zum testen bin ich erstmal runter auf 20 und fitte das ganze nur an einen Versuchssatz und nicht mehrere, da ich das ganze dann noch per Hand fitten kann, um mit Matlab zu vergleichen. Xwerte(:,1) ist dabei der Reifenschlupf, xwerte(:,2) die Normalkraft und ydata die daraus resultierende Längskraft. Die Parameter werden benötigt um später einen Fit für mehrere Normalkräfte zu erzeugen.
Ich weiß also, dass meine Daten zur Ansatzfunktion passen, welche Y = D*sin(....) ist. Da ich aber noch nicht viel mit Matlab gearbeitet habe, bin ich mir nicht sicher, ob das Programm überhaupt das tut was ich will. Der Fit sagt ganz klar: Nein
Da wäre erst einmal die Frage, ob da irgendwo ein dicker Bock drin ist, den ich nicht sehe, denn was Matlab mir da als Fit ausspuckt kann nicht sein. Dazu kommt, dass meine obere und untere Grenze für x6 einfach ignoriert(?) wird. Oder hab ich da die Matlab Hilfe falsch verstanden? In dem Beispiel haben sie die Grenzen eigtl. genauso verwendet.
Über jegliche Hilfe wäre ich sehr dankbar. Falls noch mehr Infos gebraucht werden, nur fragen.
Sieht zunächst gut aus.
Wenn ich nicht Tomaten auf den Augen habe, werden x(1) und x(2) im Modell nicht verwendet. Das ist i.d.R. nicht sinnvoll.
Zitat:
Der Fit sagt ganz klar: Nein
Cool, ein sprechender Fit ;) Mal ernsthaft: ist die Abweichung zwischen Daten und Fit zu groß, oder wo liegt das Problem?
Wie wertest du den Fit denn aus?
Ah ja richtig. x(1) und x(2) sind wegvereinfacht worden und noch nicht ersetzt, bzw noch nicht alles umbenannt.
Wollte nicht alles umschreiben und dann merken, dass ich sie später doch lieber verwende.
Die Auswertung hatte ich aus übersichtsgründen erstmal weggelassen. Lasse mir Daten und Fit plotten.
Code:
%
%%
xwerte = linspace(-0.45,1,100)
Fz=250
Sh = xmulti(10).*Fz + xmulti(11)
Sv = xmulti(12).*Fz + xmulti(13)
X = xwerte - 0.28 %Sh rauskommentiert und per Hand eingestellt, s.u.
D = 0.6.*Fz
BCD = (xmulti(3).*Fz^2 +xmulti(4).*Fz).*exp(-xmulti(5).*Fz)
C = xmulti(6)
E = (xmulti(7).*Fz^2 + xmulti(8).*Fz + xmulti(9)).*(1-xmulti(14).*sign(X))
B = BCD./C.*D
Y =150*sin(1.5.*atan(3.9.*X-3.9.*(1.*X-atan(3.9.*X)))) %von Hand angepasste Parameter, um mit den von Matlab errechneten zu vergleichen D=150, C=1.5, B=3.9, E=1
F = Y %Sv
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.