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

Optimale Lösung eines nichtlinearen Gleichungsystems finden

 

Matlab_lm
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.06.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2020, 10:48     Titel: Optimale Lösung eines nichtlinearen Gleichungsystems finden
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein nichtlineares Gleichungssystem mit 13 Gleichungen aufgestellt und möchte 9 Unbekannte so berechnen, dass alle 13 Gleichungen 0 werden. Meine Punkte, die ich dem Gleichungssystem übergebe lauten:
Code:

% ein Beispiel
d = 17;
x11 = [1;6;6];
x12 = [-1;8;1];
x13 = [-2;14;2];
x21 = [6;-1;11];
x22 = 0.5*[1;1;9];
x23 = 0.25*[2;2;3];

x = [x11;x12;x13;x21;x22;x23];
 

und mein Gleichungssystem sieht so aus:
Code:
F = @(ts,x) [ts(1)^2+ts(2)^2+ts(3)^2-d^2;
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(1)*ts(1)-2*x(2)*ts(2)-2*x(3)*ts(3)-(((ts(7)*x(10))^2+(ts(7)*x(11))^2+(ts(7)*x(12))^2)-(x(1))^2-(x(2))^2-(x(3))^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(4)*ts(1)-2*x(5)*ts(2)-2*x(6)*ts(3)-(((ts(8)*x(13))^2+(ts(8)*x(14))^2+(ts(8)*x(15))^2)-(x(4))^2-(x(5))^2-(x(6))^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(7)*ts(1)-2*x(8)*ts(2)-2*x(9)*ts(3)-(((ts(9)*x(16))^2+(ts(9)*x(17))^2+(ts(9)*x(18))^2)-(x(7))^2-(x(8))^2-(x(9))^2);
             cosd(ts(5))*cosd(ts(4))*ts(7)*x(10)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cosd(ts(6))*sind(ts(4)))*ts(7)*x(11)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(7)*x(12)-x(1)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(7)*x(10)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cosd(ts(6))*cosd(ts(4)))*ts(7)*x(11)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(7)*x(12)-x(2)+ts(2);
             -sind(ts(5))*ts(7)*x(10)+sin(ts(6))*cosd(ts(5))*ts(7)*x(11)+cosd(ts(6))*cosd(ts(5))*ts(7)*x(12)-x(3)+ts(3);
             cosd(ts(5))*cosd(ts(4))*ts(8)*x(13)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*ts(8)*x(14)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(8)*x(15)-x(4)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(8)*x(13)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*ts(8)*x(14)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(8)*x(15)-x(5)+ts(2);
             -sind(ts(5))*ts(8)*x(13)+sind(ts(6))*cosd(ts(5))*ts(8)*x(14)+cosd(ts(6))*cosd(ts(5))*ts(8)*x(15)-x(6)+ts(3);
             cosd(ts(5))*cosd(ts(4))*ts(9)*x(16)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*ts(9)*x(17)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(9)*x(18)-x(7)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(9)*x(16)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*ts(9)*x(17)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(9)*x(18)-x(8)+ts(2);
             -sind(ts(5))*ts(9)*x(16)+sind(ts(6))*cosd(ts(5))*ts(9)*x(17)+cosd(ts(6))*cosd(ts(5))*ts(9)*x(18)-x(9)+ts(3)];
 

Hierbei ist ts ein Vektor mit den Unbekannten, die optimiert werden sollen. Ich habe versucht, dass mit der Funktion lsqcurvefit zu lösen, jedoch kommt nur das richtige Ergebnis raus, wenn ich die richtige Lösung als Startvektor eingebe.
Code:

% Startwert
ts0 = [0;0;0;0;0;0;1;1;1];
% untere Grenze
lb = [-10;-20;-10;-180;-180;-180;0.1;0.1;0.1];
% obere Grenze
ub = [10;20;10;180;180;180;10;10;10];


[ts,resnorm,residual,exitflag,output] = lsqcurvefit(F,ts0,x,x_0,lb,ub);  
%ts = [0;17;0;90;-90;0;1;2;4]; = richtige Lösung, die berechnet werden soll
 


Sobald ich als Startvektor nicht den Lösungsvektor (z.B den in dem Code oben) eingebe, erhalte ich eine Lösung, die sehr weit weg von der gewollten Lösung liegt. Hat jemand eine Idee, wie ich meine Berechnung verändern kann, um auf die richtige Lösung ts = [0;17;0;90;-90;0;1;2;4] zu kommen? Ich hatte schon versucht, dass mit lsqnonlin zu lösen, was jedoch auch nicht gut funktioniert hat. Das Gleichungsystem ist richtig aufgestellt, da für den Beispielfall mit der Lösung das richtige Ergebnis rauskommt. Im Normalfall kenne ich die richtige Lösung jedoch nicht und es wäre git, wenn der Algorithmus mir zuverlässig eine Lösung, die sehr nah an der richtigen Lösung liegt wenn möglich zurückgeben.

Beste Grüße,
Matlab_lm
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.08.2020, 11:47     Titel:
  Antworten mit Zitat      
Hallo,

ich würde hier lsqnonlin statt lsqcurvefit verwenden.

Code:
d = 17;
x11 = [1;6;6];
x12 = [-1;8;1];
x13 = [-2;14;2];
x21 = [6;-1;11];
x22 = 0.5*[1;1;9];
x23 = 0.25*[2;2;3];

x = [x11;x12;x13;x21;x22;x23];
 
F = @(ts) [ts(1)^2+ts(2)^2+ts(3)^2-d^2;
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(1)*ts(1)-2*x(2)*ts(2)-2*x(3)*ts(3)-(((ts(7)*x(10))^2+(ts(7)*x(11))^2+(ts(7)*x(12))^2)-(x(1))^2-(x(2))^2-(x(3))^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(4)*ts(1)-2*x(5)*ts(2)-2*x(6)*ts(3)-(((ts(8)*x(13))^2+(ts(8)*x(14))^2+(ts(8)*x(15))^2)-(x(4))^2-(x(5))^2-(x(6))^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(7)*ts(1)-2*x(8)*ts(2)-2*x(9)*ts(3)-(((ts(9)*x(16))^2+(ts(9)*x(17))^2+(ts(9)*x(18))^2)-(x(7))^2-(x(8))^2-(x(9))^2);
             cosd(ts(5))*cosd(ts(4))*ts(7)*x(10)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cosd(ts(6))*sind(ts(4)))*ts(7)*x(11)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(7)*x(12)-x(1)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(7)*x(10)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cosd(ts(6))*cosd(ts(4)))*ts(7)*x(11)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(7)*x(12)-x(2)+ts(2);
             -sind(ts(5))*ts(7)*x(10)+sin(ts(6))*cosd(ts(5))*ts(7)*x(11)+cosd(ts(6))*cosd(ts(5))*ts(7)*x(12)-x(3)+ts(3);
             cosd(ts(5))*cosd(ts(4))*ts(8)*x(13)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*ts(8)*x(14)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(8)*x(15)-x(4)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(8)*x(13)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*ts(8)*x(14)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(8)*x(15)-x(5)+ts(2);
             -sind(ts(5))*ts(8)*x(13)+sind(ts(6))*cosd(ts(5))*ts(8)*x(14)+cosd(ts(6))*cosd(ts(5))*ts(8)*x(15)-x(6)+ts(3);
             cosd(ts(5))*cosd(ts(4))*ts(9)*x(16)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*ts(9)*x(17)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(9)*x(18)-x(7)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(9)*x(16)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*ts(9)*x(17)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(9)*x(18)-x(8)+ts(2);
             -sind(ts(5))*ts(9)*x(16)+sind(ts(6))*cosd(ts(5))*ts(9)*x(17)+cosd(ts(6))*cosd(ts(5))*ts(9)*x(18)-x(9)+ts(3)];

% Startwert
%ts0 = [0;0;0;0;0;0;1;1;1];
ts0 = [0;17;0;90;-90;0;1;2;4];
% untere Grenze
lb = [-10;-20;-10;-180;-180;-180;0.1;0.1;0.1];
% obere Grenze
ub = [10;20;10;180;180;180;10;10;10];

opts = optimoptions('lsqnonlin', 'MaxFunctionEvaluations', 10000);
[ts,resnorm,residual,exitflag,output] = lsqnonlin(F,ts0,lb,ub, opts);


Das Problem, dass du in ein lokales Minimum läufst, bleibt jedoch.

Wenn keine ausreichend guten Startwerte angegeben werden können, ist die einzige Alternative meines Erachtens globale Optimierung, z.B. über multiStart
https://www.mathworks.com/help/gads.....vefitorlsqnonlinExample-7

Zuverlässig wird aber auch das genau genommen nicht sein. Mit einer ausreichend großen Anzahl an Startpunkten hast du nur eine hohe Wahrscheinlichkeit, die richtige Lösung zu finden.

Die Alternative ist leider nur, in welcher Form auch immer ausreichend gute Startwerte zu ermitteln.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_lm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.06.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2020, 10:19     Titel:
  Antworten mit Zitat      
Danke für die Antwort! Ich habe es mit lsqnonlin ausprobiert, jedoch war auch hier das Ergebnis nicht zufrieden stellend. Jetzt habe ich Multistart ausprobiert, bin mir aber nicht sicher, was ich für "preal" eingeben. Die Unbekannten kenne ich ja eigentlich noch nicht...

Mein Code sieht folgendermaßen aus (mit den selben Startwerten wie oben):
Code:

F = @(ts,x) [ts(1)^2+ts(2)^2+ts(3)^2-d^2;
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(:,1)*ts(1)-2*x(:,2)*ts(2)-2*x(:,3)*ts(3)-(((x(:,10)).^2+(x(:,11)).^2+(x(:,12)).^2)-(x(:,1)).^2-(x(:,2)).^2-(x(:,3)).^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(:,4)*ts(1)-2*x(:,5)*ts(2)-2*x(:,6)*ts(3)-(((x(:,13)).^2+(x(:,14)).^2+(x(:,15)).^2)-(x(:,4)).^2-(x(:,5)).^2-(x(:,6)).^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(:,7)*ts(1)-2*x(:,8)*ts(2)-2*x(:,9)*ts(3)-(((x(:,16)).^2+(x(:,17)).^2+(x(:,18)).^2)-(x(:,7)).^2-(x(:,8)).^2-(x(:,9)).^2);
             cosd(ts(5))*cosd(ts(4))*x(:,10)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cosd(ts(6))*sind(ts(4)))*x(:,11)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*x(:,12)-x(:,1)+ts(1);
             cosd(ts(5))*sind(ts(4))*x(:,10)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cosd(ts(6))*cosd(ts(4)))*x(:,11)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*x(:,12)-x(:,2)+ts(2);
             -sind(ts(5))*x(:,10)+sin(ts(6))*cosd(ts(5))*x(:,11)+cosd(ts(6))*cosd(ts(5))*x(:,12)-x(:,3)+ts(3);
             cosd(ts(5))*cosd(ts(4))*x(:,13)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*x(:,14)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*x(:,15)-x(:,4)+ts(1);
             cosd(ts(5))*sind(ts(4))*x(:,13)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*x(:,14)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*x(:,15)-x(:,5)+ts(2);
             -sind(ts(5))*x(:,13)+sind(ts(6))*cosd(ts(5))*x(:,14)+cosd(ts(6))*cosd(ts(5))*x(:,15)-x(:,6)+ts(3);
             cosd(ts(5))*cosd(ts(4))*x(:,16)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*x(:,17)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*x(:,18)-x(:,7)+ts(1);
             cosd(ts(5))*sind(ts(4))*x(:,16)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*x(:,17)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*x(:,18)-x(:,8)+ts(2);
             -sind(ts(5))*x(:,16)+sind(ts(6))*cosd(ts(5))*x(:,17)+cosd(ts(6))*cosd(ts(5))*x(:,18)-x(:,9)+ts(3)];

         
rng default % For reproducibility
N = 400; % Number of data points
preal = [0,15,0,90,-80,0]; % was setze ich hier ein? Bei meinem Beispiel weiß ich, was als Ergebnis rauskommen soll und kann das hier einsetzten, aber bei der eigentlichen Berechnung weiß ich das nicht

xdata = 5*rand(N,18); % Data points
ydata = F(preal,xdata) + 0.1*randn(12*N+1,1);

%Startvektor
ts0 = 5*ones(6,1);
% untere Grenze
lb = [-10;-20;-10;-180;-180;-180];
% obere Grenze
ub = [10;20;10;180;180;180];

[xfitted,errorfitted] = lsqcurvefit(F,ts0,xdata,ydata,lb,ub)

problem = createOptimProblem('lsqcurvefit','x0',ts0,'objective',F,'lb',lb,'ub',ub,'xdata',xdata,'ydata',ydata);

ms = MultiStart('PlotFcns',@gsplotbestf);
[xmulti,errormulti] = run(ms,problem,50)
 


Wenn ich für preal nicht etwas einsetzte, was in der Nähe der Lösung liegt wird die richtige Lösung ts=[0;17;0;90;-90;0] nicht gefunden. Hat jemand eine Idee, was ich hier noch verändern kann, um vielleicht näher an die Lösung, die ich suche, ranzukommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.08.2020, 11:32     Titel:
  Antworten mit Zitat      
Hallo,

wieso denn jetzt wieder lsqcurvefit? Das ist nicht wirklich sinnvoll, wenn man keine Kurvenanpassung machen möchte.

Meine Empfehlung wäre wirklich MultiStart um lsqnonlin herum.

Ich habe das mal mehrfach laufen lassen und finde jedes Mal eine Lösung (errormulti = 0), aber jedes Mal eine andere. Die Lösung ist also nicht eindeutig und man müsste wissen, was die gewünschte Lösung gegenüber den anderen auszeichnet.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_lm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.06.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2020, 11:39     Titel:
  Antworten mit Zitat      
Ja ich habe das erstmal versucht so aufzubauen, wie auf der Seite für MultiStart um das auszuprobieren, aber danach wollte ich auch wieder lsqnonlin benutzen...

Kannst du deinen Code hier mal reinstellen, mit dem du immer unterschiedliche, aber gut Lösungen mit errormulti = 0 Lösungen rausbekommen hast? Ich bekomme das irgendwie nicht so aufgestellt, dass etwas gutes bei rauskommt. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.08.2020, 11:47     Titel:
  Antworten mit Zitat      
Hallo,

Code:
d = 17;
x11 = [1;6;6];
x12 = [-1;8;1];
x13 = [-2;14;2];
x21 = [6;-1;11];
x22 = 0.5*[1;1;9];
x23 = 0.25*[2;2;3];

x = [x11;x12;x13;x21;x22;x23];
 
F = @(ts) [ts(1)^2+ts(2)^2+ts(3)^2-d^2;
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(1)*ts(1)-2*x(2)*ts(2)-2*x(3)*ts(3)-(((ts(7)*x(10))^2+(ts(7)*x(11))^2+(ts(7)*x(12))^2)-(x(1))^2-(x(2))^2-(x(3))^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(4)*ts(1)-2*x(5)*ts(2)-2*x(6)*ts(3)-(((ts(8)*x(13))^2+(ts(8)*x(14))^2+(ts(8)*x(15))^2)-(x(4))^2-(x(5))^2-(x(6))^2);
             ts(1)^2+ts(2)^2+ts(3)^2-2*x(7)*ts(1)-2*x(8)*ts(2)-2*x(9)*ts(3)-(((ts(9)*x(16))^2+(ts(9)*x(17))^2+(ts(9)*x(18))^2)-(x(7))^2-(x(8))^2-(x(9))^2);
             cosd(ts(5))*cosd(ts(4))*ts(7)*x(10)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cosd(ts(6))*sind(ts(4)))*ts(7)*x(11)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(7)*x(12)-x(1)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(7)*x(10)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cosd(ts(6))*cosd(ts(4)))*ts(7)*x(11)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(7)*x(12)-x(2)+ts(2);
             -sind(ts(5))*ts(7)*x(10)+sin(ts(6))*cosd(ts(5))*ts(7)*x(11)+cosd(ts(6))*cosd(ts(5))*ts(7)*x(12)-x(3)+ts(3);
             cosd(ts(5))*cosd(ts(4))*ts(8)*x(13)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*ts(8)*x(14)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(8)*x(15)-x(4)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(8)*x(13)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*ts(8)*x(14)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(8)*x(15)-x(5)+ts(2);
             -sind(ts(5))*ts(8)*x(13)+sind(ts(6))*cosd(ts(5))*ts(8)*x(14)+cosd(ts(6))*cosd(ts(5))*ts(8)*x(15)-x(6)+ts(3);
             cosd(ts(5))*cosd(ts(4))*ts(9)*x(16)+(sind(ts(6))*sind(ts(5))*cosd(ts(4))-cos(ts(6))*sind(ts(4)))*ts(9)*x(17)+(cosd(ts(6))*sind(ts(5))*cosd(ts(4))+sind(ts(6))*sind(ts(4)))*ts(9)*x(18)-x(7)+ts(1);
             cosd(ts(5))*sind(ts(4))*ts(9)*x(16)+(sind(ts(6))*sind(ts(5))*sind(ts(4))+cos(ts(6))*cosd(ts(4)))*ts(9)*x(17)+(cosd(ts(6))*sind(ts(5))*sind(ts(4))-sind(ts(6))*cosd(ts(4)))*ts(9)*x(18)-x(8)+ts(2);
             -sind(ts(5))*ts(9)*x(16)+sind(ts(6))*cosd(ts(5))*ts(9)*x(17)+cosd(ts(6))*cosd(ts(5))*ts(9)*x(18)-x(9)+ts(3)];

% Startwert
ts0 = [0;0;0;0;0;0;1;1;1];
%ts0 = [0;17;0;90;-90;0;1;2;4];
% untere Grenze
lb = [-10;-20;-10;-180;-180;-180;0.1;0.1;0.1];
% obere Grenze
ub = [10;20;10;180;180;180;10;10;10];

opts = optimoptions('lsqnonlin', 'MaxFunctionEvaluations', 10000);
%[ts,resnorm,residual,exitflag,output] = lsqnonlin(F,ts0,lb,ub, opts);

problem = createOptimProblem('lsqnonlin', 'x0', ts0, 'objective',F,'lb',lb,'ub',ub);

ms = MultiStart();
[xmulti,errormulti] = run(ms,problem,50)

Es kommt zwar nicht genau 0 raus, aber etwas wie 1e-21. Das sollte reichen? ;)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.