大连理工优化方法大作业MATLAB编程

大连理工优化方法大作业MATLAB编程
大连理工优化方法大作业MATLAB编程

function [x,dk,k]=fjqx(x,s)

flag=0;

a=0;

b=0;

k=0;

d=1;

while(flag==0)

[p,q]=getpq(x,d,s);

if (p<0)

b=d;

d=(d+a)/2;

end

if(p>=0)&&(q>=0)

dk=d;

x=x+d*s;

flag=1;

end

k=k+1;

if(p>=0)&&(q<0)

a=d;

d=min{2*d,(d+b)/2};

end

end

%定义求函数值的函数fun,当输入为x0=(x1,x2)时,输出为f

function f=fun(x)

f=(x(2)-x(1)^2)^2+(1-x(1))^2;

function gf=gfun(x)

gf=[-4*x(1)*(x(2)-x(1)^2)+2*(x(1)-1),2*(x(2)-x(1)^2)];

function [p,q]=getpq(x,d,s)

p=fun(x)-fun(x+d*s)+0.20*d*gfun(x)*s';

q=gfun(x+d*s)*s'-0.60*gfun(x)*s';

结果:

s=[-1,1];

[x,dk,k]=fjqx(x,s)

x =-0.0000 1.0000

dk =1.1102e-016

k =54

function f= fun( X )

%所求问题目标函数

f=X(1)^2-2*X(1)*X(2)+2*X(2)^2+X(3)^2+ X(4)^2- X(2)*X(3)+2*X(1)+3*X(2)-X(3);

end

function g= gfun( X )

%所求问题目标函数梯度

g=[2*X(1)-2*X(2)+2,-2*X(1)+4*X(2)-X(3)+3,2*X(3)-X(2)-1,2*X(4)];

end

function [ x,val,k ] = frcg( fun,gfun,x0 )

%功能:用FR共轭梯度法求无约束问题最小值

%输入:x0是初始点,fun和gfun分别是目标函数和梯度

%输出:x、val分别是最优点和最优值,k是迭代次数

maxk=5000;%最大迭代次数

rho=0.5;sigma=0.4;

k=0;eps=10e-6;

n=length(x0);

while(k

g=feval(gfun,x0);%计算梯度

itern=k-(n+1)*floor(k/(n+1));

itern=itern+1;

%计算搜索方向

if(itern==1)

d=-g;

beta=(g*g')/(g0*g0');

d=-g+beta*d0;

gd=g'*d;

if(gd>=0.0)

d=-g;

end

end

if(norm(g)

break;

end

m=0;mk=0;

while(m<20)

if(feval(fun,x0+rho^m*d)

end

m=m+1;

end

x0=x0+rho^mk*d;

val=feval(fun,x0);

g0=g;d0=d;

k=k+1;

end

x=x0;

val=feval(fun,x0);

end

结果:

>> x0=[0,0,0,0];

>> [ x,val,k ] = frcg( 'fun','gfun',x0 )

x =

-4.0000 -3.0000 -1.0000 0

val =

-8.0000

k =

21

或者

function [x,f,k]=second(x)

k=0;

dk=dfun(x);

g0=gfun(x);

s=-g0;

x=x+dk*s;

g1=gfun(x);

while(norm(g1)>=0.02)

k=0;

g0=gfun(x);

s=-g0;

x=x+dk*s;

g1=gfun(x);

else if(k<3)

u=((norm(g1))^2)/(norm(g0)^2);

s=-g1+u*s;

k=k+1;

g0=g1;

dk=dfun(x);

x=x+dk*s;

g1=gfun(x);

end

end

f=fun(x);

end

function f=fun(x)

f=x(1)^2-2*x(1)*x(2)+2*x(2)^2+x(3)^2+x(4)^2-x(2)*x(3)+2*x(1)+3*x( 2)-x(3);

function gf=gfun(x)

gf=[2*x(1)-2*x(2)+2,-2*x(1)+4*x(2)-x(3)+3,2*x(3)-x(2)-1,2*x(4)]; function [p,q]=con(x,d)

ss=-gfun(x);

p=fun(x)-fun(x+d*ss)+0.2*d*gfun(x)*(ss)';

q=gfun(x+d*ss)*(ss)'-0.6*gfun(x)*(ss)';

function dk=dfun(x)

flag=0;

a=0;

d=1;

while(flag==0)

[p,q]=con(x,d);

if (p<0)

b=d;

d=(d+a)/2;

end

if(p>=0)&&(q>=0)

dk=d;

flag=1;

end

if(p>=0)&&(q<0)

a=d;

d=min{2*d,(d+b)/2};

End

结果:x=[0,0,0,0];

>> [x,f,k]=second(x)

x =-4.0147 -3.0132 -1.0090 0

f = -7.9999

k = 1

function [f,x,k]=third_1(x)

k=0;

g=gfun(x);

while(norm(g)>=0.001)

s=-g;

dk=dfun(x,s);

x=x+dk*s;

k=k+1;

g=gfun(x);

f=fun(x);

end

function f=fun(x)

f=x(1)+2*x(2)^2+exp(x(1)^2+x(2)^2);

function gf=gfun(x)

gf=[1+2*x(1)*exp(x(1)^2+x(2)^2),4*x(2)+2*x(2)*(x(1)^2+x(2)^2)]; function [j_1,j_2]=con(x,d,s)

j_1=fun(x)-fun(x+d*s)+0.1*d*gfun(x)*(s)';

j_2=gfun(x+d*s)*(s)'-0.5*gfun(x)*(s)';

function dk=dfun(x,s)%获取步长

flag=0;

a=0;

while(flag==0)

[p,q]=con(x,d,s);

if (p<0)

b=d;

d=(d+a)/2;

end

if(p>=0)&&(q>=0)

dk=d;

flag=1;

end

if(p>=0)&&(q<0)

a=d;

d=min{2*d,(d+b)/2};

end

end

结果:

x=[0,1];

[f,x,k]=third_1(x)

f =0.7729

x = -0.4196 0.0001

k =8

(1)程序:

function [f,x,k]=third_2(x)

k=0;

H=inv(ggfun(x));

g=gfun(x);

while(norm(g)>=0.001)

s=(-H*g')';

dk=dfun(x,s);

x=x+dk*s;

k=k+1;

g=gfun(x);

f=fun(x);

end

function f=fun(x)

f=x(1)+2*x(2)^2+exp(x(1)^2+x(2)^2);

function gf=gfun(x)

gf=[1+2*x(1)*exp(x(1)^2+x(2)^2),4*x(2)+2*x(2)*(x(1)^2+x(2)^2)]; function ggf=ggfun(x)

ggf=[(4*x(1)^2+2)*exp(x(1)^2+x(2)^2),4*x(1)*x(2)*exp(x(1)^2+x(2)^ 2);

4*x(1)*x(2)*exp(x(1)^2+x(2)^2),4+(4*x(2)^2+2)*exp(x(1)^2+x(2)^2)]

;

function [j_1,j_2]=con(x,d,s)

j_1=fun(x)-fun(x+d*s)+0.1*d*gfun(x)*(s)'; j_2=gfun(x+d*s)*(s)'-0.5*gfun(x)*(s)'; function dk=dfun(x,s)% 步长获取

flag=0;

a=0;

d=1;

b=10000;

while(flag==0)

[p,q]=con(x,d,s);

if (p<0)

b=d;

d=(d+a)/2;

end

if(p>=0)&&(q>=0)

dk=d;

flag=1;

end

if(p>=0)&&(q<0)

a=d;

if 2*d>=(d+b)/2

d=(d+b)/2;

else d=2*d;

end

end

End

结果:

x=[0,1];

[f,x,k]=third_2(x)

f =0.7729

x = -0.4193 0.0001

k =8

(2)程序:

function [f,x,k]=third_3(x)

k=0;

X=cell(2);

g=cell(2);

X{1}=x;

H=eye(2);

g{1}=gfun(X{1});

s=(-H*g{1}')';

dk=dfun(X{1},s);

X{2}=X{1}+dk*s;

g{2}=gfun(X{2});

while(norm(g{2})>=0.001)

dx=X{2}-X{1};

dg=g{2}-g{1};

v=dx/(dx*dg')-(H*dg')'/(dg*H*dg');

h1=H*dg'*dg*H/(dg*H*dg');

h2=dx'*dx/(dx*dx');

h3=dg*H*dg'*v'*v;

H=H-h1+h2+h3;

k=k+1;

X{1}=X{2};

g{1}=gfun(X{1});

s=(-H*g{1}')';

dk=dfun(X{1},s);

X{2}=X{1}+dk*s;

g{2}=gfun(X{2});

norm(g{2});

f=fun(x);

x=X{2};

end

function f=fun(x)

f=x(1)+2*x(2)^2+exp(x(1)^2+x(2)^2);

function gf=gfun(x)

gf=[1+2*x(1)*exp(x(1)^2+x(2)^2),4*x(2)+2*x(2)*(x(1)^2+x(2)^2)]; function ggf=ggfun(x)

ggf=[(4*x(1)^2+2)*exp(x(1)^2+x(2)^2),4*x(1)*x(2)*exp(x(1)^2+x(2)^ 2);4*x(1)*x(2)*exp(x(1)^2+x(2)^2),4+(4*x(2)^2+2)*exp(x(1)^2+x(2)^ 2);

function [p,q]=con(x,d,s)

p=fun(x)-fun(x+d*s)+0.1*d*gfun(x)*(s)';

q=gfun(x+d*s)*(s)'-0.5*gfun(x)*(s)';

function dk=dfun(x,s)

flag=0;

a=0;

d=1;

b=10000;

while(flag==0)

[p,q]=con(x,d,s);

if (p<0)

b=d;

d=(d+a)/2;

end

if(p>=0)&&(q>=0)

dk=d;

end

if(p>=0)&&(q<0)

a=d;

if 2*d>=(d+b)/2

d=(d+b)/2;

else d=2*d;

end

end

end

结果:

x=[0,1];

[f,x,k]=third_3(x)

f =0.7729

x = -0.4195 0.0000

k=6

function callqpact

H=[2 0; 0 2];

c=[-2 -5]';

Ae=[ ]; be=[ ];

Ai=[1 -2; -1 -2; -1 2;1 0;0 1];

bi=[-2 -6 -2 0 0]';

x0=[0 0]';

[x,lambda,exitflag,output]=qpact(H,c,Ae,be,Ai,bi,x0)

function [x,lamk,exitflag,output]=qpact(H,c,Ae,be,Ai,bi,x0) epsilon=1.0e-9; err=1.0e-6;

k=0; x=x0; n=length(x); kmax=1.0e3;

ne=length(be); ni=length(bi); lamk=zeros(ne+ni,1);

index=ones(ni,1);

for (i=1:ni)

if(Ai(i,:)*x>bi(i)+epsilon), index(i)=0; end

end

while(k<=kmax)

if(ne>0), Aee=Ae; end

for(j=1:ni)

if(index(j)>0), Aee=[Aee; Ai(j,:)]; end end

gk=H*x+c;

[m1,n1] = size(Aee);

[dk,lamk]=qsubp(H,gk,Aee,zeros(m1,1)); if(norm(dk)<=err)

y=0.0;

if(length(lamk)>ne)

[y,jk]=min(lamk(ne+1:length(lamk))); end

if(y>=0)

exitflag=0;

else

exitflag=1;

for(i=1:ni)

if(index(i)&(ne+sum(index(1:i)))==jk) index(i)=0; break;

end

end

end

k=k+1;

else

exitflag=1;

alpha=1.0; tm=1.0;

for(i=1:ni)

if((index(i)==0)&(Ai(i,:)*dk<0))

tm1=(bi(i)-Ai(i,:)*x)/(Ai(i,:)*dk);

if(tm1

tm=tm1; ti=i;

end

end

end

alpha=min(alpha,tm);

x=x+alpha*dk;

if(tm<1), index(ti)=1; end

end

if(exitflag==0), break; end

k=k+1;

end

output.fval=0.5*x'*H*x+c'*x;

output.iter=k;

function [x,lambda]=qsubp(H,c,Ae,be)

ginvH=pinv(H);

[m,n]=size(Ae);

if(m>0)

rb=Ae*ginvH*c + be;

lambda=pinv(Ae*ginvH*Ae')*rb;

x=ginvH*(Ae'*lambda-c);

else

x=-ginvH*c;

lambda=0;

end

结果

>>callqpact

x =

1.4000

1.7000

lambda =

0.8000

exitflag =

output =

fval: -6.4500

iter: 7

function [x,mu,lambda,output]=multphr(fun,hf,gf,dfun,dhf,dgf,x0)

%功能: 用乘子法解一般约束问题: min f(x), s.t. h(x)=0, g(x).=0

%输入: x0是初始点, fun, dfun分别是目标函数及其梯度;

% hf, dhf分别是等式约束(向量)函数及其Jacobi矩阵的转置;

% gf, dgf分别是不等式约束(向量)函数及其Jacobi矩阵的转置;

%输出: x是近似最优点,mu, lambda分别是相应于等式约束和不等式约束的乘子向量; % output是结构变量, 输出近似极小值f, 迭代次数, 内迭代次数等

maxk=500;

c=2.0;

eta=2.0;theta=0.8;

k=0;ink=0;

epsilon=0.00001;

x=x0;he=feval(hf,x);gi=feval(gf,x);

n=length(x);l=length(he);m=length(gi);

mu=zeros(l,1);lambda=zeros(m,1);

btak=10;btaold=10;

while(btak>epsilon&&k

%调用BFGS算法程序求解无约束子问题

[x,ival,ik]=bfgs('mpsi','dmpsi',x0,fun,hf,gf,dfun,dhf,dgf,mu,lambda,c); ink=ink+ik;

he=feval(hf,x);gi=feval(gf,x);

btak=0;

for i=1:l

btak=btak+he(i)^2;

end

%更新乘子向量

for i=1:m

temp=min(gi(i),lambda(i)/c);

btak=btak+temp^2;

end

btak=sqrt(btak);

if btak>epsilon

if k>=2&&btak>theta*btaold

c=eta*c;

end

for i=1:l

mu(i)=mu(i)-c*he(i);

end

for i=1:m

lambda(i)=max(0,lambda(i)-c*gi(i));

end

k=k+1;

btaold=btak;

x0=x;

end

end

f=feval(fun,x);

output.fval=f;

output.iter=k;

%增广拉格朗日函数

function psi=mpsi(x,fun,hf,gf,dfun,dhf,dgf,mu,lambda,c)

f=feval(fun,x);he=feval(hf,x);gi=feval(gf,x);

l=length(he);m=length(gi);

psi=f;s1=0;

for i=1:l

psi=psi-he(i)*mu(i);

s1=s1+he(i)^2;

end

psi=psi+0.5*c*s1;

s2=0;

for i=1:m

s3=max(0,lambda(i)-c*gi(i));

s2=s2+s3^2-lambda(i)^2;

end

psi=psi+s2/(2*c);

%不等式约束函数文件g1.m

function gi=g1(x)

gi=10*x(1)-x(1)^2+10*x(2)-x(2)^2-34;

%目标函数的梯度文件df1.m

function g=df1(x)

g=[4, -2*x(2)]';

%等式约束(向量)函数的Jacobi矩阵(转置)文件dh1.m function dhe=dh1(x)

dhe=[-2*x(1), -2*x(2)]'

%不等式约束(向量)函数的Jacobi矩阵(转置)文件dg1.m

function dgi=dg1(x)

dgi=[10-2*x(1), 10-2*x(2)]';

function [x,val,k]=bfgs(fun,gfun,x0,varargin)

maxk=500;

rho=0.55;sigma=0.4;epsilon=0.00001;

k=0;n=length(x0);

Bk=eye(n);

while(k

gk=feval(gfun,x0,varargin{:});

if(norm(gk)

break;

end

dk=-Bk\gk;

m=0;mk=0;

while(m<20)

newf=feval(fun,x0+rho^m*dk,varargin{:});

oldf=feval(fun,x0,varargin{:});

if(newf

mk=m;

break;

end

m=m+1;

end

x=x0+rho^mk*dk;

sk=x-x0;

yk=feval(gfun,x,varargin{:})-gk;

if(yk'*sk>0)

Bk=Bk-(Bk*sk*sk'*Bk)/(sk'*Bk*sk)+(yk*yk')/(yk'*sk);

end

k=k+1;x0=x;

end

val=feval(fun,x0,varargin{:});

结果

x=[2 2]';

[x,mu,lambda,output]=multphr('fun','hf','gf1','df','dh','dg',x0) x =

1.0013

4.8987

mu =

0.7701

lambda =

0.9434

output =

fval: -31.9923

iter: 4

f=[3,1,1];

A=[2,1,1;1,-1,-1];

b=[2;-1];

lb=[0,0,0];

x=linprog(f,A,b,zeros(3),[0,0,0]',lb) 结果:

Optimization terminated.

x =

0.0000

0.5000

0.5000

MATLAB编程作业

《Matlab 编程训练》 作业 专 业 学生姓名 班级 学 号 指导教师 完成日期

实训一 MATLAB 语言介绍和数值计算 1.先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存变量。 12 2sin851z e =+ . 2. 已知 1234413134787,2033657327A B --???? ????==???? ????-???? ,求下列表达式的值: (1) A+6*B 和A-B+I (其中I 为单位矩阵) A+6*B:

A-B+I: (2)A*B和A.*B A*B程序: A=[12 34 -4;34 7 87;3 65 7] B=[1 3 -1;2 0 3;3 -2 7] c=A*B 结果: A.*B程序: A=[12 34 -4;34 7 87;3 65 7] B=[1 3 -1;2 0 3;3 -2 7] D=A.*B 结果:

(3)A^3和A.^3 A^3程序: A=[12 34 -4;34 7 87;3 65 7] E=A^3 结果: A.^3程序: A=[12 34 -4;34 7 87;3 65 7] C=A.^3 (4)A/B及B\A A/B程序: A=[12 34 -4;34 7 87;3 65 7] B=[1 3 -1;2 0 3;3 -2 7] C=A/B 结果:

B\A程序: A=[12 34 -4;34 7 87;3 65 7] B=[1 3 -1;2 0 3;3 -2 7] D=B\A 结果: (5)将矩阵C=B\A的右下角2*2子矩阵赋给D, 并(3)保存变量(mat文件)程序: A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; C=B*inv(A); D=C(2:3,2:3) 结果:

北航最优化方法大作业参考

北航最优化方法大作业参考

1 流量工程问题 1.1 问题重述 定义一个有向网络G=(N,E),其中N是节点集,E是弧集。令A是网络G的点弧关联矩阵,即N×E阶矩阵,且第l列与弧里(I,j)对应,仅第i行元素为1,第j行元素为-1,其余元素为0。再令b m=(b m1,…,b mN)T,f m=(f m1,…,f mE)T,则可将等式约束表示成: Af m=b m 本算例为一经典TE算例。算例网络有7个节点和13条弧,每条弧的容量是5个单位。此外有四个需求量均为4个单位的源一目的对,具体的源节点、目的节点信息如图所示。这里为了简单,省区了未用到的弧。此外,弧上的数字表示弧的编号。此时,c=((5,5…,5)1 )T, ×13 根据上述四个约束条件,分别求得四个情况下的最优决策变量x=((x12,x13,…,x75)1× )。 13 图 1 网络拓扑和流量需求

1.2 7节点算例求解 1.2.1 算例1(b1=[4;-4;0;0;0;0;0]T) 转化为线性规划问题: Minimize c T x1 Subject to Ax1=b1 x1>=0 利用Matlab编写对偶单纯形法程序,可求得: 最优解为x1*=[4 0 0 0 0 0 0 0 0 0 0 0 0]T 对应的最优值c T x1=20 1.2.2 算例2(b2=[4;0;-4;0;0;0;0]T) Minimize c T x2 Subject to Ax2=b2 X2>=0 利用Matlab编写对偶单纯形法程序,可求得: 最优解为x2*=[0 4 0 0 0 0 0 0 0 0 0 0 0]T 对应的最优值c T x2=20 1.2.3 算例3(b3=[0;-4;4;0;0;0;0]T) Minimize c T x3 Subject to Ax3=b3 X3>=0 利用Matlab编写对偶单纯形法程序,可求得: 最优解为x3*=[4 0 0 0 4 0 0 0 0 0 0 0 0]T 对应的最优值c T x3=40

MATLAB程序设计作业

Matlab程序设计 班级 姓名 学号

《MATLAB程序设计》作业 1、考虑如下x-y 一组实验数据: x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y=[1.2, 3, 4, 4, 5, 4.7, 5, 5.2, 6, 7.2] 分别绘出plot的原始数据、一次拟合曲线和三次拟合曲线,给出MATLAB代码和运行结果。 代码如下: x=[1,2,3,4,5,6,7,8,9,10]; y=[1.2,3,4,4,5,4.7,5,5.2,6,7.2]; plot(x,y); title('原始数据'); p=polyfit(x,y,1); q=polyval(p,x); figure,plot(x,q); title('一次拟合'); p=polyfit(x,y,2); q=polyval(p,x); figure,plot(x,q); title('二次拟合'); 运行结果如下:

1 2 3 4 5 6 7 8 9 10 12 3 4 5 6 7 8 原始数据 123 456789 102 2.5 3 3.54 4.5 55.56 6.57一次拟合 123456789 101 2 3 4 5 6 7 二次拟合 2、在[0,3π]区间,绘制y=sin(x)曲线(要求消去负半波,即(π,2π)区间内的函数值置零),求出曲线y 的平均值,以及y 的最大值及其最大值的位置。给出执行代码和运行结果。 代码如下: clear clc x=(0:0.01:3*pi); y=sin(x); plot(x,y); y1=(y>=0).*y; figure,plot(x,y1);

最优化方法大作业答案

1.用薄钢板制造一体积5m 3,长度不小于4m ,无上盖的货箱,要求钢板耗量最小。确定货箱的长x 1、宽x 2和高x 3。试列出问题的数学模型。 解:min 32312122x x x x x x z ++= s.t 5321=x x x 41≥x 0,,321≥x x x 2.将下面的线性规划问题表示为标准型并用单纯形法求解 max f=x 1+2x 2+x 3 s .t .2x 1+x 2-x 3≤2 -2x 1+x 2-5x 3≥-6 4x 1+x 2+x 3≤6 x i ≥0 i=1,2,3 解:先化标准形: Min 321x x x z -+= 224321=+-+x x x x 6525321=++-x x x x 646321=+++x x x x 列成表格:

1 2 1 610011460105122001112----- 可见此表已具备1°,2°,3°三个特点,可采用单纯形法。首先从底行中选元素-1,由2/2,6/2,6/4最小者决定选第一行第一列的元素2,标以记号,迭代一次得 1 2 1 2102310401162010021212 11-------- 再从底行中选元素-2/3,和第二列正元素1/2,迭代一次得 1 2 12 32 30 210231040116201002121211- ------ 再从底行中选元素-3,和第二列正元素2,迭代一次得 4 2 3 3 410120280114042001112--- 再迭代一次得 10 2 30 2 10 6 221023 1010213000421021013-- 选取最优解:

matlab程序设计第三章课后习题答案

1. p138 第6题在同一坐标轴中绘制下列两条曲线并标注两曲线交叉点。 >> t=0:0.01:pi; >> x1=t; >> y1=2*x1-0.5; >> x2=sin(3*t).*cos(t); >> y2=sin(3*t).*sin(t); >> plot(x1,y1,'r-',x2,y2,'g-') >> axis([-1,2,-1.5,1]) >> hold on >> s=solve('y=2*x-0.5','x=sin(3*t)*cos(t)','y=sin(3*t)*sin(t)'); >> plot(double(s.x),double(s.y),'*'); 截图:

p366 第4题绘制极坐标曲线,并分析对曲线形状的影响。 function [ output_args ] = Untitled2( input_args ) %UNTITLED2 Summary of this function goes here % Detailed explanation goes here theta=0:0.01:2*pi; a=input('请输入a的值:'); b=input('请输入b的值:'); n=input('请输入n的值:'); rho=a*sin(b+n*theta); polar(theta,rho,'k'); end 下面以a=1,b=1,n=1的极坐标图形为基础来分析a、b、n的影响。

对a的值进行改变:对比发现a只影响半径值的整倍变化 对b的值进行改变:对比发现b的值使这个圆转换了一定的角度

对n的值进行改变:对比发现当n>=2时有如下规律 1、当n为整数时,图形变为2n个花瓣状的图形 2、当n为奇数时,图形变为n个花瓣状的图形 分别让n为2、3、4、5

最优化方法大作业

发动机空燃比控制器 引言:我主要从事自动化相关研究。这里介绍我曾经接触过的发动机空燃比控制器设计中的优化问题。 发动机空燃比控制器设计中的最优化问题 AFR =a f m m && (1) 空燃比由方程(1)定义,在发动机运行过程中如果控制AFR 稳定在14.7可以获 得最好的动力性能和排放性能。如果假设进入气缸的空气流量a m &可以由相关单元检测得到,则可以通过控制进入气缸的燃油流量f m &来实现空燃比的精确控制。由于实际发动机的燃油喷嘴并不是直接对气缸喷燃油,而是通过进气歧管喷燃油,这么做会在进 气歧管壁上液化形成油膜,因此不仅是喷嘴喷出的未液化部分燃油会进入气缸,油膜 蒸发部分燃油也会进入气缸,如方程(2)。这样如何更好的喷射燃油成为了一个问题。 1110101122211ττττ?? ?? -?? ??????????=+????????-????????????-???? ? ??? ?? ????????? ?f f f v X x x u x x X x y =x && (2) 其中12、,==ff fv x m x m &&=f y m &,=fi u m &这里面,表示油膜蒸发量ff m &、fv m &表示为液化部分燃油、fi m &表示喷嘴喷射的燃油,在τf 、τv 、X 都已知的情况下,由现代控制理论知识,根据系统的增广状态空间模型方程(3) 0000001 1 011011114.70ττττ????-?? ??????????=-+-??????????????? ??????????????? ?? ??=?????? f f v v a X X u +q q m y q x x x &&& (3) 其中()0 14.7?t a q = y -m &。由极点配置方法,只要设计控制器方程(4),就可以 使得y 无差的跟踪阶跃输入,那么y 也能较好的跟踪AFR *a m /&。 12-- u =K q K x (4) 这里面的12、K K 确定,可由主导极点概念降维成两个参数12C ,C ,虽然都是最终稳态无差,但是目标是使得瞬态过程中y 和阶跃输入y r 的差异尽可能的小。所以原问

最优化原理大作业

基于粒子群算法的神经网络在电液伺服系统中的应用 摘要:由于人工神经网络在解决具有非线性、不确定性等系统的控制问题上具有极大的潜力,因而在控制领域正引起人们的极大关注,并且已在一些响应较慢的过程控制中获得成功应用。由于电液伺服系统属 于非线性系统,因此本文利用神经网络控制电液伺服系统,并利用粒子群优化算法训练该神经网络的 权值。通过对神经网络的优化实现对电液伺服系统的控制。 关键词:神经网络电液伺服系统粒子群算法优化 近年来,由于神经网络具有大规模并行性、冗余性、容错性、本质的非线性及自组织自学习自适应能力,所以已成功地应用于众多领域。但在具有复杂非线性特性的机电设备的实时控制方面,虽然也有一些神经网络技术的应用研究,但距实用仍有一段距离。电液伺服系统就属于这类设备[1]。 神经网路在用于实时控制时,主要是利用了网络所具有的其输人——输出间的非线性映射能力。它实际上是通过学习来逼近控制对象的动、静态特性。也就是构造实际系统的神经网络模型[2]。本文利用神经网络控制一电液伺服系统,并利用粒子群优化算法训练该神经网络的权值,将结果与BP神经网络控制该系统的结果进行比较。从而得在电液伺服系统中引入神经网络是可行的。 1、粒子群算法 粒子群优化算法(Particle Swarm optimization, PSO)是一种进化计算技术, 由Eberhart博士和kennedy博士发明, 源于对鸟群捕食的行为研究, 粒子群优化算法的基本思想是通过群体中个体之间的协作和信息共享来寻找最优解[3]。算法最初受到飞鸟和鱼类集群活动的规律性启发,利用群体智能建立了一个简化模型,用组织社会行为代替了进化算法的自然选择机制,通过种群间个体协作来实现对问题最优解的搜索[4]。 在找到这两个最优值时, 粒子根据如下的公式来更新自己的速度和新的位置 v[]=v[]+c1*rand()*(pbest[]-present[]) + c2*rand()*(gbest[]-present[]) present[]=persent[]+v[] 式中ω为惯性权重,ω取大值可使算法具有较强的全局搜索能力,ω取小值则算法倾向于局部搜索。一般的做法是将ω初始取0.9并使其随迭代次数的增加而线性递减至0.4,这样就可以先侧重于全局搜索,使搜索空间快速收敛于某一区域,然后采用局部精细搜索以获得高精度的解;c1、c2为两个学习因子,一般取为2;randl和rand2为两个均匀分布在(0,l)之间的随机数;i=1,2,?,m;k=1,2,?,d。另外,粒子在每一维的速度Vi都被一个最大速度Vmax所限制。如果当前粒子的加速度导致它在某一维的速度 超过该维上的最大速度Vmax,则该维的速度被限制为最大速度[5]。 粒子群算法流程如下: (一)初始化粒子群。设群体规模为m,在允许的范围内随机设置粒子的初始位置和速 度。 (二)评价每个粒子的适应值。 (三)调整每一个粒子的位置和速度。 (四)如果达到最大迭代次数genmax或误差达到最初设定数值终止迭代,否则返回(2)。 2、神经网络 神经网络一般由输入层、隐含层、输出层组成。对于输入信号,先向前传播到隐节点,经过节点作用函数后,再把隐节点的输出信息传播到输出节点,最后输出结果。节点的作用函数通常选取S 型函数f(x)=1/(1+e-x)。神经网络算法的学习过程分为正

大连理工大学结构优化复习总结

结构优化设计-基于结构分析技术,在给定的设计空间实现满足使用要求且具有最佳性能或最低成本的工程结构设计的技术 优化设计的三要素:设计变量;约束条件;目标函数 凸域:基于n维空间的区域s里,如果取任意两点x1和x2,连接这两点的线段也属于s,该区域称凸域(=αx1+(1-α)x2 ) 凸函数:如果函数f(x)定义在n维空间的凸域s上,而且对s中的任意两点x1和x2和任意常数α,0.0<=α<=1.0,有f[αx1+(1- α)x2]<=αf(x1)+(1- α)f(x2),则f(x)称为s上的凸函数 严格凸函数:上式小于严格成立 凸规划:如果可行域是凸域,目标函数是凸函数,这样构成的数学规划问题为凸规划问题。 准则设计法:依靠工程经验;效率高;缺乏严格数学基础 最优准则法基于库塔克(K-T)条件:需构造迭代求解算法;通用性不强 数学规划方法:有严格的数学基础,有较好的通用性,计算效率要考虑。 结构优化问题的求解布骤 I. 建立优化模型。给定初始设计方案。 II. 结构分析(有限元) III.优化(收敛性)检验。满足则结束程序,否则继续IV IV. 灵敏度分析 V. 求解优化问题,修改结构模型,返回II。 优化求解的两大类方法:准则法;数学规划法 准则设计方法:用优化准则代替原来的优化问题 同步失效准则设计的评价: {优点:简单、方便,特别是独立约束个数n=m时;工程实用;适合于构件设计。 缺点:只能处理简单构件设计;缩小了设计空间,不能保证最优解;若n < m ,可能无解; 当n > m时,确定哪些破坏模式应同时发生比较困难。 改进:为了弥补等式约束代替不等式约束的缺陷,引入松弛因子ψi σi (X ) =ψiσip , 0 ≤ψi ≤1, i =1,2,......n 启发:用准则代替原来的优化问题,准则法的基本思想;如果将桁架的每根杆看作一种可能的破坏模式,桁架看作一个元件。可以得到满应力准则 满应力方法的缺点:完全无视重量会漏掉最轻设计;中间点一般是不可行设计,对工程实际不利。希望得到可行的中间设计点。 齿形法:采用射线步进行可行性调整,适用于桁架一类刚度与设计变量成正比的结构。 将所有设计变量同时乘以一个常数ξ:A n i=ξA i o} 线性函数都是凸函数,线性规划是凸规划。

北航惯性导航大作业

惯性导航基础课程大作业报告(一)光纤陀螺误差建模与分析 班级:111514 姓名: 学号 2014年5月26日

一.系统误差原理图 二.系统误差的分析 (一)漂移引起的系统误差 1. εx ,εy ,εz 对东向速度误差δVx 的影响 clc;clear all; t=1:0.01:25; g=9.8; L=pi/180*39; Ws=2*pi/84.4*60; Wie=2*pi/24; R=g/(Ws)^2; e=0.1*180/pi; mcVx1=e*g*sin(L)/(Ws^2-Wie^2)*(sin(Wie*t)-Wie*sin(Ws*t)/Ws); mcVx2=e*((Ws^2-(Wie^2)*((cos(L))^2))/(Ws^2-Wie^2)*cos(Ws*t)-(Ws^2)*((sin(L))^2)*cos(Wi e*t)/(Ws^2-Wie^2)-(cos(L))^2); mcVx3=(sin(L))*(cos(L))*R*e*((Ws^2)*cos(Wie*t)/(Ws^2-Wie^2)-(Wie^2)*cos(Ws*t)/(Ws^2-Wi e^2)-1); plot(t,[mcVx1',mcVx2',mcVx3']); title('Ex,Ey,Ez 对Vx 的影响'); xlabel('时间t'); ylabel('Vx(t)'); 0,δλδL ,v v δδ

legend('Ex-mcVx1','Ey-mcVx2','Ez-mcVx3'); grid; axis square; 分析:εx,εy,εz对东向速度误差δVx均有地球自转周期的影响,εx,εy还会有舒勒周期分量的影响,其中,εy对δVx的影响较大。 2.εx,εy,εz对东向速度误差δVy的影响 clc;clear all; t=1:0.01:25; g=9.8; L=pi/180*39; Ws=2*pi/84.4*60; Wie=2*pi/24; R=g/(Ws)^2; e=0.1*180/pi; mcVy1=e*g*(cos(Wie*t)-cos(Ws*t))/(Ws^2-Wie^2); mcVy2=g*sin(L)*e/(Ws^2-Wie^2)*(sin(Wie*t)-Wie/Ws*sin(Ws*t)); mcVy3=g*cos(L)*e/(Ws^2-Wie^2)*(sin(Wie*t)-Wie/Ws*sin(Ws*t)); plot(t,[mcVy1',mcVy2',mcVy3']); title('Ex,Ey,Ez对Vy的影响'); xlabel('时间t'); ylabel('Vy(t)'); legend('Ex-mcVy1','Ey-mcVy2','Ez-mcVy3'); grid; axis square;

2016年大连理工大学优化方法上机大作业

2016年理工大学优化方法上机大作业学院: 专业: 班级: 学号: : 上机大作业1: 1.最速下降法:

function f = fun(x) f = (1-x(1))^2 + 100*(x(2)-x(1)^2)^2; end function g = grad(x) g = zeros(2,1); g(1)=2*(x(1)-1)+400*x(1)*(x(1)^2-x(2)); g(2) = 200*(x(2)-x(1)^2); end

function x_star = steepest(x0,eps) gk = grad(x0); res = norm(gk); k = 0; while res > eps && k<=1000 dk = -gk; ak =1; f0 = fun(x0); f1 = fun(x0+ak*dk); slope = dot(gk,dk); while f1 > f0 + 0.1*ak*slope ak = ak/4; xk = x0 + ak*dk; f1 = fun(xk); end k = k+1; x0 = xk; gk = grad(xk); res = norm(gk); fprintf('--The %d-th iter, the residual is %f\n',k,res); end x_star = xk; end >> clear

>> x0=[0,0]'; >> eps=1e-4; >> x=steepest(x0,eps)

2.牛顿法: function f = fun(x) f = (1-x(1))^2 + 100*(x(2)-x(1)^2)^2; end function g = grad2(x) g = zeros(2,2);

实验二--MATLAB程序的设计(含实验报告)

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器(Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因c b a 、、的不同取值而定),这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2→1 3→10→5→16→8→4→2→1 6→3→10→5→16→8→4→2→1

最优化方法大作业答案

武工院你们懂的 1.用薄钢板制造一体积5m 3,长度不小于4m ,无上盖的货箱,要求钢板耗量最小。确定货箱的长x 1、宽x 2和高x 3。试列出问题的数学模型。 解:min 32312122x x x x x x z ++= s.t 5321=x x x 41≥x 0,,321≥x x x 2.将下面的线性规划问题表示为标准型并用单纯形法求解 max f=x 1+2x 2+x 3 s .t .2x 1+x 2-x 3≤2 -2x 1+x 2-5x 3≥-6 4x 1+x 2+x 3≤6 x i ≥0 i=1,2,3 解:先化标准形: Min 321x x x z -+= 224321=+-+x x x x 6525321=++-x x x x 646321=+++x x x x

列成表格: 00001216 100114 60105122001112----- 可见此表已具备1°,2°,3°三个特点,可采用单纯形法。首先从底行中选元素-1,由2/2,6/2,6/4最小者决定选第一行第一列的元素2,标以记号,迭代一次得 0000 1 2 121023 10 40116201002 1 21 211-------- 再从底行中选元素-2/3,和第二列正元素1/2,迭代一次得 1 002 1232 30210231 040116201002121211-- ----- 再从底行中选元素-3,和第二列正元素2,迭代一次得 4002 3 03410120280114042001112--- 再迭代一次得

10 23021 062 21023 1010 213 000421 2 10 13- - 选取最优解: 01=x 42=x 23=x 3. 试用DFP 变尺度法求解下列无约束优化问题。 min f (X )=4(x 1-5)2+(x 2-6)2 取初始点X=(8,9)T ,梯度精度ε=0.01。 解:取I H =0,初始点()T X 9,8= 2221)6()5(4)(-+-=x x x f ??????--=?122408)(21x x x f ???? ??=?624)() 0(x f T x f d )6,24()()0()0(--=-?= )0(0)0()1(d x x α+= T )69,248(00αα--= ])669()5248(4min[)(min 2020)0(0)0(--+--?=+αααd x f )6()63(2)24()2458(8) (00)0(0)0(=-?-+-?--=+ααααd d x df 13077.013017 0≈= α ???? ??=???? ??--?+???? ??=21538.886153.462413077.098)1(x

Matlab编程与应用习题和一些参考答案

Matlab 上机实验一、二 3.求下列联立方程的解???????=+-+-=-+=++-=--+4 1025695842475412743w z y x w z x w z y x w z y x >> a=[3 4 -7 -12;5 -7 4 2;1 0 8 -5;-6 5 -2 10]; >> b=[4;4;9;4]; >> c=a\b 4.设???? ??????------=81272956313841A ,??????????-----=793183262345B ,求C1=A*B’;C2=A’*B;C3=A.*B,并求上述所有方阵的逆阵。 >> A=[1 4 8 13;-3 6 -5 -9;2 -7 -12 -8]; >> B=[5 4 3 -2;6 -2 3 -8;-1 3 -9 7]; >> C1=A*B' >> C2=A'*B >> C3=A.*B >> inv(C1) >> inv(C2) >> inv(C3) 5.设 ?? ????++=)1(sin 35.0cos 2x x x y ,把x=0~2π间分为101点,画出以x 为横坐标,y 为纵坐标的曲线。 >> x=linspace(0,2*pi,101); >> y=cos(x)*(0.5+(1+x.^2)\3*sin(x)); >> plot(x,y,'r') 6.产生8×6阶的正态分布随机数矩阵R1, 求其各列的平均值和均方差。并求该矩阵全体数的平均值和均方差。 (mean var ) a=randn(8,6) mean(a) var(a) k=mean(a) k1=mean(k) i=ones(8,6) i1=i*k1 i2=a-i1 i3=i2.*i2 g=mean(i3) g2=mean(g)

北航数值分析大作业第二题精解

目标:使用带双步位移的QR 分解法求矩阵10*10[]ij A a =的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知:sin(0.50.2)() 1.5cos( 1.2)(){i j i j ij i j i j a +≠+== (i,j=1,2, (10) 算法: 以上是程序运作的逻辑,其中具体的函数的算法,大部分都是数值分析课本上的逻辑,在这里特别写出矩阵A 的实特征值对应的一个特征向量的求法: ()[]()() []()[]()111111I 00000 i n n n B A I gause i n Q A I u Bu u λλ-?-?-=-?-?? ?-=????→=??????→= ?? ? 选主元的消元 检查知无重特征值 由于=0i A I λ- ,因此在经过选主元的高斯消元以后,i A I λ- 即B 的最后一行必然为零,左上方变 为n-1阶单位矩阵[]()()11I n n -?-,右上方变为n-1阶向量[]()11n Q ?-,然后令n u 1=-,则 ()1,2,,1j j u Q j n ==???-。

这样即求出所有A所有实特征值对应的一个特征向量。 #include #include #include #define N 10 #define E 1.0e-12 #define MAX 10000 //以下是符号函数 double sgn(double a) { double z; if(a>E) z=1; else z=-1; return z; } //以下是矩阵的拟三角分解 void nishangsanjiaodiv(double A[N][N]) { int i,j,k; int m=0; double d,c,h,t; double u[N],p[N],q[N],w[N]; for(i=0;i

大连理工大学优化方法上机大作业程序

函数定义: % 目标函数 function f = fun(x) fm=0; for i=1:499 fmi = (1-x(i))^2 + 100*(x(i+1)-x(i)^2)^2; fm=fm+fmi; end f =fm; end % 梯度 function g = grad(x) g = zeros(500,1); g(1)=2*(x(1)-1)+400*x(1)*(x(1)^2-x(2)); for i=2:499 g(i)=2*(x(i)-1)+400*x(i)*(x(i)^2-x(i+1))+200*(x(i)-x(i-1)^2); end g(500) = 200*(x(500)-x(499)^2); end % 二阶梯度

function g = grad2(x) g = zeros(500,500); g(1,1)=2+400*(3*x(1)^2-x(2)); g(1,2)=-400*x(1); for i=3:500 g(1,i)=0; end for i=1:498 g(500,i)=0; end g(500,499)=-400*x(499); g(500,500)=200; for i=2:499 for j=1:500 if j==i-1 g(i,j)= -400*x(i-1); elseif j==i g(i,j)= 2+400*(3*x(i)^2-x(i+1))+200; elseif j==i+1 g(i,j)= -400*x(i); else g(i,j)=0; end end end end 1.最速下降法 function x_star = steepest(x0,eps) gk = grad(x0); res = norm(gk); k = 0; while res > eps && k<=50000 dk = -gk;

matlab程序设计作业

Matlab程序设计作业 姓名: 学号: 专业:

? MATLAB 程序设计》作业 1、考虑如下x-y 一组实验数据: x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y 二[1.2, 3, 4, 4, 5, 4.7, 5, 5.2, 6, 7.2] 分别绘出plot 的原始数据、一次拟合曲线和三次拟合曲线,给出 原始曲线 MATLAB 代码和运行结果。 7 6 5 4 3 2 2 3 4 5 6 7 8 9 10

7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 10 一次拟合 三次拟合

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; y=[1.2, 3, 4, 4, 5, 4.7, 5, 5.2, 6, 7.2]; figure; plot(x,y) p1=polyfit(x,y,1); y1=polyval(p1,x); figure; plot(x,y1) p2=polyfit(x,y,3); y2=polyval(p2,x); figure; plot(x,y2) 2、在[0, 3n区间,绘制y二Sin(x)曲线(要求消去负半波,即(n 2n)区间内的函数值置零),求出曲线y 的平均值,以及y 的最大值及其最大值的位置。给出执行代码和运行结果。 x=0:pi/1000:3*pi; y=Sin(x); y1=(y>=0).*y; %消去负半波figure(1); plot(x,y1, 'b' ); a=mean(y1) %求出y1 的平均值 b=max(y1) %求出y1 的最大值b, 以及最大值在矩阵中的位置; d=x(find(y1==b)) >> ex1 a = 0.4243 b = 1 d = 1.5708 7.8540 >>

大连理工优化方法大作业MATLAB编程

function [x,dk,k]=fjqx(x,s) flag=0; a=0; b=0; k=0; d=1; while(flag==0) [p,q]=getpq(x,d,s); if (p<0) b=d; d=(d+a)/2; end if(p>=0)&&(q>=0) dk=d; x=x+d*s; flag=1; end k=k+1;

if(p>=0)&&(q<0) a=d; d=min{2*d,(d+b)/2}; end end %定义求函数值的函数fun,当输入为x0=(x1,x2)时,输出为f function f=fun(x) f=(x(2)-x(1)^2)^2+(1-x(1))^2; function gf=gfun(x) gf=[-4*x(1)*(x(2)-x(1)^2)+2*(x(1)-1),2*(x(2)-x(1)^2)]; function [p,q]=getpq(x,d,s) p=fun(x)-fun(x+d*s)+0.20*d*gfun(x)*s'; q=gfun(x+d*s)*s'-0.60*gfun(x)*s'; 结果: x=[0,1]; s=[-1,1]; [x,dk,k]=fjqx(x,s) x =-0.0000 1.0000 dk =1.1102e-016 k =54

function f= fun( X ) %所求问题目标函数 f=X(1)^2-2*X(1)*X(2)+2*X(2)^2+X(3)^2+ X(4)^2- X(2)*X(3)+2*X(1)+3*X(2)-X(3); end function g= gfun( X ) %所求问题目标函数梯度 g=[2*X(1)-2*X(2)+2,-2*X(1)+4*X(2)-X(3)+3,2*X(3)-X(2)-1,2*X(4)]; end function [ x,val,k ] = frcg( fun,gfun,x0 ) %功能:用FR共轭梯度法求无约束问题最小值 %输入:x0是初始点,fun和gfun分别是目标函数和梯度 %输出:x、val分别是最优点和最优值,k是迭代次数 maxk=5000;%最大迭代次数 rho=0.5;sigma=0.4;

结构优化设计大作业(北航)

《结构优化设计》 大作业报告 实验名称: 拓扑优化计算与分析 1、引言 大型的复杂结构诸如飞机、汽车中的复杂部件及桥梁等大型工程的设计问题,依靠传统的经验和模拟实验的优化设计方法已难以胜任,拓扑优化方法成为解决该问题的关键手段。近年来拓扑优化的研究的热点集中在其工程应用上,如: 用拓扑优化方法进行微型柔性机构的设计,车门设计,飞机加强框设计,机翼前缘肋设计,卫星结构设计等。在其具体的操作实现上有两种方法,一是采用计算机语言编程计算,该方法的优点是能最大限度的控制优化过程,改善优化过程中出现的诸如棋盘格现象等数值不稳定现象,得到较理想的优化结果,其缺点是计算规模过于庞大,计算效率太低;二是借助于商用有限元软件平台。本文基于matlab软件编程研究了不同边界条件平面薄板结构的在各种受力情况下拓扑优化,给出了几种典型结构的算例,并探讨了在实际优化中优化效果随各参数的变化,有助于初学者初涉拓扑优化的读者对拓扑优化有个基础的认识。

2、拓扑优化研究现状 结构拓扑优化是近20年来从结构优化研究中派生出来的新分支,它在计算结构力学中已经被认为是最富挑战性的一类研究工作。目前有关结构拓扑优化的工程应用研究还很不成熟,在国外处在发展的初期,尤其在国内尚属于起步阶段。1904 年Michell在桁架理论中首次提出了拓扑优化的概念。自1964 年Dorn等人提出基结构法,将数值方法引入拓扑优化领域,拓扑优化研究开始活跃。20 世纪80 年代初,程耿东和N. Olhoff在弹性板的最优厚度分布研究中首次将最优拓扑问题转化为尺寸优化问题,他们开创性的工作引起了众多学者的研究兴趣。1988年Bendsoe和Kikuchi发表的基于均匀化理论的结构拓扑优化设计,开创了连续体结构拓扑优化设计研究的新局面。1993年Xie.Y.M和Steven.G.P 提出了渐进结构优化法。1999年Bendsoe和Sigmund证实了变密度法物理意义的存在性。2002 年罗鹰等提出三角网格进化法,该方法在优化过程中实现了退化和进化的统一,提高了优化效率。目前常使用的拓扑优化设计方法可以分为两大类:退化法和进化法。结构拓扑优化设计研究,已被广泛应用于建筑、航天航空、机械、海洋工程、生物医学及船舶制造等领域。 3、拓扑优化建模(SIMP) 结构拓扑优化目前的主要研究对象是连续体结构。优化的基本方法是将设计区域划分为有限单元,依据一定的算法删除部分区域,形成带孔的连续体,实现连续体的拓扑优化。连续体结构拓扑优化方法目前比较成熟的是均匀化方法、变密度方法和渐进结构优化方法。 变密度法以连续变量的密度函数形式显式地表达单元相对密度与材料弹性模量之间的对应关系,这种方法基于各向同性材料,不需要引入微结构和附加的均匀化过程,它以每个单元的相对密度作为设计变量,人为假定相对密度和材料弹性模量之间的某种对应关系,程序实现简单,计算效率高。变密度法中常用的插值模型主要有:固体各向同性惩罚微结构模型(solidisotropic microstructures with penalization,简称SIMP)和材料属性的合理近似模型(rational approximation ofmaterial properties,简称RAMP)。而本文所用即为SIMP插值模型。

最优化大作业

最优化方法大作业 ---------用优化算法求解函数最值问题

摘要 最优化(optimization) 是应用数学的重要研究领域.它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。最优化问题一般包括最小化问题和最大化问题,而最大化问题可以通过简单的转化使之成最最小化问题。最小化问题分为两类,即约束最小化和无约束最小化问题。在此报告中,前两个问题属于无约束最小化问题的求解,报告中分别使用了“牛顿法”和“共轭梯度法”。后两个问题属于有约束最小化问题的求解,报告中分别用“外点法”和“内点法”求解。虽然命名不一样,其实质都是构造“惩罚函数”或者“障碍函数”,通过拉格朗日乘子法将有约束问题转化为无约束问题进行求解。再此报告中,“外点法”和“内点法”分别用了直接求导和调用“牛顿法”来求解无约束优化问题。 在此实验中,用“共轭梯度法”对“牛顿法”所解函数进行求解时出现错误,报告中另取一函数用“共轭梯度法”求解得到正确的结果。此实验中所有的函数其理论值都是显见的,分析计算结果可知程序正确,所求结果误差处于可接受范围内。 报告中对所用到的四种方法在其使用以前都有理论说明,对“外点法”中惩罚函数和“内点法”中障碍函数的选择也有相应的说明,另外,对此次试验中的收获也在报告的三部分给出。 本报告中所用程序代码一律用MATLAB编写。 【关键字】函数最优化牛顿法共轭梯度法内点法外点法 MATLAB

一,问题描述 1, 分别用共轭梯度发法和牛顿法来求解一下优化问题 ()()()()()4 41432243221102510min x x x x x x x x x f -+-+-++= 2, 分别用外点法和内点发求解一下优化问题 ?? ?≥-++0 1.min 212 231x x t s x x 二、问题求解 用牛顿法求解 ()()()()()4 414 322 432 21102510min x x x x x x x x x f -+-+-++= 1.1.1问题分析: 取步长为1而沿着牛顿方向迭代的方法称为牛顿法,在牛顿法中,初始点的取值随意,在以后的每次迭代中,()[] ()k k k k x f x f x x ??-=-+1 21,直到终止条件成立时停止。 1.1.2 问题求解 注:本程序编程语言为MATLAB ,终止条件为()162 110-≤?x f ,初始取值为 [10 10 10 10] M 文件(求解函数)如下: function s=newton1(f,c,eps) %c 是初值,eps 为允许误差值 if nargin==2 eps=; elseif nargin<1 error('') % return end syms x1 x2 x3 x4

相关文档
最新文档