[英]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.