优化方法大作业

优化方法大作业
优化方法大作业

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

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

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

maxk=200; %最大迭代次数

rho=0.6;sigma=0.4;

k=0; epsilon=1e-4;

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;

else

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

d=-g+beta*d0; gd=g'*d;

if(gd>=0.0)

d=-g;

end

end

if(norm(g)

m=0; mk=0;

while(m<20) %Armijo搜索

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,x);

x=reshape(x,10,10);

x=double(x);

disp('final x='),disp(x)

disp('final y='),disp(val)

最速下降

clc;

clear;

x0=[-1.2;1;-1.2;1];

syms x1x2x3x4

xx=[ x1;x2;x3;x4];

fun=(x1-1)^2+(x3-1)^2+100*(x2-x1^2)^2+100*(x4-x3^2)^2;

gfun=[2*(x1-1)-400*x1*(x2-x1^2);...

200*(x2-x1^2);...

2*(x3-1)-400*x3*(x4-x3^2);...

200*(x4-x3^2)];

maxk=10; %最大迭代次数

rho=0.5;sigma=0.4;

k=0; epsilon=1e-5;

xx=x0;

k2=0;

while(k2

g=subs(gfun,{x1 x2 x3 x4},{xx(1) xx(2) xx(3) xx(4)}); %计算梯度

d=-g; %计算搜索方向

if(norm(d)

m=0; mk=0;

while(m<20) %Armijo搜索

xz=xx+rho^m*d;

if(subs(fun,{x1 x2 x3 x4},{xz(1) xz(2) xz(3) xz(4)})

mk=m; break;

end

m=m+1;

end

xx=xx+rho^mk*d;

k=k+1;

end

%%%%牛顿

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

k2=0;maxk=100; rho=0.55;sigma=0.4;

k=0; epsilon=1e-5;

while(k2

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

Gk=feval(Hess,x0); %计算Hesse阵

dk=-Gk\gk; %解方程组Gk*dk=-gk, 计算搜索方向

if(norm(gk)

m=0; mk=0;

while(m<20) % 用Armijo搜索求步长

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

mk=m; break;

end

m=m+1;

end

x0=x0+rho^mk*dk;

k2=k2+1;

end

x2=x0;

%%%%BFGS

Bk=eye(n);

K3=0;

while(k3

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

if(norm(gk)

break;

end%检验终止准则

dk=-Bk\gk; m=0; mk=0;

while(m<20) % 用Armijo搜索求步长

newf=feval(fun,x0+rho^m*dk);

oldf=feval(fun,x0);

if(newf

mk=m; break;

end

m=m+1;

end

x=x0+rho^mk*dk;

det_xk=x-x0;

det_gk=feval(gfun,x)-gk;

if(det_gk'*det_xk>0)

Bk=Bk-(Bk*det_xk*det_xk'*Bk)/(det_xk'*Bk*det_xk)+(det_gk*det_gk')/(de t_gk'*det_xk);

end

k3=k3+1; x0=x;

End

x3=x;

disp('the solution for gradient is '); disp(xx');

disp(' gradient iteration is '); disp(k);

disp('the solution for newton is '); disp(x2');

disp('newton iteration is'); disp(k2);

disp('the solution for BGFS is '); disp(x3’);

disp('BFGS iteration is'); disp(k3);

(三)惩罚函数法

clc

clear

m=zeros(1,50);

a=zeros(1,50);

b=zeros(1,50);

f0=zeros(1,50); syms x1

syms x2

syms e

m(1)=1;

c=10;

a(1)=6;

b(1)=6;

imax=100;

for k=1:imax xi=a(k);yi=b(k);e=m(k);

fx=4*x1-x2^2-12;

hx=25-x1^2-x2^2;

gx=-10*x1+x1^2-10*x2+x2^2+34;

gx1=subs(gx,{x1 x2},{xi yi});

if gx1<=0

f=fx+M*hx^2;

else

f=fx+M*(hx^2+gx^2);

end

fx1=diff(f,'x1');fx2=diff(f,'x2');

fx1x1=diff(fx1,'x1');fx1x2=diff(fx1,'x2');

fx2x1=diff(fx2,'x1');fx2x2=diff(fx2,'x2');

for n=1:100

f1=subs(fx1,{x1 x2},{xi yi}); f2=subs(fx2,{x1 x2},{xi yi});

f11=subs(fx1x1,{x1 x2},{xi yi});

f12=subs(fx1x2,{x1 x2},{xi yi});

f21=subs(fx2x1,{x1 x2},{xi yi});

f22=subs(fx2x2,{x1 x2},{xi yi});

if(double(sqrt(f1^2+f2^2))<=1e-6) %

a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f));

break;

else

X=[x1 x2]'-inv([f11 f12;f21 f22])*[f1 f2]';

xi=X(1);yi=X(2);

end

end

end

ffinal=double(subs(fi,{x1 x2},{xi yi}));

disp('x1='),disp(xi)

disp('x2='),disp(yi)

disp('objective function value f='),disp(ffinal)

乘子法

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

maxk=500; %最大迭代次数

sigma=2.0; %罚因子

eta=2.0; theta=0.8; %PHR算法中的实参数

k=0; ink=0; %k, ink分别是外迭代和内迭代次数

epsilon=1e-5; %终止误差值

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

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

%选取乘子向量的初始值

mu=0.1*ones(l,1); lambda=0.1*ones(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,s igma);

ink=ink+ik;

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

btak=0.0;

for (i=1:l), btak=btak+he(i)^2; end

for i=1:m

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

btak=btak+temp^2;

end

btak=sqrt(btak);

if btak>epsilon

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

sigma=eta*sigma;

end

%更新乘子向量

for (i=1:l), mu(i)=mu(i)-sigma*he(i); end

for (i=1:m)

lambda(i)=max(0.0,lambda(i)-sigma*gi(i));

end

end

k=k+1;

btaold=btak;

x0=x;

end

f=feval(fun,x);

disp('x1='),disp(x(1))

disp('x2='),disp(x(2))

disp('objective function value f='),disp(f)

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

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

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

最优化大作业

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

摘要 最优化(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 二、问题求解 1.1 用牛顿法求解 ()()()()()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=1.0e-16; elseif nargin<1 error('') % return end syms x1 x2 x3 x4

最优化方法大作业答案

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-- 选取最优解:

最优化方法大作业

发动机空燃比控制器 引言:我主要从事自动化相关研究。这里介绍我曾经接触过的发动机空燃比控制器设计中的优化问题。 发动机空燃比控制器设计中的最优化问题 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.用薄钢板制造一体积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

最优化原理大作业

基于粒子群算法的神经网络在电液伺服系统中的应用 摘要:由于人工神经网络在解决具有非线性、不确定性等系统的控制问题上具有极大的潜力,因而在控制领域正引起人们的极大关注,并且已在一些响应较慢的过程控制中获得成功应用。由于电液伺服系统属 于非线性系统,因此本文利用神经网络控制电液伺服系统,并利用粒子群优化算法训练该神经网络的 权值。通过对神经网络的优化实现对电液伺服系统的控制。 关键词:神经网络电液伺服系统粒子群算法优化 近年来,由于神经网络具有大规模并行性、冗余性、容错性、本质的非线性及自组织自学习自适应能力,所以已成功地应用于众多领域。但在具有复杂非线性特性的机电设备的实时控制方面,虽然也有一些神经网络技术的应用研究,但距实用仍有一段距离。电液伺服系统就属于这类设备[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)。神经网络算法的学习过程分为正

北航惯性导航大作业

惯性导航基础课程大作业报告(一)光纤陀螺误差建模与分析 班级: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);

最优化方法大作业-算法源程序-0.618法、抛物线法、共轭梯度法

最优化方法程序作业 专业:油气储运工程 班级: 姓名: 学号:

一、开发工具 该应用程序采用的开发工具是Visual studio 2005,编程语言使用的是C#。 二、程序代码 (1)0.618法和抛物线法求ψ(t)=sint,初始点t0=1 ①主程序: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections; public partial class_Default : System.Web.UI.Page { JiSuan JS = new JiSuan(); protected void Button1_Click(object sender, EventArgs e) { double xx0 = 0.01;//步长 double tt0 = 1, pp = 2, qq = 0.5; ArrayList list1 = new ArrayList(); list1 = (ArrayList)JS.SuoJian(xx0, tt0, pp, qq);//调用倍增半减函数double aa = double.Parse(list1[0].ToString()); double bb = double.Parse(list1[1].ToString()); txtShangxian.Text = bb.ToString();//在页面上显示极小区间 txtXiaxian.Text = aa.ToString(); ArrayList list2 = new ArrayList(); list2 = (ArrayList)JS.JiXiao1(aa, bb);//调用0.618法函数 double jixiao1 = double.Parse(list2[0].ToString()); double fjixiao1 = double.Parse(list2[1].ToString()); txtJixiao1.Text = jixiao1.ToString();//在页面上显示极小点 txtFjixiao1.Text = fjixiao1.ToString();//在页面上显示极小点处的函数值 ArrayList list3 = new ArrayList(); list3 = (ArrayList)JS.JiXiao2(aa, bb);//调用抛物线法函数 double jixiao2 = double.Parse(list3[0].ToString()); double fjixiao2 = double.Parse(list3[1].ToString()); txtJixiao2.Text = jixiao2.ToString();//在页面上显示极小点

优化方法上机作业--2013

第一题(牛顿法和不精确一维搜索) 牛顿法: syms x1 x2; f=(x2-(x1)*(x1))^2+(1-x1)^2; v=[x1,x2]; df=jacobian(f,v); df=df.'; G=jacobian(df,v); epson=1e-12;x0=[0,1]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x 0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0; mul_count=mul_count+12;sum_count=sum_count+6; while(norm(g1)>epson) p=-G1\g1; x0=x0+p; g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=k+1; mul_count=mul_count+16;sum_count=sum_count+11; end; k x0 mul_count sum_count 运行结果: k = 9 x0 = 1 1 mul_count = 156 sum_count = 105 不精确一维搜索: fun1.m文件 function f=fun1(x) f=(x(1)-1)^2+(x(2)-x(1)^2)^2; gfun1.m文件

function gf = gfun1(x) gf=[2*x(1)*(x(1)^2-x(2))+2*(x(1)-1),2*(x(2)-x(1)^2)]'; wolfepowell.m文件 function [k,m,opt,x]=wolfepowell(xk,sk) max=1000; c1=0.1; c2=0.6;a=0;b=inf;dk=0.2;m=0; while(m<=max) if (fun1(xk)-fun1(xk+sk*dk)<-c1*dk*gfun1(xk)'*sk) b=dk;dk=(dk+a)/2; elseif (fun1(xk)-fun1(xk+sk*dk)>=-c1*dk*gfun1(xk)'*sk)&&(gfun1(xk+sk*dk)'*sk>xk=[0,1]';sk=[1,-1]'; [k,m,opt,x]= wolfepowell(xk,sk) k = 0.8000 m = 2 opt = 1.0080 x = 0.8000 0.2000 第二题(共轭梯度法) frcg.m文件 function [x,val,k]=frcg(fun,gfun,x0) maxk=5000; rho=0.6;sigma=0.4;

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

目标:使用带双步位移的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

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

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×13 )T, 根据上述四个约束条件,分别求得四个情况下的最优决策变量x=((x 12,x 13 ,…,x 75 ) 1×13 )。 图 1 网络拓扑和流量需求

1.27节点算例求解 1.2.1\ T) 1.2.2算例1(b1=[4;-4;0;0;0;0;0] 转化为线性规划问题: 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.3算例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.4算例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

大连理工优化方法大作业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 前言 最优化理论和方法的出现可以追溯到十分古老的极值问题,然而,它成为一门独立的学科还是在上世纪40年代末.Dantzing在1947年提出求解一般线性规划问题的单纯形算法之后,随着工业革命、信息革命的不断深化,以及计算机技术的巨大发展,至今短短的几十年,它得到了迅猛的发展.现在,解线性规划、非线性规划以及随机规划、非光滑规划、多目标规划、几何规划、整数规划等各种最优化问题的理论研究发展迅速,新方法不断涌现,在经济、军事、科学技术等方面得到了广泛的应用,成为一门十分活跃的学科. 约束非线性规划问题广泛见于工程、国防、经济等许多重要领域.求解约束非线性规划问题的主要方法之一是把它化成无约束非线性规划问题,而罚函数方法和拉格朗日对偶方法是将约束规划问题无约束化的两种主要方法.罚函数方法通过求解一个或多个罚问题来得到约束规划问题的解,如果当罚参数充分大时,求单个罚问题的极小点是原约束规划问题的极小点,则称此罚问题中的罚函数为精确罚函数,否则称为序列罚函数.针对传统罚函数的定义而言,若罚函数是简单的、光滑的,则它一定是不精确的;若罚函数是简单的、精确的,则它一定是不光滑的;若罚函数是精确的、光滑的,则它一定是复杂的.因此我们的工作是对传统罚函数进行了改造,主要是引入了指数型罚函数和对数型罚函数,并在改造后的罚函数中增添了乘子参数,使之成为既是简单的、光滑的,又是精确的结

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

函数定义: % 目标函数 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;

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

《结构优化设计》 大作业报告 实验名称: 拓扑优化计算与分析 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插值模型。

最优化马昌凤第五章作业

最优化马昌凤第五章作业-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

最优化方法及其Matlab程序设计习题作业暨实验报告 学院:数学与信息科学学院 班级:12级信计一班 姓名:李明 学号:1201214049

第四章 共轭梯度法 一、上机问题与求解过程 1、用DFP 算法求解,3)(m in 22 21x x x f +=取初始点和初始矩阵为 .1112,1100??????=??????-=H x 。 解: 仿照书上编写DFP 程序,将程序HESS 矩阵变为0H 具体如下: function [x,val,k]=dfp(fun,gfun,x0) %功能:用DFP 算法求解吴宇舒问题:min f(x) %输入:x0是初始点,fun,gfun 分别是目标函数及其梯度 %输出:x,val 分别是近似最优点和最优值,k 是迭代次数 maxk=1e5;%给出最大迭代次数 rho=0.55;sigma=0.4;epsilon=1e-5; k=0; n=length(x0); Hk=[2 1;1 1]; while (k0) Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(sk'*yk); end k=k+1;x0=x; end val=feval(fun,x0); 然后仿照书上建立两个目标函数和梯度的 M 文件: function f=fun(x) f=x(1)^2+3*x(2)^2; function g=gfun(x) g=[2*x(1) 6*x(2)]';

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

2016年大连理工大学优化 方法上机大作业 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

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)

相关文档
最新文档