留待解决的问题:最小绝对值的线性函数回归方法和最小二乘法的适用场景分别是什么呢?
问题描述:
min F(x) subject to: A*x <= b, Aeq*x = beq 线性约束条件
x c(x) <= 0, ceq(x) = 0 非线性约束条件
lb<= x <= ub 约束边界
常用格式:
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
实例1:
Fmin=x1^2+4*x2^2-3*x2*x3+0.5*x3
其中:
3*x1+2*x2+x3<=12
2*x1+3*x2-x3<=15
-10<=x1<=10
-10<=x2<=10
-10<=x3<=10
function f=myfun2(x)
f=x(1)^2+4*x(2)^2-3*x(2)*x(3)+0.5*x(3);
MATLAB主程序:
clc
clear all
A=[3,2,1;2,3,-1];
b=[12;15];
Aeq=[];
beq=[];
lb=[-10;-10;-10];
ub=[10;10;10];
x= fmincon(@(x) myfun2(x),[1;1;1],A,b,Aeq,beq,lb,ub);
结果:
x =
-1.6500
3.4750
10.0000
>> f=x(1)^2+4*x(2)^2-3*x(2)*x(3)+0.5*x(3)
f =
-48.2250
实例2:
Fmin=m1*x1^2+m2*x2^2
n/x1-x2<=0;
其中,m1=1;m2=2;n=1.5;
function f = myfun(x,m)
f = m(1)*x(1)^2 + m(2)*x(2)^2;
function [c,ceq] = mycon(x,n)
c = n/x(1) - x(2);
ceq = [];
MATLAB主程序:
clc
clear all
m = [1,2]; n= 1.5;
options = optimoptions('fmincon','Algorithm','interior-point');
A=[];b=[];Aeq=[];beq=[];lb=[];ub=[];
x = fmincon(@(x) myfun(x,a),[1;2],A,b,Aeq,beq,lb,ub,@(x) mycon(x,n),options)
结果:
x =
1.4565
1.0299
说明:fmincon一般用来求解多元有约束非线性最优化问题,其中约束可以包含等式约束和非线性约束。其全调用格式为:
[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
cvx工具箱只能解决特定形式的问题,如对于包含除号的目标函数,就无能为力了,即使你证明了这个OP是凸的,这时可以考虑使用fmincon函数。
1.精度问题。在我的使用过程中,感觉cvx和fmincon都有精度限制,到10^(-6)左右就不准了。碰到精度问题,我采取做法是同时乘上一个放大因子10^(10)。
2. cvx写起来更方便;
3.fmincon目标函数和约束函数都可以有多个输入变量,而不仅仅是需要优化的那个变量,这样当目标函数和约束函数以及主要模型不在一个文件时,就可以方便传参数。这一点其实不算什么,但是我当时看例程时,目标函数和约束函数文件均只有需要优化的变量,给我造成的错觉是只能将优化变量作为输入参数。