tho*_*s87 3 matlab function fminsearch
我在Matlab中有此函数,应该通过改变inValues的两个初始设置值来找到minValuePossible的最小值。如何在尝试查找最小值时将fmin搜索功能设置为不尝试负值?另外,如何在尝试找到最小值时设置fminsearch函数执行的不同变化的数量?因为当前它尝试在两个inValue的大约20种不同组合中进行某处,然后完成。也许定义它改变每个值的数量?我该怎么做?
function Valueminimiser
inValues = [50,50];
minValuePossible = fminsearch(@minimiser, inValues);
function result = minimiser(inValues)
x=inValues(1);
y=inValues(2);
RunMode = 2;
ValueOne = x;
ValueTwo = y;
[maxSCRAout] = main(RunMode,ValueOne,ValueTwo);
result = minValuePossible;
end
end
Run Code Online (Sandbox Code Playgroud)
如何在尝试查找最小值时将fmin搜索功能设置为不尝试负值?
在开始时添加最小化函数值的约束。如果遇到此限制,则返回最小化函数的巨大函数值。这将防止fminsearch考虑不符合您需求的数字:
function result = minimiser(inValues)
if (sum(inValues < 0) > 1) % check if there is any negative number in input variable
result = hugeValue; % give a big value to the result
return; % return to fminsearch - do not execute the rest of the code
end
x=inValues(1);
y=inValues(2);
RunMode = 2;
ValueOne = x;
ValueTwo = y;
[maxSCRAout] = main(RunMode,ValueOne,ValueTwo);
result = minValuePossible;
Run Code Online (Sandbox Code Playgroud)
另外,如何在尝试找到最小值时设置fminsearch函数执行的不同变化的数量?
您可以使用optimset函数定义fminsearch的选项。optimset'MaxFunEvals'的参数是最大评估数-请注意,此提示甚至包括您约束的值,因此,如果您担心准确性,则按@slayton的建议设置'TolX'可能会更好。
options = optimset('MaxFunEvals',numberOfVariations);
minValuePossible = fminsearch(@minimiser, inValues,options);
Run Code Online (Sandbox Code Playgroud)