MATLAB:设置优化功能

时间:2014-06-09 12:25:46

标签: matlab mathematical-optimization

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

我有一个代表长衬衫袖子的3D表面模型。我已经定义了一个穿过表面的切割平面。通过PCA获得平面的初始方向:表面模型顶点的第一主成分定义平面法向量。我的优化是将平面定向为平面矢量u,v(最初是第二和第三个原点。比较),以便最小化平面和曲面模型交叉的横截面积。我想将方向约束在围绕每个轴的X度旋转内,以缩小解空间。

我的问题是:

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

我应该解决正常向量的3个组成部分吗? (在应用所需的约束时)

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

我很难在网上找到一个与我的案例类似的例子。

我感谢任何建议,并提前为我的天真道歉。

1 个答案:

答案 0 :(得分:0)

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

这是一些函数最小化代码,我在这里调整了但过去曾使用过。 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或类似的东西。