matlab - Matlab 多启动与 lsqnonlin
问题描述
我必须遵循代码:
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
我想在 Matlab 中用 lsqnonlin 实现 Multistart。需要做出哪些改变?
解决方案
删除或注释掉以下内容
[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)
注意,trust-region-reflective选项是必需的。
此配置将执行 20 次多启动。
推荐阅读
- python - Python 3.5 with OpenSSL v > 1 MAC OSX Mojave
- java - JSTL 我更改了语言,并且在其他子页面上恢复为默认语言
- python - Python OSError Initializing from file failed when trying to load a simple CSV file
- ecmascript-6 - 如何更改 ECMAscript 版本?括号内的
- user-interface - Unity 精灵在 iPhone X 上被拉伸
- android - MVVM 中 xmlns:tools 和 xmlns:bind 之间的区别
- java - 计算 REST 端点的最大容量?
- python - python中的TCP连接。您知道如何在套接字等待接受连接请求时打印计时器吗?
- python - 在 Raspberry pi 上无法获得 Tensorflow 版本 > 0.11
- sql - 创建其列是查询 Oracle 的结果的视图