机械优化设计王荣老师复习过程.docx

上传人:b****6 文档编号:15833497 上传时间:2023-07-08 格式:DOCX 页数:44 大小:432.80KB
下载 相关 举报
机械优化设计王荣老师复习过程.docx_第1页
第1页 / 共44页
机械优化设计王荣老师复习过程.docx_第2页
第2页 / 共44页
机械优化设计王荣老师复习过程.docx_第3页
第3页 / 共44页
机械优化设计王荣老师复习过程.docx_第4页
第4页 / 共44页
机械优化设计王荣老师复习过程.docx_第5页
第5页 / 共44页
机械优化设计王荣老师复习过程.docx_第6页
第6页 / 共44页
机械优化设计王荣老师复习过程.docx_第7页
第7页 / 共44页
机械优化设计王荣老师复习过程.docx_第8页
第8页 / 共44页
机械优化设计王荣老师复习过程.docx_第9页
第9页 / 共44页
机械优化设计王荣老师复习过程.docx_第10页
第10页 / 共44页
机械优化设计王荣老师复习过程.docx_第11页
第11页 / 共44页
机械优化设计王荣老师复习过程.docx_第12页
第12页 / 共44页
机械优化设计王荣老师复习过程.docx_第13页
第13页 / 共44页
机械优化设计王荣老师复习过程.docx_第14页
第14页 / 共44页
机械优化设计王荣老师复习过程.docx_第15页
第15页 / 共44页
机械优化设计王荣老师复习过程.docx_第16页
第16页 / 共44页
机械优化设计王荣老师复习过程.docx_第17页
第17页 / 共44页
机械优化设计王荣老师复习过程.docx_第18页
第18页 / 共44页
机械优化设计王荣老师复习过程.docx_第19页
第19页 / 共44页
机械优化设计王荣老师复习过程.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

机械优化设计王荣老师复习过程.docx

《机械优化设计王荣老师复习过程.docx》由会员分享,可在线阅读,更多相关《机械优化设计王荣老师复习过程.docx(44页珍藏版)》请在冰点文库上搜索。

机械优化设计王荣老师复习过程.docx

机械优化设计王荣老师复习过程

(一)一维搜索方法

1.1题目:

1.2最优解:

1.3采用的算法及其算法的基本思想:

首先采用进退法确定函数极值点所在的搜索区间[a,b],然后采用牛顿法求出极值。

进退法的基本思想:

按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。

黄金分割法的基本思想:

通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。

)缩小比较

大小确定取舍区间。

1.4程序框图:

进退法和黄金分割法流程图如下:

 

图1进退法流程图

图2黄金分割法程序框图

1.5具体程序如下:

共3个M文件,文件名分别为:

F.m;JINTUI.m;FGOLDEN.m

F.m具体程序:

%定义f(x)函数的表达式f(x)=t^2-10*t+36

functiony=F(t)

y=t^2-10*t+36;

JINTUI.m具体程序:

function[t,minF]=FGOLDEN(precision,a0,h)

[a,b]=JINTUI(a0,h);

A=a;

B=b;

n=1;

while0.618^(n-1)>=precision

C=A+0.312*(B-A);

D=A+0.618*(B-A);

ifC

ifF(C)

B=D;

else

A=C;

end

else

ifF(C)

A=C;

else

B=D;

end

end

n=n+1;

end

t=A;

minF=F(A);

FGOLDEN.m具体程序如下:

function[x1,x2]=JINTUI(a0,h)

a=a0;

b=a0+h;

while1

ifF(a)

h=-h;

a=a+h;

b=a-h;

ifF(b)

break;

end

else

a=b;

b=a+h;

ifF(a)

break;

end

end

end

x1=a;

x2=b;

1.6输出结果:

 

2.1题目:

2.2最优解:

2.3采用的算法及其算法的基本思想:

首先采用进退法确定函数极值点所在的搜索区间[a,b],然后采用牛顿法求出极值。

进退法的基本思想:

按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。

黄金分割法的基本思想:

通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。

)缩小比较

大小确定取舍区间。

2.4程序框图:

进退法和黄金分割法流程图如下:

 

图1进退法流程图

图2黄金分割法程序框图

2.5具体程序如下:

共3个M文件,文件名分别为:

F12.m;JINTUI12.m;FGOLDEN12.m

F12.m具体程序:

%定义f(x)函数的表达式f(x)=t^4-5*t^3+4*t^2-6*t+60

functiony12=F12(t)

y12=t^4-5*(t^3)+4*(t^2)-6*t+60;

JINTUI12.m具体程序如下:

%用进退法找到合适的初始区间

function[x1,x2]=JINTUI12(a0,h)

a=a0;

b=a0+h;

while1

ifF12(a)

h=-h;

a=a+h;

b=a-h;

ifF12(b)

break;

end

else

a=b;

b=a+h;

ifF12(a)

break;

end

end

end

x1=a;

x2=b;

FGOLDEN12具体程序如下:

%定义黄金分割法函数模块

function[t,minF12]=FGOLDEN12(precision,a0,h)

%初始区间[a,b],精度precision,为区间的多少分之一

%a0为初始区间,h为步长

[a,b]=JINTUI12(a0,h);

A=a;

B=b;

n=1;

while0.618^(n-1)>=precision

C=A+0.312*(B-A);

D=A+0.618*(B-A);

%以上黄金分割法赋值

ifC

ifF12(C)

B=D;

else

A=C;

end

%判断1,取区间AD,将D点值赋给B或是取区间CB

else

ifF12(C)

A=C;

else

B=D;

end

end

%判断2

n=n+1;%循环加1

end

t=A;

minF12=F12(A);

2.6计算运行结果如下:

3.1题目:

3.2最优解:

3.3采用的算法及其算法的基本思想:

首先采用进退法确定函数极值点所在的搜索区间[a,b],然后采用牛顿法求出极值。

进退法的基本思想:

按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。

黄金分割法的基本思想:

通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。

)缩小比较

大小确定取舍区间。

3.4程序框图:

 

进退法和黄金分割法流程图如下:

 

图3.1进退法流程图

 

 

图3.2黄金分割法程序框图

3.5具体程序如下:

共3个M文件,文件名分别为:

F13.m;JINTUI13.m;FGOLDEN13.m

F13.m:

%定义f(x)函数的表达式f(x)=(t+1)(t-2)^2

functiony13=F13(t)

y13=t^3-3*t^2+4;

JINTUI13.m:

%用进退法找到合适的初始区间

function[x1,x2]=JINTUI13(a0,h)

a=a0;

b=a0+h;

while1

ifF13(a)

h=-h;

a=a+h;

b=a-h;

ifF13(b)

break;

end

else

a=b;

b=a+h;

ifF13(a)

break;

end

end

end

x1=a;

x2=b;

FGOLDEN13.m

%定义黄金分割法函数模块

function[t,minF13]=FGOLDEN13(precision,a0,h)

%初始区间[a,b],精度precision,为区间的多少分之一

%a0为初始区间,h为步长

[a,b]=JINTUI13(a0,h);

A=a;

B=b;

n=1;

while0.618^(n-1)>=precision

C=A+0.312*(B-A);

D=A+0.618*(B-A);

%以上黄金分割法赋值

ifC

ifF13(C)

B=D;

else

A=C;

end

%判断1,取区间AD,将D点值赋给B或是取区间CB

else

ifF13(C)

A=C;

else

B=D;

end

end

%判断2

n=n+1;%循环加1

end

t=A;

minF13=F13

(2);

 

3.6计算运行结果如下:

 

二无约束优化问题

1.1题目:

1.2最优解:

1.3采用的算法及其算法的基本思想:

将f(x)在x(k)点作泰勒展开,取二次函数式Φ(x)作为近似函数,以Φ(x)的极小值点作为f(x)的近似极小值点。

求二次函数的极值

1.4程序框图:

牛顿法程图如下:

1.6程序:

共一个main21.m文件:

main21.m具体程序如下:

clc;clearall;

symsx1x2tpmaxnprecision;%定义变量

f21=4*x1^2+x2^2-40*x1-12*x2+136;%定义函数

fx1=diff(f21,x1);%对f求x1偏导求的一阶导数;diff(函数,n),求的n阶导数(n是具体整数);%diff(函数,变量名),求对的偏导数;diff(函数,变量名,n)

fx2=diff(f21,x2);%对f求x2偏导

p=0;g=1;

disp('用梯度法求二元二次目标函数f(X)=4*x1^2+x2^2-40*x1-12*x2+136的最优解');

fori=1:

5%fori=1:

5

if(p==0)%if(p==0)

x1=input('Pleaseentertheinitialstartingpointx1:

');

x2=input('Pleaseentertheinitialstartingpointx2:

');

maxn=input('Pleaseenterthemaxmumnumberofinterationsmaxn:

');

precision=input('Pleaseentertheminimumofthesearchingdirectionprecision:

');

g=input('Outputtheresultofeachinteration,ifyouwantEnter1,ornot:

');

fora=1:

maxn%fora=1:

2:

8,则每次取值为1,3,5,7.其中2是步长

%但步长为1时可省略即原式为forn=1:

1:

100

f0=subs(f21);%subs(函数名)将函数里的变量用已知量代换对f中的变量带入已知量

f1=subs(fx1);%subs(函数名)将函数里的变量用已知量代换对fx1中的变量带入已知量

f2=subs(fx2);%subs(函数名)将函数里的变量用已知量代换对fx2中的变量带入已知量

if(double(sqrt(f1^2+f2^2))<=precision)%计算梯度模值进行比较

%以下为输出函数

disp('*************************************************************************');

disp('Theresult:

');

disp('Thetotalnumberofinterationsa:

');

disp('Thevalueofextremumx1:

');

vpa(x1,5)%vpa函数来实现数值精确到小数点后某一位vpa会根据精度要求去掉末尾的数位%或者补0vpa(x1,7)

%vpa的结果是符号数值,可以用于初等运算,不可用于关系运算以小数形式表示

disp('Thevalueofextremumx2:

');

vpa(x2,5)

disp('Thefunctionofextremumvalue:

');

vpa(f0)

p=1;break;

else

FF=F21(x1-t*f1,x2-t*f2);%最优解为t

FFt=diff(FF,t);

tt=solve(FFt,'t');%solve命令主要是用来求解代数方程(即多项式)的解即求解满足此中默认FFt=0;x1=x1-tt*f1;x2=x2-tt*f2;

if(g==1)

disp('Thenumberofinterationsa:

');

disp('Thevalueofx1:

');

x1=vpa(x1,5)%vpa函数来实现数值精确到小数点后某一位vpa会根据精度要求去掉末尾的数位或者补0vpa(x1,5)

%vpa的结果是符号数值,可以用于初等运算,不可用于关系运算以小数形式表示

disp('Thevalueofx2:

');

x2=vpa(x2,5);

disp('Thevalueoffunctionf0:

');

f0=vpa(f0,5)

disp('*************************************************************************');

end

end%对if进行结束

end%对for进行结束

if(p==0)

disp('PLEASETRYAGAIN');

end%if(p==0)

end%if(p==0)头一个

end%fori=1:

5

1.7计算输出结果:

 

2.1题目:

2.2最优解:

2.3采用的算法及其算法的基本思想:

将f(x)在x(k)点作泰勒展开,取二次函数式Φ(x)作为近似函数,以Φ(x)的极小值点作为f(x)的近似极小值点。

求二次函数的极值

2.4程序框图:

(牛顿法程图如下)

 

2.5具体程序:

Main22具体程序如下:

%用牛顿法求目标函数f(x)=(x1^2+x2-11)^2+(x1+x2^2-7)^2的最优解

clc;

symsx1x2precision;

f=(x1^2+x2-11)^2+(x1+x2^2-7)^2;

v=[x1x2];

df=jacobian(f,v);

df=df.';

H=jacobian(df,v);

disp('**********************************************************');

disp('用牛顿法求目标函数f(x)=(x1^2+x2-11)^2+(x1+x2^2-7)^2的最优解');

disp('**********************************************************');

disp('请输入初始位置点以及精度要求');

fprintf('\n');

x1=input('选取的初始点坐标点x1:

');

x2=input('选取的初始点坐标点x2:

');

precision=input('计算所要求迭代精度为:

');

x0=[x1,x2]';

g0=subs(df,v,x0);

H0=subs(H,v,x0);

H0=inv(H0);

k=0;

s=-H0*g0;

while(subs(sqrt(s(1,1)^2+s(2,1)^2))>precision)

s=-H0*g0;

x0=x0+s;

g0=subs(df,v,x0);

H0=subs(H,v,x0);

H0=inv(H0);

k=k+1;

end

disp('----------------------------------');

disp('计算结果如下:

');

fprintf('迭代的总次数:

\nk=%d\n',k);

fprintf('最优点坐标:

\nx1=%3.4f\n',x0

(1));

fprintf('最优点坐标:

\nx2=%3.4f\n',x0

(2))

f=subs(f,v,x0);

fprintf('函数的极值:

\nf=%3.4f\n',f);

disp('*************************************************');

disp('*************************************************');

 

2.6计算和输出结果:

 

3.1题目:

3.2最优解:

3.3采用的算法及其算法的基本思想:

将f(x)在x(k)点作泰勒展开,取二次函数式Φ(x)作为近似函数,以Φ(x)的极小值点作为f(x)的近似极小值点。

求二次函数的极值

3.4程序框图:

 

3.5程序:

共一个M文件:

main23.m:

%用牛顿法求目标函数f(x)=(x1^2+10*x2)^2+5*(x3-x4^2)^2+(x2-2*x3)^2+10*(x1-x4)^4最优解

clc;

symsx1x2x3x4precision;

f=(x1^2+10*x2)^2+5*(x3-x4^2)^2+(x2-2*x3)^2+10*(x1-x4)^4;%目标函数

v=[x1x2x3x4];%变量向量

df=jacobian(f,v);%梯度

df=df.';%非共轭转置

H=jacobian(df,v);%海森矩阵

disp('************************************************************************');

disp('用牛顿法求目标函数f(x)=(x1^2+10*x2)^2+5*(x3-x4^2)^2+(x2-2*x3)^2+10*(x1-x4)^4的最优解');

disp('***********************************************************************');

disp('请输入初始位置点以及精度要求');

fprintf('\n');

x1=input('选取的初始点坐标点x1:

');

x2=input('选取的初始点坐标点x2:

');

x3=input('选取的初始点坐标点x3:

');

x4=input('选取的初始点坐标点x4:

');

precision=input('计算所要求迭代精度要求:

');

x0=[x1,x2,x3,x4]';g0=subs(df,v,x0);H0=subs(H,v,x0);

H0=inv(H0);%海森矩阵的逆

k=0;s=-H0*g0;

while(subs(sqrt(s(1,1)^2+s(2,1)^2)+s(3,1)^2+s(4,1)^2)>precision)

s=-H0*g0;x0=x0+s;

g0=subs(df,v,x0);%求梯度的值

H0=subs(H,v,x0);%求海森矩阵的值

H0=inv(H0);

k=k+1;

end

disp('----------------------------------');

disp('计算结果如下:

');

fprintf('迭代的总次数:

\nk=%d\n',k);fprintf('最优点坐标:

\nx1=%3.4f\n',x0

(1));

fprintf('最优点坐标:

\nx2=%3.4f\n',x0

(2));fprintf('最优点坐标:

\nx3=%3.4f\n',x0(3));

fprintf('最优点坐标:

\nx4=%3.4f\n',x0(4));f=subs(f,v,x0);

fprintf('函数的极值:

\nf=%3.4f\n',f);

disp('*************************************************');

disp('*************************************************');

3.6计算结果如下:

三约束优化问题

1.1题目:

1.2最优解:

1.3采用的算法及其算法的基本思想:

采用的为外点法来进行计算。

其基本思想:

外点法是从可行域的外部构造一个点序列去逼近原约束问题的最优解。

构造函数进行计算。

1.4程序框图:

 

1.5程序:

共2个M文件,分别为:

main31.m和fdd31.m.

main31.m具体如下:

%用外点法求多维有约束目标函数f(x)=(x1-2)^2+(x2-1)^2极值

clc;

k=0;

M=1;

c=10;

symsx1x2precision1precision2a1a2;

v=[x1x2];%变量向量

f=(x1-2)^2+(x2-1)^2;%目标函数

g1=-x1^2-x2;

g2=x1+x2-2;

disp('****************************************************');

disp('用外点法求多维有约束目标函数f(x)=(x1-2)^2+(x2-1)^2极值');

disp('****************************************************');

disp('请输入初始位置点以及精度要求');

fprintf('\n');

a1=input('选取的初始点坐标点a1:

');

a2=input('选取的初始点坐标点a2:

');

precision1=input('计算所要求迭代精度要求precision1:

');

precision2=input('计算所要求迭代精度要求precision2:

');

X0=[a1,a2]';

while(k<100)

q=f+M*((g1)^2+(g2)^2);

X1=fdd31(q,x1,x2,X0);

norm=subs(sqrt((X1

(1)-X0

(1))^2+(X1

(2)-X0

(2))^2));

ff0=subs(subs(q,v,X0));

ff1=subs(subs(q,v,X1));

if(norm<=precision1)&(abs((ff0-ff1)/ff0)<=precision2)

break;

end

X0=X1;

M=c*M;

k=k+1;

end

disp('------------------------------------------');

disp('计算结果如下:

');

fprintf('迭代的总次数:

\nk=%d\n',k);

fprintf('最优点坐标:

\nx1=%3.4f\n',X0

(1));

fprintf('最优点坐标:

\nx2=%3.4f\n',X0

(2));

f=subs(f,v,X0);

fprintf('函数的极值:

\nf=%3.4f\n',f);

disp('********************************************************************');

disp('********************************************************************');

fdd31.m具体如下:

functionsc=fdd31(f,x1,x2,X0)

symsv;v=[x1,x2];%变量向量

df=jacobian(f,v);%梯度

df=df.';G=jacobian(df,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2