Matlab 优化停止准则

问题描述

我正在尝试在 Matlab 中求解由 12 个方程组成的系统。因为我对变量的最小值和最大值有限制,所以我使用 lsqnonlin 而不是 fsolve。但是,我希望优化器在输出(每个方程成立点的平方偏差总和)足够接近零时停止。有没有办法指定这样的停止标准?

标准停止标准是关于比较输出值与前一次迭代相比的变化,但这对我来说不太相关。

解决方法

使用 fmincon 函数求解带有 bounded constraints 的方程。

因为你没有提供任何东西,所以按照MATLAB提供的例子:

fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1)); % objective function
lb = [0,0]; % lower bounds
ub = [1,2]; % upper bounds
x0 = (lb + ub)/2; % initial estimate
x = fmincon(fun,x0,[],lb,ub)

这指定了变量的范围 0<x(1)<10<x(2)<2

fmincon 函数还允许您change the default options。要指定输出的容差,请设置它:

options = optimoptions('fmincon','Display','iter','FunctionTolerance',1e-10);

这将 fmincon 选项设置为具有迭代显示,并且具有 1e-10 的 FunctionTolerance。使用这些非标准选项调用 fmincon 函数:

x = fmincon(fun,ub,options)