【发布时间】:2016-02-19 22:14:52
【问题描述】:
我有一个函数 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');
感谢任何指导、改进和建设性的批评。提前致谢。
【问题讨论】:
-
您是否尝试过使用 MATLAB 的优化工具箱来找到最小值...
fminunc或fmincon?您是否尝试过其他算法,例如梯度下降、共轭梯度?你在这里可以做什么和不能做什么?小提示:您提供的第一张图片来自 Andrew Ng 的 Coursera 机器学习课程。 -
我很确定“假全局最小值”是指“局部最小值”。
-
Finding global extrema 是一个涵盖整个数学和计算机科学领域的问题。因此,对于该站点而言,它可能过于宽泛。链接的文章提供了一些很好的起点。
-
@rayryeng 确实,图片来自他的课程,这就是我在脑海中看到的样子。应该有可能附上来源。正如我所提到的,我对 Matlab 还很陌生,在进入代码本身之前可能应该进行更多研究
-
另外,不要调用你的变量
min,这将覆盖内置的min()函数。由于虚数单位,也不鼓励使用i和j。