繁体   English   中英

MATLAB:设置优化功能

[英]MATLAB: Setting up an optimization function

我需要使用“优化工具箱”设置第一个优化问题的指导。

我有一个3D表面模型,代表一个长衬衫袖子。 我已经定义了穿过曲面的切割平面。 平面的初始方向是通过PCA获得的:表面模型顶点的第一主成分定义了平面法线向量。 我的优化方法是使平面围绕平面向量u,v(最初是第二和第三主复合体)定向,以最小化平面和曲面模型的交点的横截面积。 我想将方向限制在围绕2个轴的X轴旋转范围内,以缩小求解空间。

我的问题是:

您能为这种情况推荐一个特定的求解器吗? 我可以同时求解两个旋转角度(大约u和v)吗?

我应该求解法线向量的3个分量吗? (同时应用所需的约束)

我是否必须使用嵌套函数设置目标函数以传递曲面模型数据,初始平面方向等?

我正在努力寻找与我的案例类似的在线示例。

感谢您提出的建议,并为我的天真致歉。

我不熟悉您的特定示例,但是大多数最小化器在相当程度上相似,您只需要遵循一些框架即可使优化器正常工作。

这是我在此处调整过但过去使用过的一些功能最小化代码。 fmincon是一个很棒的通用函数最小化器,您可以在参数上设置很多不同的约束(边界,等式约束和不等式约束)。 它并非在所有情况下都是最有效的,但它可能为您提供一个良好的开端。

基本上,您想创建一个初始猜测,设置边界,然后使用对fitfun函数的引用调用fmincon。

function [t2, pd, offset] = t2fit(te, mm)

% Intial guess
x0 = [(-1/p(1))/fact, max(mm) 0]; % t2 pd

% Other constratints
A = []; B = []; Aeq = []; Beq = [];  

% Bounds
LB=[ 1/fact 0 -1 ]; UB = [ 1000/fact 1 1 ];

% Matlab options to the optimizer
opts = optimset('fmincon');
opts = optimset(opts, 'display', 'none');

%  Call the minimization routine 
x = fmincon(@fitfun, x0, A, B, Aeq, Beq, LB, UB, [], opts, te, mm);

% Get the output variables
t2 = x(1); 
pd = x(2); 
offset=x(3);

%%===================================================================
function dd = fitfun(x, te, mm)

%  The current value of the three input parameters
t2 = x(1);
pd = x(2);
offset = x(3);

%  Calculate the model curve
yy = pd .* exp( -te ./ t2 ) + offset;

%  Compute the error between the model curve the  
%  the measured curve -- dd is returned
dd = sqrt(sum( (yy-mm).^2 ));

考虑到您的问题,您可能想要使用lsqcurvefit或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM