matlab如何求解带参数的非线性规划

matlab如何求解带参数的非线性规划,第1张

假设你的参数为:C,其声明和调用方法如下

nonlfunm

function f=nonlfun(x,C)

f=-2x(1) -3 x(2) -5 x(3);

nonlconm

function [c,ceq]=nonlcon (x,C)

ceq=[x(1)^2+ x(2)^2+x(3)^2-1];

c=[];

[x,fval]=fmincon(@nonlfun,[1,1,1],[],[],[],[],[0,0,0],[1,1,1], @nonlcon,C)

这样就可以实现带参数求优化,我没有调试,希望对你有帮助。

1 把[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB,'mycon')

改为

[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB)

我不是太清楚你为什么要加mycon没用吧。

2 目标函数加负号(因为fmincon是求最小值)

function f=fun(x)

f=-(34854x(1)+62879x(3)+56932x(4))/(34854x(1)-4952x(2)+62879x(3)+56932x(4)-24846x(5));

3 命令行

x0=[1;0;0;0;0];

A=[];b=[];

Aeq=[1 1 1 1 1];beq=[1];

VLB=[0 0 0 0 0];

VUB=[1 1 1 1 1];

[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB);

xmin=x

fmin=-fval

有三个函数把小数转化成整数:floor,ceil,round。floor是比原数小的ceil是比原数大的round是四舍五入根据你的规划条件看则样取比较合适,如果你担心转完以后超出规划区域,用一些判断语句来解决

这个函数的基本形式为

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

其中fun为你要求最小值的函数,可以单写一个文件设置函数,如以上给的例子中。

1如果fun中有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在fun 中统一都是用x(1),x(2)x(n) 表示的。

2 x0, 表示初始的猜测值,大小要与变量数目相同

3 A b 为线性不等约束,Ax <= b, A应为nn阶矩阵,学过线性代数应不难写出A和b

4 Aeq beq为线性相等约束,Aeqx = beq。 Aeq beq同上可求

5 lb ub为变量的上下边界,正负无穷用 -Inf和Inf表示, lb ub应为N阶数组

6 nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq

可按下面的例子设置

function [c,ce] = nonlcon1(x)

c = -x(1)+x(2)^2-4;

ce = []; % no nonlinear equality constraints

7,最后是options,可以用OPTIMSET函数设置,见上例

具体可见OPTIMSET函数的帮助文件。

对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:

options(1)-参数显示控制(默认值为0)。等于1时显示一些结果。

options(2)-优化点x的精度控制(默认值为1e-4)。 options = optimset('TolX',1e-8)

options(3)-优化函数F的精度控制(默认值为1e-4)。options = optimset('TolFun',1e-10)

options(4)-违反约束的结束标准(默认值为1e-6)。

options(5)-算法选择,不常用。

options(6)-优化程序方法选择,为0则为BFCG算法,为1则采用DFP算法。

options(7)-线性插值算法选择,为0则为混合插值算法,为1则采用立方插算法。

options(8)-函数值显示 (目标—达到问题中的Lambda )

options(9)-若需要检测用户提供的梯度,则设为1。

options(10)-函数和约束估值的数目。

options(11)-函数梯度估值的个数。

options(12)-约束估值的数目。

options(13)-等约束条件的个数。

options(14)-函数估值的最大次数(默认值是100×变量个数) options(15)-用于目标—达到问题中的特殊目标。

options(16)-优化过程中变量的最小有限差分梯度值。

options(17)- 优化过程中变量的最大有限差分梯度值。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12184533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存