matlab 向凸优化非线性约束函数传递参数 fmincon 20
我要求解一个非线性约束的凸优化问题。这里需要向约束条件传递参数然后得到不同的目标函数优化结果。但是我的运行总是报各种错==球大神拯救啊。这是我的目标函数:function...
我要求解一个非线性约束的凸优化问题。这里需要向约束条件传递参数然后得到不同的目标函数优化结果。但是我的运行总是报各种错= =球大神拯救啊。
这是我的目标函数:
function f=a(r)
x=r(1);y=r(2);
f=qfunc(10^(-0.3)*sqrt(2*x))+qfunc((y-1)*sqrt(5000-x));
end
这是目标函数,传递参数为p
function [c,ceq]=b(r,p)
x=r(1);
y=r(2);
c=qfunc(10^(-0.3)*sqrt(2*x))+y-1+(y-2)*(0.0113-(x-1)/(sqrt(2*pi)*(3500^(1.5))))+0.0206*(2*exp(1-y)+exp(y-1-3500*((y-1)^2)))
+0.79*exp(1-y)/sqrt(5000-x)+exp((-1750)*((y-1)^2))/(sqrt(2*pi)*(3500*(y-1)-1+sqrt(3500)))+(-p);
ceq=[];
end
这是主函数:
clear all;
clc
l=[1,1.012];
u=[1500,2.24988];
tar=10^(-1):10^(-1):1;
m=length(tar);
s1=zeros(1,m);
s2=zeros(1,m);
p=zeros(1,m);
fval=zeros(1,m);
for i=1:m
p=tar(i);
ff = optimset('Algorithm', 'interior-point');
[x,fval(i)]=fmincon('a',[1.2,100],[],[],[],[],l,u, 'b',p)
s1(1,i)=tar(i);
s2(1,i)=fval(i);
end
其中我想用数组把得到的p和目标函数每一步得到的优化值都存起来用来后续画图。但是现在的问题是我的程序总是改不好= =非常急,求助啊!!!感谢你全家!!!
clear all; clc l=[1,1.012];u=[1500,2.24988];tar=10^(-1):10^(-2):1;m=length(tar);s1=zeros(m);s2=zeros(m);p=zeros(m);fval=zeros(1,m);for i=1:m p=tar(i); %ff = optimset('Algorithm', 'interior-point'); [r,fval(i)]=fmincon(@a,[1.2,100],[],[],[],[],l,u, @(r) b(p,r)) s1(1,i)=tar(i); s2(1,i)=fval(i);endplot(s1,s2,'r-*');xlabel('漏检概率目标');ylabel('最小虚警概率');grid on;hold on;修改后的主函数
得到的图完全不对 展开
这是我的目标函数:
function f=a(r)
x=r(1);y=r(2);
f=qfunc(10^(-0.3)*sqrt(2*x))+qfunc((y-1)*sqrt(5000-x));
end
这是目标函数,传递参数为p
function [c,ceq]=b(r,p)
x=r(1);
y=r(2);
c=qfunc(10^(-0.3)*sqrt(2*x))+y-1+(y-2)*(0.0113-(x-1)/(sqrt(2*pi)*(3500^(1.5))))+0.0206*(2*exp(1-y)+exp(y-1-3500*((y-1)^2)))
+0.79*exp(1-y)/sqrt(5000-x)+exp((-1750)*((y-1)^2))/(sqrt(2*pi)*(3500*(y-1)-1+sqrt(3500)))+(-p);
ceq=[];
end
这是主函数:
clear all;
clc
l=[1,1.012];
u=[1500,2.24988];
tar=10^(-1):10^(-1):1;
m=length(tar);
s1=zeros(1,m);
s2=zeros(1,m);
p=zeros(1,m);
fval=zeros(1,m);
for i=1:m
p=tar(i);
ff = optimset('Algorithm', 'interior-point');
[x,fval(i)]=fmincon('a',[1.2,100],[],[],[],[],l,u, 'b',p)
s1(1,i)=tar(i);
s2(1,i)=fval(i);
end
其中我想用数组把得到的p和目标函数每一步得到的优化值都存起来用来后续画图。但是现在的问题是我的程序总是改不好= =非常急,求助啊!!!感谢你全家!!!
clear all; clc l=[1,1.012];u=[1500,2.24988];tar=10^(-1):10^(-2):1;m=length(tar);s1=zeros(m);s2=zeros(m);p=zeros(m);fval=zeros(1,m);for i=1:m p=tar(i); %ff = optimset('Algorithm', 'interior-point'); [r,fval(i)]=fmincon(@a,[1.2,100],[],[],[],[],l,u, @(r) b(p,r)) s1(1,i)=tar(i); s2(1,i)=fval(i);endplot(s1,s2,'r-*');xlabel('漏检概率目标');ylabel('最小虚警概率');grid on;hold on;修改后的主函数
得到的图完全不对 展开
展开全部
您好,un为目标函数,它可用前面的方法定义;
x0为初始值;
A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = …
% 计算x处的非线性不等约束 的函数值。
Ceq = …
% 计算x处的非线性等式约束 的函数值。
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息;
grad表示目标函数在x处的梯度;
hessian表示目标函数在x处的Hessiab值。
注意:
1. fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在 fun 函数中提供了梯度(options 参数的 GeadObj 设置为 'on'),并且只有上下界存在或只有等式约束,fmincon 函数将选择大型算法。 当既有等式约束又有梯度约束时,使用中型算法。
2. fmincon 函数的中型算法一般是使用序列二次规划。在每一步迭代中求解二次规划子问题,并用 BFGS 法更新 Lagrangian 乘子和 Hessian 矩阵。
3. fmincon 函数的大型算法采用了subspace trust region 优化算法。这种算法是把目标函数在点x的邻域泰勒展开(x可以认为是人为提供的初始猜测),这个展开的邻域就是所谓的trust region,泰勒展开进行到二阶项为止。
4. fmincon 函数可能会给出局部最优解,这与初始值的选取有关。
x0为初始值;
A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = …
% 计算x处的非线性不等约束 的函数值。
Ceq = …
% 计算x处的非线性等式约束 的函数值。
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息;
grad表示目标函数在x处的梯度;
hessian表示目标函数在x处的Hessiab值。
注意:
1. fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在 fun 函数中提供了梯度(options 参数的 GeadObj 设置为 'on'),并且只有上下界存在或只有等式约束,fmincon 函数将选择大型算法。 当既有等式约束又有梯度约束时,使用中型算法。
2. fmincon 函数的中型算法一般是使用序列二次规划。在每一步迭代中求解二次规划子问题,并用 BFGS 法更新 Lagrangian 乘子和 Hessian 矩阵。
3. fmincon 函数的大型算法采用了subspace trust region 优化算法。这种算法是把目标函数在点x的邻域泰勒展开(x可以认为是人为提供的初始猜测),这个展开的邻域就是所谓的trust region,泰勒展开进行到二阶项为止。
4. fmincon 函数可能会给出局部最优解,这与初始值的选取有关。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询