Matlab multi-start с lsqnonlin - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно следующий код:

lb=[-10,16,-3,-10,2,8,-10,-7,-3,-10,2,-13,-20,-20,-20,-20];     %lower Bound            
ub=[-5,20,3,-5,8,15,-5,-3,3,-5,8,-8,20,20,20,20];               %upper Bound    
x0 = [-8.4,18,0,-9,5,11,-9,-6,0,-9,5,-11,10,-12,11,-11];                %Startwerte 

f_schnittgeraden=...
    @(x)f_root2d_schnittgeraden(x,stzpkt,w,Kantenlaenge,Winkel);

[x,res] = lsqnonlin(f_schnittgeraden,x0,lb,ub); 

с f_root2d_schnittgeraden:

function F = f_root2d_schnittgeraden(x,stzpkt,w,Kantenlaenge,Winkel)

%Schnittgerade 1
F(1) = stzpkt(1,1) + x(13)*w(1,1)-x(1); %x13 ist dieser Parameter vor dem Richtungsvektor. Dieser ist für eine Gerade immer gleich
F(2) = stzpkt(2,1) + x(13)*w(2,1)-x(2);
F(3) = stzpkt(3,1) + x(13)*w(3,1)-x(3);
%Schnittgerade 2
F(4) = stzpkt(1,2) + x(14)*w(1,2)-x(4); %x14 ist dieser Parameter von dem Richtungsvektor
F(5) = stzpkt(2,2) + x(14)*w(2,2)-x(5);
F(6) = stzpkt(3,2) + x(14)*w(3,2)-x(6);
...
F(12)=...
end

Я хочу реализовать Multistart с lsqnonlin в Matlab.какие изменения нужно внести?

1 Ответ

0 голосов
/ 11 июня 2018

Удалите или закомментируйте следующее

[x,res] = lsqnonlin(f_schnittgeraden,x0,lb,ub);

И добавьте следующее

rng default                  % For reproducibility
opts = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective');
problem = createOptimProblem('lsqnonlin','objective',...
    f_schnittgeraden,'x0',x0,'lb',lb,'ub',ub,'options',opts);
ms = MultiStart;
[x,f] = run(ms,problem,20)

Примечание, опция области доверия требуется.

Эта конфигурация будет выполнять 20 мультистартов.

...