多元非线性优化 matlab,MATLAB学习(七)求解优化问题:线性规划 非线性规划 拟合与插值 多目标规划...

04c139d08aaa0d0d8a0bb230d130a678.gif

4c9c8a6dd81f3a3aa22e4fd1c4d27e69.png

Minf(x)=-5x1  -4x2  -6x3

x1   -x2    +x3  <=20

3x1  +2x2 +4x3 <=42

3x1 +2x2           <=30

0<=x1,0<=x2,0<=x3

>> c=[-5,-4,-6];

>> A=[1 -1 1

3 2 4

3 2 0];

>> b=[20;42;30];

>> lb=zeros(3,1);

>> [x,fval,exitflag,output,lambda]=linprog(c,A,b,[],[],lb)

Optimization terminated.

x =

0.0000

15.0000

3.0000

fval =

-78.0000

exitflag =

1

output =

iterations: 6

algorithm: 'interior-point-legacy'

cgiterations: 0

message: 'Optimization terminated.'

constrviolation: 0

firstorderopt: 5.8705e-10

lambda =

ineqlin: [3x1 double]

eqlin: [0x1 double]

upper: [3x1 double]

lower: [3x1 double]

>>

0af6f0cf535249c143bae5663d206ba4.png

03dc9180e1a9b0d439ebe81b7852a3ed.png

962de937611ddc7ce7813c21b9cf672a.png

function[c,ceq]=mycon(x)

c1=1.5+x(1)*x(2)-x(1)-x(2);

c2=-x(1)*x(2)-10;

c=[c1;c2]; % 非线性不等式约束

ceq = []; % 非线性等式约束

>> optf=@(x) exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

>> x0=[10;10];lb=[0;0];ub=[inf;inf];

>> options=optimset('Algorithm','active-set','Display','off');

>> [x,fval] = fmincon(optf,x0,[],[],[],[],lb,ub,@mycon,options)

x =

0

1.5000

fval =

8.5000

>>

d2b5b7c5225c801a48e82c5524fbdfe8.png

3c4cc4389d2e15837633d71b0c81fef3.png

>> x=0:.1:5;

>> y=sin(x);

>> f=@(b,x) b(1)*cos(b(2)*x+b(3))+b(4);

>> [a,ss]=lsqcurvefit(f,[1,1,1,1],x,y)

Local minimum found.

Optimization completed because the size of the gradient is less than

the default value of the function tolerance.

a =

-1.0000 1.0000 1.5708 -0.0000

ss =

8.7594e-29

>> xf=0:0.05:8;

yfit=f(a,xf);

plot(xf,sin(xf),'ro',xf,yfit,'b-')

8157cb5e10b9dccb33f7305f92f607cf.png

a984df499e3933fa3bef38e05d387505.png

>> zf=@(a,x) a(1)*x(:,1).^2+a(2)*x(:,2).^2+a(3) %构造拟合函数类型

zf =

@(a,x)a(1)*x(:,1).^2+a(2)*x(:,2).^2+a(3)

>> [X0,Y0]=meshgrid(-2:.2:2);

x0=X0(:);y0=Y0(:);

z0=zf([1,1,-1],[x0,y0]);

>> %用上面的点去拟合估计曲面函数中的参数a:

>> [b,re]=nlinfit([x0,y0],z0,zf,[0,0,0]);

b %显示b,发现恰好是1、1、-1

b =

1.0000 1.0000 -1.0000

9682d5010f80149db385080d25d95f0d.png

>> [X,Y] = meshgrid(-3:.25:3);Z = peaks(X,Y);

[XI,YI] = meshgrid(-3:.125:3);

ZI = interp2(X,Y,Z,XI,YI);

mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15), hold off

axis([-3 3 -3 3 -5 20])

已锁定最新绘图

>>

3732ed5d26a0c732f0d415922e50020e.png

4ace62ac8d15c2991acbb43357a11c47.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值