机械优化设计MATLAB程序文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机械优化设计作业1.用二次插值法求函数()()()22

ϕ极小值,精度e=0.01。

t

t

=t

1-

+

在MATLAB的M文件编辑器中编写的M文件,如下:

f=inline('(t+1)*(t-2)^2','t')

a=0;b=3;epsilon=0.01;

t1=a;f1=f(t1);

t3=b;f3=f(t3);

t2=0.5*(t1+t3);f2=f(t2);

c1=(f3-f1)/(t3-t1);

c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);

t4=0.5*(t1+t3-c1/c2);f4=f(t4);

k=0;

while(abs(t4-t2)>=epsilon)

if t2

if f2>f4

f1=f2;t1=t2;

t2=t4;f2=f4;

else

f3=f4;t3=t4;

end

else

if f2>f4

f3=f2;t3=t2;

t2=t4;f2=f4;

else

f1=f4;t2=t4;

end

end

c1=(f3-f1)/(t3-t1);

c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);

t4=0.5*(t1+t3-c1/c2);f4=f(t4);

k=k+1;

end

%输出最优解

if f2>f4

t=t4;f=f(t4);

else

t=t2;f=f(t2);

end

fprintf(1,'迭代计算k=%3.0f\n',k)

fprintf(1,'极小点坐标t=%3.0f\n',t)

fprintf(1,'函数值f=%3.4f\n',f)

运行结果如下:

迭代计算k= 7

极小点坐标t= 2

函数值f=0.0001

2.用黄金分割法求函数()32321+-=t t t ϕ的极小值,精度e=0.01。

在MATLAB 的M 文件编辑器中编写的M 文件,如下:

f=inline('t^(2/3)-(t^2+1)^(1/3)','t');

a=0;b=3;epsilon=0.01;

t1=b-0.618*(b-a);f1=f(t1);

t2=a+0.618*(b-a);f2=f(t2);

k=1;

while abs(b-a)>=epsilon

if f1

b=t2;t2=t1;f2=f1;

t1=b-0.618*(b-a);f1=f(t1);

else

a=t1;t1=t2;f1=f2;

t2=a+0.618*(b-a);f2=f(t2);

end

t=0.5*(b+a);

k=k+1;

f0=f(t);

end

fprintf(1,'迭代次数k=% 3.0f\n',k)

fprintf(1,'迭代区间—左端a=%3.4f\n',a)

fprintf(1,'试点1坐标值t1=%3.4f\n',t1)

fprintf(1,'函数值f1=%3.4f\n',f(t1))

fprintf(1,'迭代区间—右端b=%3.4f\n',b)

fprintf(1,'试点2坐标值t2=%3.4f\n',t2)

fprintf(1,'函数值f2=%3.4f\n',f(t2))

fprintf(1,'区间中点t=%3.4f\n',t)

fprintf(1,'函数值f0=%3.4f\n',f(t))

运行结果如下:

迭代次数k= 13

迭代区间—左端a=0.0000

试点1坐标值t1=0.0036

函数值f1=-0.9767

迭代区间—右端b=0.0093

试点2坐标值t2=0.0058

函数值f2=-0.9679

区间中点t=0.0047

函数值f0=-0.9721

由黄金分割法在初始区间[0,3]求得的极小值点为t=0.0047,极小值为-0.9721。

3.用牛顿法、阻尼牛顿法及变尺度法求函数()()()2

21412122,x x x x x f -+-=的极小点。 (1)在用牛顿法在MATLAB 的M 文件编辑器中编写的M 文件,如下:

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)});

k=0;

p=-G1\g1;

x0=x0+p;

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;

end

x=x0;

fx=subs(f,{x1,x2},{x(1,1),x(2,1)});

运行结果如下:

>> [x,fx,k]=niudunfa([1;1])

x =1.897

0.9483

fx =0.7647

k =23

(2)用阻尼牛顿法在MATLAB 的M 文件编辑器中编写的M 文件,如下:

function [x,fx,k]=zuniniudunfa(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)});

相关文档
最新文档