关于用matlab求非线性不等式约束求最值的问题,尝试使用二分法解决,问题描述主要如下图所示
我使用了fmincon函数,代码如下
fun=@(x)(x(1)-1)*(psi(x(1))-psi(x(1)+x(2)))+(x(2)-1)*(psi(x(2))-psi(x(1)+x(2)))-log(beta(x(1),x(2)));
nonlcon=@sttwo;
A=[];
b=[];
Aeq=[];
beq=[];
lb=[0 0];
ub=[Inf Inf];
x0=[1 1];
options=optimoptions('fmincon','Display','notify','Algorithm','interior-point');
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
其中非线性约束函数sttwo如下
function [c,ceq]=sttwo(x)
c=[0.5-x(1)/(x(1)+x(2));
1/34-x(1)/(x(1)+x(2)+29)];
ceq=[];
end
而我最终运行结果[a,b]=[1.004,0.996],而真正答案是[0.9063,0.8156],请问代码应该如何编写?
看出来了,fun是目标函数,nonlcon是非线性约束函数,A、b、Aeq、beq、lb和ub是约束条件,x0是初始点,options是优化选项。在nonlcon函数中,c是约束条件,ceq是等式约束条件。
该代码段部分展示了一个非线性约束优化问题的约束条件。该问题的目标是求解使得目标函数最小的变量值,同时满足一定的约束条件。其中,不等式约束条件为空,而等式约束条件通过两个函数ceq(1)和ceq(2)来表示。该问题的完整求解代码需要进一步构造和补充。
检查非线性约束函数的正确性:首先需要确认非线性约束函数 sttwo 的正确性,可以将其单独测试一下,看看求解器是否能够正确地返回满足约束条件的解。
调整初始点 x0:初始点 x0 的选择可能会影响求解结果,可以尝试不同的初始值,看看是否能够得到更接近真实答案的解。
调整求解器参数:fmincon 函数提供了多个参数可供调节,例如迭代次数、容许误差等,可以尝试调整这些参数,以获得更好的求解效果。具体参数的含义和取值范围可以参考 MATLAB 文档。
尝试其他求解器:如果以上方法都无法得到满意的结果,可以尝试使用其他的求解器进行求解,例如 patternsearch、fminunc 等,以获得比较好的求解效果。
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
根据您提供的截图,您在使用Adams Car进行稳态回转定半径工况的仿真时,设置了纵向加速度目标为0.02g(即0.1962 m/s²)。然而,您观察到仿真曲线上的纵向加速度不断增加,与设定值不符。
可能的原因是系统存在一些误差和不确定性因素,导致实际仿真结果与设定值略有偏差。以下是一些可能的影响因素:
针对这种情况,建议您进行以下步骤:
请注意,以上只是一些可能的原因和建议,具体情况需要根据您的实际仿真模型和参数来进行分析和调整。
MATLAB用fmincon函数求非线性约束下的最优化问题
%方式一:分成多个文件
function f=fminxy(t)
x=t(1);y=t(2);
f=x*x*x-y*y*y+2*x*x+x*y;
end
%%以上代码生成fminxy文件
function [c d]=fcontr(t)
x=t(1);y=t(2);
c=x*x+y*y-6;
d=x*y-2;
end
%%以上文件生成fcontr文件
>> [x,fval,exitflag]=fmincon('fminxy',[1 2],[],[],[],[],[],[],'fcontr')
%fmincon( fun, x0, A, b,Aeq,beq,lb,ub, nonlcon) A是初始值,fmincon的初始值x0可以任意取,只要保证为实数就行。
x =
0.8740 2.2882 %函数最小值时x,y的值
fval =
-7.7858 %函数最小值
exitflag =
1 %一阶最优性条件满足容许范围,既是结果正确
%方式二:整合成一个文件
function x= findOpt(a,b)
x=fmincon(@(t) fminxy(t),[a b],[],[],[],[],[],[],@(t) fcontr(t))
end
function f=fminxy(t)
x=t(1);y=t(2);
f=x*x*x-y*y*y+2*x*x+x*y;
end
function [c d]=fcontr(t)
x=t(1);y=t(2);
c=x*x+y*y-6;
d=x*y-2;
end
%以上代码生成findOpt文件
>> x=findOpt(2,2)
x =
0.8740 2.2882
非线性的最值求解问题,包括有约束和无约束最优化求解,其中有约束最优化问题,即求取一组x,使得目标函数 f(x)为最小,且满足约束条件G(x)≤0 。约束条件可以进一步细化为:线性不等式约束、线性等式约束、非线性不等式约束、非线性等式约束以及x的下界和上界。
求有约束条件下最小值的函数为:
[ xmin,fmin ]= fmincon (filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
其中,xmin 、fmin 、filename 、x0 和 option 的含义与求最小值函数相同。
检查调整一下初始条件、边界条件、仿真时间步长等参数,不同的参数会影响输出结果