机械优化设计MATLAB程序Word文件下载.docx
《机械优化设计MATLAB程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《机械优化设计MATLAB程序Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
t4=0.5*(t1+t3-c1/c2);
f4=f(t4);
k=0;
while(abs(t4-t2)>
=epsilon)
if
t2<
t4
f2>
f4
f1=f2;
t1=t2;
t2=t4;
f2=f4;
else
f3=f4;
t3=t4;
end
f3=f2;
t3=t2;
f1=f4;
k=k+1;
%输出最优解
t=t4;
f=f(t4);
t=t2;
f=f(t2);
fprintf(1,'
迭代计算
k=%3.0f\n'
k)
极小点坐标
t=%3.0f\n'
t)
函数值
f=%3.4f\n'
f)
运行结果如下:
k=
7
t=
2
f=0.0001
2.用黄金分割法求函数ϕ(
)=
3
t
2
3
+1
的极小值,精度
t^(2/3)-(t^2+1)^(1/3)'
);
t1=b-0.618*(b-a);
t2=a+0.618*(b-a);
k=1;
while
abs(b-a)>
=epsilon
f1<
f2
b=t2;
t2=t1;
f2=f1;
a=t1;
t=0.5*(b+a);
f0=f(t);
迭代次数
k=%
3.0f\n'
迭代区间—左端
a=%3.4f\n'
a)
试点
1
坐标值
t1=%3.4f\n'
t1)
f1=%3.4f\n'
f(t1))
迭代区间—右端
b=%3.4f\n'
b)
t2=%3.4f\n'
t2)
f2=%3.4f\n'
f(t2))
区间中点
t=%3.4f\n'
f0=%3.4f\n'
f(t))
13
a=0.0000
t1=0.0036
f1=-0.9767
b=0.0093
t2=0.0058
f2=-0.9679
t=0.0047
f0=-0.9721
由黄金分割法在初始区间[0,3]求得的极小值点为
t=0.0047,极小值为-0.9721。
42
(1)在用牛顿法在
function
[x,fx,k]=niudunfa(x0)
syms
x1
x2
f=(x1-2)^4+(x1-2*x2)^2;
fx=0;
v=[x1,x2];
df=jacobian(f,v);
df=df.'
;
G=jacobian(df,v);
epson=1e-12;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});
p=-G1\g1;
x0=x0+p;
while(norm(g1)>
epson)
x=x0;
fx=subs(f,{x1,x2},{x(1,1),x(2,1)});
>
[x,fx,k]=niudunfa([1;
1])
x
=1.9999554476059523381489991377897
0.99997772380297616907449956889483
fx
=0.0000000000000000039398907941382470301534502947647
k
=23
(2)用阻尼牛顿法在
[x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法
%停机原则
%迭代次数
a0=-p'
*g1/(p'
*G1*p);
x0=x0+a0*p;
while(norm(a0*p)>
fx=subs(f,{x1,x2},{x0(1,1),x0(2,1)});
[x,fx,k]=zuniniudunfa([1;
x=1.9999554476059523381489991377897
fx=0.0000000000000000039398907941382470301534502947647
k=23
(3)用变尺度法在
4.用共轭梯度法求函数
f
(x1,
x2
(1)用共轭梯度法在
function[y,x,k]=CG(A,b,c,x0)
%共轭梯度法解
minf(x)=0.5*X'
*A*X+b'
x+c
eps=1e-6;
%迭代停机原则
%fx=0.5*x0'
.*A.*x0+b'
.*x0+c;
r0=A*x0+b;
norm(r0)<
=eps
y=0.5*x'
*A*x+b'
*x+c;
p0=-r0;
a=-r0'
*p0/(p0'
*A*p0);
x1=x0+a*p0;
r1=A*x1+b;
norm(r1)>
eps
beta=(r1'
*r1)/(r0'
*r0);
p1=-r1+beta*p0;
alpha=-(r1'
*p1)/(p1'
*A*p1);
x1=x1+alpha*p1;
r2=A*x1+b;
p0=p1;
r0=r1;
r1=r2;
x=x1;
[y,x,k]=CG([3
-1;
-1
1],[-2;
0],0,[2;
y
=
-1
=1.0000
1.0000
1
(2)用变尺度法在
[x,fx,k]=bianchidufa(A,b,c,x0)
%用变尺度法求
fx=0.5*x'
g0=A*x0+b;
G0=A;
H0=eye
(2);
d0=-H0*g0;
a0=-d0'
*g0/(d0'
*G0*d0);
s0=a0*d0;
%x(k+1)-x(k);
y0=A*a0*d0;
%g(k+1)-g(k);
x1=x0+a0*d0;
(norm(s0)>
=epson)
switch
k
case{10}
x0=x1;
break
otherwise
g1=A*x1+b;
%
H1=H0+s0*s0'
/(s0'
*y0)-H0*y0*y0'
*H0/(y0'
*H0*y0);
H1=H0+((1+y0'
*H0*y0/(s0'
*y0))*s0*s0'
-H0*y0*s0'
-
s0*y0'
*H0)/(s0'
*y0);
d1=-H1*g1;
a1=-d1'
*g1/(d1'
*G0*d1);
a0=a1;
d0=d1;
H0=H1;
x1=x1+a0*d0;
fx=0.5*x1'
*A*x1+b'
*x1+c;
》
[x,fx,k]=bianchidufa([3
H1
=
0.40310.2578
0.25780.8945
=-1
x=
k=1
故函数极小点是点(1,1)
5.用鲍威尔法求函数
+
2x2
4x1
2x1x2
的极小点。
用鲍威尔法在
[x,fx,k]=bowell(A,b,c,x0)%鲍威尔法
d01=[1;
0];
d02=[0;
1];
x02=[0;
esp=1e-12;
norm(x0-x02)>
=esp
g01=A*x0+b;
a01=-d01'
*g01/(d01'
*A*d01);
x01=x0+a01*d01;
g02=A*x01+b;
a02=-d02'
*g02/(d02'
*A*d02);
x02=x01+a02*d02;
d10=x02-x0;
g10=A*x02+b;
a10=-d10'
*g10