WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Frage zur Optimization Toolbox

 

Andreas.blub
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2014, 09:50     Titel: Frage zur Optimization Toolbox
  Antworten mit Zitat      
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


und

Code:
%
A= xlsread('Laengskraft.xls')  

xwerte=A(:,1:2);
ydata=A(:,3);

x0= [1 1 0.1 0.1 0.1 0.1 0.6 0.7 1 0.1 0.1 0.1 0.41 0.5];

lb = [-inf,-inf,-inf,-inf,-inf,1,-inf,-inf,-inf,-inf,-inf,-inf,-inf,-inf];
ub = [inf,inf,inf,inf,inf,2.5,inf,inf,inf,inf,inf,inf,inf,inf]

max_eval = 1e7;
max_iter = max_eval

opts = optimset('MaxFunEvals', max_eval , 'MaxIter' , max_iter);

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 Wink


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.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.07.2014, 09:59     Titel:
  Antworten mit Zitat      
Hallo,

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?

Kannst du Beispieldaten zur Verfügung stellen?

Wie würdest du den Fit denn "von Hand" machen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas.blub
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2014, 10:11     Titel:
  Antworten mit Zitat      
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

figure
plot(A(:,2),A(:,3),'.',xwerte,F)
 


Das ganze plottet dann meine verwendeten Daten und meinen "per Hand" Fit. Die Werte für D B C und E vergleiche ich dann mit denen die Matlab erzeugt.

Wobei mir Matlab in diesem Fall für B = inf angibt.

Laengskraft.xls
 Beschreibung:

Download
 Dateiname:  Laengskraft.xls
 Dateigröße:  25.5 KB
 Heruntergeladen:  509 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.