Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:建立一个优化函数_Matlab_Mathematical Optimization - Fatal编程技术网

MATLAB:建立一个优化函数

MATLAB:建立一个优化函数,matlab,mathematical-optimization,Matlab,Mathematical Optimization,我需要指导使用优化工具箱设置我的第一个优化问题 我有一个三维表面模型,代表一个长衬衫袖子。我定义了一个穿过曲面的切割平面。通过PCA获得平面的初始方向:曲面模型顶点的第一主分量定义平面法向量。我的优化是围绕平面向量u、v(最初为第二和第三主坐标)确定平面方向,以最小化平面和曲面模型交点的横截面积。我希望将方向限制在围绕两个轴的每个轴旋转X度以内,以缩小解决方案空间 我的问题是: 对于这种情况,您能推荐一个特定的解算器吗?我能同时求解两个旋转角度(关于u和v)吗 我应该求解法向量的3个分量吗?(应

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

我有一个三维表面模型,代表一个长衬衫袖子。我定义了一个穿过曲面的切割平面。通过PCA获得平面的初始方向:曲面模型顶点的第一主分量定义平面法向量。我的优化是围绕平面向量u、v(最初为第二和第三主坐标)确定平面方向,以最小化平面和曲面模型交点的横截面积。我希望将方向限制在围绕两个轴的每个轴旋转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或类似的工具。

谢谢您,布莱希莫斯!你的例子对我制定函数有很大帮助。我真的很感谢你的意见。