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

Optimierungsproblem

 

AlexUlm
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.11.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 01.12.2015, 17:24     Titel: Optimierungsproblem
  Antworten mit Zitat      
Hey,

hab neulich schonmal etwas deswegen gepostet. Jetzt habe ich es auf einem anderen Weg probiert und bekomme noch immer keine sinnvollen Ergebnisse.

Könnte vielleicht mal jemand drüber schauen? Wahrscheinlich ist der Fehler ziemlich trivial..

Vom Prinzip her, will ich nur die "IDM Parameter" durch die Optimierung wieder als Ergebnis erhalten. Ich habe mit der exakt gleichen Formel die Daten "Abstand, Trajektorie1 und vDifferenz" berechnet. Jetzt müsst der lsqnonlin ja eigentlich wieder die IDM Parameter als Ergebnis liefern, was er leider nicht tut :-/

Code:

clear all;
close all;
clc;

s = importdata('Abstand.mat');
vEigen = importdata('Trajektorie1.mat');
dv = importdata('vDifferenz.mat');

%% IDM Parameter

a=1.56;                     % Maximale Beschleunigung
b=1;                        % Komfortable Bremsung
T=1.3;                      % Zeitlicher Wunschabstand
v0=16;                      % Wunschgeschwindigkeit
s0=2;                       % Wunsch Minimal-Abstand
vVorausInitial = 12;        % Geschwindigkeit vorausfahrendes Fahrzeug

% Define the data sets that you are trying to fit the
% function to.

X = [vEigen; s; dv];

sStern = s0 + vEigen.*T + (vEigen.*dv)./(2*sqrt(a*b));
Y = a*(1-(vEigen/v0).^4 - (sStern/s).^2);

% Initialize the coefficients of the function.

X0=[1 1 1 1 1]';
lb = [-2 0 0 0 0];
ub = [2 2 2 20 3];

% Calculate the new coefficients using LSQNONLIN.
options = optimset('Display','iter', 'TolX', 1e-12,'TolFun', 1e-12);
x=lsqnonlin(@fit_simp,X0,[],[],options,X,Y)
 


Und hier die Funktion:
Code:

function diff = fit_simp(x,X,Y)

% This function is called by lsqnonlin.
% x is a vector which contains the coefficients of the
% equation.  X and Y are the option data sets that were
% passed to lsqnonlin.


a=x(1);

b=x(2);

T=x(3);

v0=x(4);

s0=x(5);

sStern = s0 + X(1).*T + (X(1).*X(3))./(2*sqrt(a*b));
diff = a*(1-(X(1)/v0).^4 - (sStern/X(2)).^2) - Y;
end
 


Weiss einer Rat?


Grüße Alex

Abstand.mat
 Beschreibung:

Download
 Dateiname:  Abstand.mat
 Dateigröße:  8.49 KB
 Heruntergeladen:  341 mal
vDifferenz.mat
 Beschreibung:

Download
 Dateiname:  vDifferenz.mat
 Dateigröße:  8.75 KB
 Heruntergeladen:  361 mal
Trajektorie1.mat
 Beschreibung:

Download
 Dateiname:  Trajektorie1.mat
 Dateigröße:  8.58 KB
 Heruntergeladen:  358 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2015, 17:36     Titel:
  Antworten mit Zitat      
Hallo,

du willst in fit_simp wohl jeweils eine Zeile aus X holen, also X(1,:) statt X(1) etc.

Zudem dürften bessere Startwerte helfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
AlexUlm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.11.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 01.12.2015, 20:10     Titel:
  Antworten mit Zitat      
Hallo Harald,

leider werden die Ergebnisse durch die Änderungen nicht besser...

Fällt dir sonst noch etwas auf?


Grüße und Danke
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2015, 21:49     Titel:
  Antworten mit Zitat      
Hallo,

du hast / statt ./ verwendet.

Komplett:
Code:
s = importdata('Abstand.mat');
vEigen = importdata('Trajektorie1.mat');
dv = importdata('vDifferenz.mat');

%% IDM Parameter

a=1.56;                     % Maximale Beschleunigung
b=1;                        % Komfortable Bremsung
T=1.3;                      % Zeitlicher Wunschabstand
v0=16;                      % Wunschgeschwindigkeit
s0=2;                       % Wunsch Minimal-Abstand
vVorausInitial = 12;        % Geschwindigkeit vorausfahrendes Fahrzeug

% Define the data sets that you are trying to fit the
% function to.

X = [vEigen; s; dv];

sStern = s0 + vEigen.*T + (vEigen.*dv)./(2*sqrt(a*b));
Y = a*(1-(vEigen/v0).^4 - (sStern./s).^2);

% Initialize the coefficients of the function.

X0=[1 1 1 1 1]';
lb = [0.1 0.1 0 0 0];
ub = [2 2 2 20 3];

% Calculate the new coefficients using LSQNONLIN.
options = optimset('Display','iter', 'TolX', 1e-12,'TolFun', 1e-12);
[x,f]=lsqnonlin(@fit_simp,X0,lb,ub,options,X,Y)


In der Funktion:
Code:
sStern = s0 + X(1,:).*T + (X(1,:).*X(3,:))./(2*sqrt(a*b));
diff = a*(1-(X(1,:)/v0).^4 - (sStern./X(2,:)).^2) - Y;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
AlexUlm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.11.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 02.12.2015, 00:44     Titel:
  Antworten mit Zitat      
Hallo Harald,


vielen Dank. Mist, da war ich der Meinung, dass das auch ohne elementweises Berechnen geht.. lag ich wohl falsch!

Funktioniert tadellos.


Vielen Dank!
Alex
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 - 2025 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.