- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个函数 J(x,y,z) 可以给出这些坐标的结果。这个函数是凸的。我需要的是找到这个巨大矩阵的最小值。起初我试图遍历所有这些,计算然后用 min 函数搜索,但这需要太长时间......
所以我决定利用凸性。
取一组随机(暂时)坐标,这将是我的 3x3x3 小矩阵的中心,找到局部最小值并将其作为下一个矩阵的中心。这将一直持续到我们达到全局最小值。
另一个问题是函数不是完全凸的,所以也会出现这个问题
所以我在想一个控制措施,当它找到一个假的最小值时,增加搜索范围以确保它。你会如何建议我去做呢?这种方法好吗?还是我应该看看其他东西?
这是我自己开始的,但我对 Matlab 还很陌生,我不确定如何继续。
clear all
clc
min=100;
%the initial size of the search matrix 2*level +1
level=1;
i=input('Enter the starting coordinate for i (X) : ');
j=input('Enter the starting coordinate for j (Y) : ');
k=input('Enter the starting coordinate for k (Z) : ');
for m=i-level:i+level
for n=j-level:j+level
for p=k-level:k+level
A(m,n,p)=J(m,n,p);
if A(m,n,p)<min
min=A(m,n,p);
end
end
end
end
display(min, 'Minim');
[r,c,d] = ind2sub(size(A),find(A ==min));
display(r,'X');
display(c,'Y');
display(d,'Z');
感谢任何指导、改进和建设性批评。提前致谢。
最佳答案
试试 fminsearch
,因为它相当通用且易于使用。如果您可以匿名指定您的函数,这将特别容易。例如:
aFunc = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2
然后使用 fminsearch
:
[x,fval] = fminsearch( aFunc, [-1.2, 1]);
如果您的 3 维函数 J(x,y,z) 可以匿名描述或描述为常规函数,那么您可以尝试 fminsearch
。输入采用向量,因此您需要将函数编写为 J(X),其中 X 是长度为 3 的向量,因此 x=X(1), y=X(2), z=X(3)
fminseach
可能会失败,尤其是当起点不在解决方案附近时。改进初始起点通常更好。例如,下面的代码对起始向量周围的一个补丁进行采样,通常会提高找到全局最小值的机会。
% deltaR is used to refine the start vector with scatter min search over
% region defined by a path of [-deltaR+starVec(i):dx:deltaR+startVec(i)] on
% a side.
% Determine dx using maxIter.
maxIter = 1e4;
dx = max( ( 2*deltaR+1)^2/maxIter, 1/8);
dim = length( startVec);
[x,y] = meshgrid( [-deltaR:dx:deltaR]);
xV = zeros( length(x(:)), dim);
% Alternate patches as sequential x-y grids.
for ii = 1:2:dim
xV(:, ii) = startVec(ii) + x(:);
end
for ii = 2:2:dim
xV(:, ii) = startVec(ii) + y(:);
end
% Find the scatter min index to update startVec.
for ii = 1: length( xV)
nS(ii)=aFunc( xV(ii,:));
end
[fSmin, iw] = min( nS);
startVec = xV( iw,:);
fSmin = fSmin
startVec = startVec
[x,fval] = fminsearch( aFunc, startVec);
You can run a 2 dimensional test case f(x,y)=z on AlgorithmHub .该应用程序在 Octave 中运行上述代码。您也可以从该网站编辑内联函数(甚至可能尝试您的问题)。
关于algorithm - 使用小矩阵在巨大的凸矩阵中实现全局最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516073/
我正在尝试对具有 950 个样本和大约 5000 个特征的数据使用套索优化。套索函数是 $(1/(2 * numberofsamples)) * ||y - Xw||^2_2 + alpha * ||
我需要列出位于给定坐标精度(比如 1)的特定多边形内部的所有坐标。这意味着,多边形边界的所有坐标都将是整数。多边形可以是凸面或凹面。 我有边界的所有坐标,coords[n][2] 这是我解决问题的方法
我的 Ubuntu 服务器上运行着一个 squid 3.3。在我的 squid ssl-bump 配置中,由于 squid3 -k 重新配置,我收到以下错误。 错误: 致命:错误的 squid.con
抱歉我的英语不好。 我想找出大量线性方程的下包络线。这映射到在其双平面中找到上(凸)壳的问题。 据我调查,有几种方法可以找到上层船体,但它们仅适用于 2-3 维。 但是,我的数据是高维的,有可用的库来
这个有点难解释。我有一个整数列表。因此,例如,[1, 2, 4, 5, 8, 7, 6, 4, 1] - 当根据元素编号绘制时,它类似于凸图。我如何以某种方式从列表中提取此“形状”特征?它不必特别准确
我想创建类似图片的东西,#body 位于#leg1 和#leg2 之间,其中三个应该水平对齐到底部。知道如何实现这一目标吗?我调整了一些属性,例如 display:inline 或 float:lef
我是一名优秀的程序员,十分优秀!