《機(jī)械優(yōu)化設(shè)計(jì)》大作業(yè)
高等流體力學(xué)
班 級(jí): 機(jī)設(shè)15學(xué)碩班
學(xué) 號(hào): 2015200813
姓 名: 張湘楠
授課老師: 畢新勝
日 期: 2016年7月 1日
一、研究報(bào)告內(nèi)容:
1、λ=0.618的證明、一維搜索程序作業(yè);
2、單位矩陣程序作業(yè);
3、連桿機(jī)構(gòu)問(wèn)題 + 自行選擇小型機(jī)械設(shè)計(jì)問(wèn)題或其他工程優(yōu)化問(wèn)題;
(1)分析優(yōu)化對(duì)象,根據(jù)設(shè)計(jì)問(wèn)題的要求,選擇設(shè)計(jì)變量,確立約束條件,建立目標(biāo)函數(shù),建立優(yōu)化設(shè)計(jì)的數(shù)學(xué)模型并編制問(wèn)題程序;
(2)選擇適當(dāng)?shù)膬?yōu)化方法,簡(jiǎn)述方法原理,進(jìn)行優(yōu)化計(jì)算;
(3)進(jìn)行結(jié)果分析,并加以說(shuō)明。
4、寫(xiě)出課程實(shí)踐心得體會(huì),附列程序文本。
5、為響應(yīng)學(xué)校2014年度教學(xué)工作會(huì)議的改革要求,探索新的課程考核評(píng)價(jià)方法,特探索性設(shè)立一開(kāi)放式考核項(xiàng)目,占總成績(jī)的5%。
試用您自己認(rèn)為合適的方式(書(shū)面)表達(dá)您在本門(mén)課程學(xué)習(xí)方面的努力、進(jìn)步與收獲。(考評(píng)將重點(diǎn)關(guān)注您的獨(dú)創(chuàng)性、簡(jiǎn)潔性與可驗(yàn)證性)。
二、研究報(bào)告要求
1、報(bào)告命名規(guī)則:學(xué)號(hào)-姓名-《機(jī)械優(yōu)化設(shè)計(jì)》課程實(shí)踐報(bào)告.doc
2、報(bào)告提交郵址:weirongw@hfut.edu.cn(收到回復(fù),可視為提交成功)。
追 求:?jiǎn)栴}的工程性,格式的完美性,報(bào)告的完整性。
不 追 求:?jiǎn)栴}的復(fù)雜性,方法的惟一性。
評(píng)判準(zhǔn)則:獨(dú)一是好,先交為好;切勿拷貝。
目錄:
λ=0.618的證明、一維搜索程序作業(yè)
① 關(guān)于的證明……………………………………………………4
② 一維搜索的作業(yè)
采用matlab進(jìn)行編程…………………………………………… 5
采用C語(yǔ)言進(jìn)行編程……………………………………………… 7
單位矩陣程序作業(yè)
① 采用matlab的編程………………………………………………… 9
② 采用c語(yǔ)言進(jìn)行編程………………………………………………… 9
機(jī)械優(yōu)化工程實(shí)例
① 連桿機(jī)構(gòu)…………………………………………………………………11
② 自選機(jī)構(gòu)…………………………………………………………………16
課程實(shí)踐心得…………………………………………………………………… 20
附列程序文本…………………………………………………………………… 21
進(jìn)步,努力,建議………………………………………………………………25
一、λ=0.618的證明、一維搜索程序作業(yè)
①關(guān)于的證明
黃金分割法要求插入點(diǎn),的位置相對(duì)于區(qū)間兩端具有對(duì)稱(chēng)性,即
其中為待定常數(shù)。
此外,黃金分割法還要求在保留下來(lái)的區(qū)間內(nèi)再插入一點(diǎn)所形成的區(qū)間新三段,與原來(lái)的區(qū)間三段具有相同的比例分布。
黃金分割法還要求在保留下來(lái)的區(qū)間內(nèi)再插一點(diǎn)所形成的區(qū)間新三段,與原來(lái)的區(qū)間三段有相同的比例分布。
b
α1
α2
1
1-λ
λ
圖一
設(shè)原區(qū)間的長(zhǎng)度為1,如圖一所示,保留下來(lái)的區(qū)間長(zhǎng)度為,區(qū)間縮短率為。為了保持相同的分別比例。插入新點(diǎn)應(yīng)在位置上,在原區(qū)間的1位置應(yīng)相當(dāng)于在保留區(qū)間的位置。
故有:
a
α2
2
α3
α1
λ
λ(1-λ)
λ2
圖二
解得
編寫(xiě)0.618的程序,并計(jì)算下列問(wèn)題
程序框圖
(1)采用MATLAB進(jìn)行編程
%%
%fun.m:黃金分割法求極值點(diǎn)
%輸入數(shù)據(jù)
% a –搜索區(qū)間下限
% b –搜索區(qū)間上限
% e – 精度
%輸出數(shù)據(jù):
% x – 極小值點(diǎn)
%其他常量:
% c1,c2,c3 – 區(qū)間
% r –黃金分割比例0.618
%%
%定義函數(shù)
function x=fun(a,b,e)
r=0.618;
c1=b-r*(b-a);c2=a+r*(b-a);
y1=f(c1);y2=f(c2);
while (abs((b-a)/b)>e)&&(abs((y2-y1)/y2)>e)
if y1>=y2
a=c1;c1=c2;y1=y2;
c2=a+r*(b-a);y2=f(c2);
else
b=c2;c2=c1;y2=y1;
c1=b-r*(b-a);y1=f(c1);
end
end
x=0.5*(a+b);
end
對(duì)f函數(shù)的確立
10 function y=f(x)
y=(x-2)^2+3;
end
11 function y=f(x)
y=cosx
end
如果要計(jì)算y=(x-2)^2+3;的黃金分割法,則需要將圖所示的f腳本中的函數(shù)寫(xiě)成如①所示
如果要計(jì)算y=cosx;黃金分割法,則需要將圖所示的f腳本中的函數(shù)寫(xiě)成如②所示
fun函數(shù)表示對(duì)matlab的主程序語(yǔ)言。
函數(shù)NO.2運(yùn)算結(jié)果:
函數(shù)NO.1運(yùn)算結(jié)果:
(2)采用C語(yǔ)言進(jìn)行編程
#include <stdio.h>
#define K 0.618
double f(double); /*****函數(shù)值計(jì)算函數(shù)聲明*****/
void main(void)
{
double a,b,size;
double a1,a2;
int I;
printf(“請(qǐng)輸入?yún)^(qū)間兩端點(diǎn)(端點(diǎn)值應(yīng)大于0):”);
scanf(“%lf,%lf”,&a,&b); /*****輸入端點(diǎn)值*****/
printf(“請(qǐng)輸入精度:”);
scanf(“%lf”,&size); /*****輸入精度*****/
printf(“區(qū)間為(%lf,%lf),精度為%lf\n”,a,b,size);
printf(“序號(hào)\t a1\t\t a2\t\t f(a1)\t\t f(a2)\n”);
for(i=0;i<64;i++)
printf(“-“);
printf(“\n”);
i=0;
while((b-a)>size) /*****用精度控制循環(huán)次數(shù)*****/
{
i++;
a1=b-K*(b-a); /*****按0.618法插入兩點(diǎn)*****/
a2=a+K*(b-a);
printf(“%2d:\t%f\ta%f\t%f\t%f\n”,I,a1,a2,f(a1),f(a2));
/*****輸出每次計(jì)算后a1,a2,f(a1),f(a2)的值*****/
if(f(a1)>=f(a2))
a=a1;
else
b=a2;
}
printf(“所求極小值點(diǎn)為:x=%lf\t極小值f(x)=%f\n”,a,f(b));
}
double f(double x) /*****函數(shù)值計(jì)算函數(shù)*****/
{
double f;
f=(x-2)*(x-2)+3;
return(f);
}
對(duì)于y=cosx,須在程序中加一個(gè)#include(math.h)頭程序,以示我要調(diào)用函數(shù)語(yǔ)句。再將倒數(shù)第三行函數(shù)改為y=cos(x),再次編譯運(yùn)算即可。
運(yùn)行如圖所示
我們可以看出,大約在x=2處取到極值。與理論相符。
運(yùn)行如圖所示
我們可以看出,大約在π處取到極值。與理論相符。
二、用簡(jiǎn)單的語(yǔ)句寫(xiě)一個(gè)單位矩陣
①采用matlab構(gòu)造:
Matlab構(gòu)造的矩陣最是簡(jiǎn)便,因?yàn)楸旧砭陀幸粋€(gè)單位矩陣的函數(shù)。
由于matlab是基于C語(yǔ)言而設(shè)立的一個(gè)數(shù)學(xué)運(yùn)用軟件,所以他的集成度非常高,而且具有很好的開(kāi)放性,于是我們得知eye函數(shù),將其構(gòu)造。
Eg:
若要構(gòu)造一個(gè)3維的單位矩陣,則輸入eye(3)
若要構(gòu)造一個(gè)n為的單位矩陣,這輸入eye(n)
②用C語(yǔ)言構(gòu)造
程序如圖所示:
#include <stdio.h>
int main() {
int I,j,n;
while(scanf(“%d”,&n) == 1) {
for(I = 0; I < n; ++i) {
for(j = 0; j < n; ++j)
printf(“%d “,I == j);
printf(“\n”);
}
}
return 0;
}
三、機(jī)械優(yōu)化設(shè)計(jì)工程實(shí)例
① 連桿機(jī)構(gòu)問(wèn)題
(1)連桿機(jī)構(gòu)問(wèn)題描述
圖 1 機(jī)構(gòu)簡(jiǎn)圖
設(shè)計(jì)一曲柄連桿搖桿機(jī)構(gòu),要求曲柄從時(shí),搖桿的轉(zhuǎn)角最佳再現(xiàn)已知的運(yùn)動(dòng)規(guī)律:且=1,=5,為極位角,其傳動(dòng)角允許在范圍內(nèi)變化。
(2)數(shù)學(xué)模型的建立
設(shè)計(jì)變量:這里有兩個(gè)獨(dú)立參數(shù)和。因此設(shè)計(jì)變量為
目標(biāo)函數(shù):將輸入角分成30等分,并用近似公式計(jì)算,可得目標(biāo)函數(shù)的表達(dá)式
約束條件:
GX(1)=-X(1)0
GX(2)=-X(2) 0
GX(3)=-(X(1)+X(2))+6.00
GX(4)=-(X(2)+4.0)+X(1) 0
GX(5)=-(4.0+X(1))+X(2) 0
GX(6)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.00
GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.00
(3)程序編制
C ======================
SUBROUTINE FFX(N,X,FX)
C ======================
DIMENSION X(N)
COMMON /ONE/I1,I2,I3,I4,NFX,I6
NFX=NFX+1
P0=ACOS(((1.0+X(1))**2-X(2)**2+25.0)/(10.0*(1.0+X(1))))
Q0=ACOS(((1.0+X(1))**2-X(2)**2-25.0)/(10.0*X(2)))
T=90.0*3.1415926/(180.0*30.0)
FX=0.0
DO 10 K=0,30
PI=P0+K*T
QE=Q0+2.0*(PI-P0)**2/(3.0*3.1415926)
D=SQRT(26.0-10.0*COS(PI))
AL=ACOS((D*D+X(2)*X(2)-X(1)*X(1))/(2.0*D*X(2)))
BT=ACOS((D*D+24.0)/(10.0*D))
IF(PI.GE.0.0 .AND. PI.LT.3.1415926) THEN
QI=3.1415926-AL-BT
ELSE
QI=3.1415926-AL+BT
END IF
IF(K.NE.0 .OR. K.NE.30)THEN
FX=FX+(QI-QE)**2*T
ELSE
FX=FX+(QI-QE)**2*T/2.0
END IF
12 CONTINUE
RETURN
END
C =========================
SUBROUTINE GGX(N,KG,X,GX)
C =========================
DIMENSION X(N),GX(KG)
GX(1)=-X(1)
GX(2)=-X(2)
GX(3)=-(X(1)+X(2))+6.0
GX(4)=-(X(2)+4.0)+X(1)
GX(5)=-(4.0+X(1))+X(2)
GX(6)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.0
GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.0
RETURN
END
C =========================
SUBROUTINE HHX(N,KH,X,HX)
C =========================
DIMENSION X(N),HX(KH)
X(1)=X(1)
RETURN
END
輸入數(shù)據(jù)如下:
2,7,0
4.3,3.2
2.,0.2,0.01,0.00001,0.00001
0,1,0
3.5,2.8,5.5,4.5
(4) 可執(zhí)行程序的生成
13 將程序文本保存成文件t001.txt,存放在OPT_EXAM\FORTRAN\0-fortran目錄下。
14 使用DOS操作界面,OPT_EXAM\FORTRAN\0-fortran目錄下,輸入命令
asumt.for+t001.txt t001.for 回車(chē)。生成t001.for文件。
15 for1 t001; 回車(chē);
④for2 回車(chē);
⑤link t001; 回車(chē),即生成可執(zhí)行程序t001.exe。
⑥從t001.dat文件中加載數(shù)據(jù),運(yùn)行t001.exe。
t001<t001.dat>t001.rtf 回車(chē)得到結(jié)果。
操作過(guò)程如圖:
操作步驟
(5)結(jié)果與分析
結(jié)果顯示如下:
============== PRIMARY DATA ==============
N= 2 KG= 7 KH= 0
X :
.4300000E+01 .3200000E+01
FX:
.7847605E-02
GX:
-.4300000E+01 -.3200000E+01 -.1500000E+01 -.2900000E+01 -.5100000E+01
-.6729390E+01 -.1218939E+02
X :
.4300000E+01 .3200000E+01
FX:
.7847605E-02
GX:
-.4300000E+01 -.3200000E+01 -.1500000E+01 -.2900000E+01 -.5100000E+01
-.6729390E+01 -.1218939E+02
HX:
PEN = .3974390E+01
R = .2000000E+01 C = .2000000E+00 T0= .1000000E-01
EPS1= .1000000E-04 EPS2= .1000000E-04
============== ITERATION COMPUTE ==============
***** IRC = 1 R = .2000000E+01 PEN= .3974390E+01
***** IRC = 2 R = .4000000E+00 PEN= .3119361E+01
***** IRC = 3 R = .8000001E-01 PEN= .6407908E+00
***** IRC = 4 R = .1600000E-01 PEN= .1439420E+00
***** IRC = 5 R = .3200000E-02 PEN= .3733451E-01
***** IRC = 6 R = .6400000E-03 PEN= .8986510E-02
***** IRC = 7 R = .1280000E-03 PEN= .2346609E-02
***** IRC = 8 R = .2560000E-04 PEN= .9042178E-03
***** IRC = 9 R = .5120001E-05 PEN= .5396702E-03
***** IRC =10 R = .1024000E-05 PEN= .4410887E-03
***** IRC =11 R = .2048000E-06 PEN= .4128061E-03
***** IRC =12 R = .4096001E-07 PEN= .4071001E-03
***** IRC =13 R = .8192003E-08 PEN= .4014154E-03
***** IRC =14 R = .1638401E-08 PEN= .3992769E-03
***** IRC =15 R = .3276801E-09 PEN= .3987240E-03
***** IRC =16 R = .6553602E-10 PEN= .3984505E-03
***** IRC =17 R = .1310720E-10 PEN= .3983411E-03
***** IRC =18 R = .2621441E-11 PEN= .3982889E-03
=============== OPTIMUM SOLUTION ==============
IRC= 18 ITE= 35 ILI= 94 NPE= 447 NFX= 482 NGR= 0
R= .2621441E-11 PEN= .3982696E-03
X :
.4135127E+01 .2315381E+01
FX:
.3982623E-03
GX:
-.4135127E+01 -.2315381E+01 -.4505072E+00 -.2180254E+01 -.5819746E+01
-.7079845E+01 -.3633157E-03
HX:
Stop - Program terminated.
從結(jié)果中得知當(dāng)X1=4.135127,X2=2.315381時(shí),目標(biāo)函數(shù)取得最小值, 搖桿的轉(zhuǎn)角最佳再現(xiàn)已知的運(yùn)動(dòng)規(guī)律:
。
② 自選結(jié)構(gòu)模型
設(shè)計(jì)某帶式輸送機(jī)減速器的高速級(jí)齒輪傳動(dòng)。已知高速級(jí)輸入功率P1 = 10kW,小齒輪轉(zhuǎn)速n1 =960 r /min,傳動(dòng)比i = 3. 2。齒輪材料和熱處理:大齒輪45號(hào)鋼(調(diào)質(zhì))硬度為217~255HBS,小齒輪40Cr(調(diào)質(zhì))硬度為241~286HBS,工作壽命15 年,假設(shè)每年工作300天,兩班制,帶式輸送機(jī)工作平穩(wěn),轉(zhuǎn)向不變。常規(guī)設(shè)計(jì)方案采用直齒圓柱齒輪: m=2.5, z1=30, Φd=1。
解:(1)設(shè)計(jì)變量,
單級(jí)直齒圓柱齒輪傳動(dòng)的中心距 : f1X=121+?mz1
齒寬:f2x=mz1?d
將m, z1, ?d作為設(shè)計(jì)變量,即:
X=m,z1,?dT=x1,x2,x3T
2 )目標(biāo)函數(shù)
根據(jù)多目標(biāo)優(yōu)化的線(xiàn)性加權(quán)法建立體積最小的目標(biāo)函數(shù):
f ( x) =ω1f1 ( x) +ω2f2 ( x)=ω11+?x1x22 +ω2x1x2x3
其中:ω1 ,ω2 是加權(quán)系數(shù),且ω1 +ω2 = 1,分別根據(jù)設(shè)計(jì)時(shí)徑向和軸向安裝位置的要求設(shè)定;取ω1 = 1表示要求中心距最小,取ω2 = 1則表示要求齒寬最小。
3 )約束條件
模數(shù)的限制:對(duì)于傳遞動(dòng)力的齒輪,通常要求模數(shù)不少于1. 5-2,得約束條件:
G1x=2-x1<0>0
G2x=x1-1.5>0
(2)小齒輪齒數(shù)的限制:小齒輪齒數(shù)z1應(yīng)不大于產(chǎn)生根切的最小齒數(shù)17 ,得約束條件:
G3x=17-x2≤0
(3)齒寬系數(shù)的限制:由于?dmin ≤?d ≤?dmax ,約束條件為:
G4x=x3-1.15≤0
G5x=0.7-x3≤0
(4)齒面接觸強(qiáng)度的限制,根據(jù)公式并查表得約束條件:
G6x=1.04?107-2.916?105x13x23x33≤0
G7x=1.04?107-8.95?106x13x23x33≤0
(5)齒根彎曲強(qiáng)度的限制,根據(jù)公式查表得約束條件:
G8x=1.51?106-303.57x13x23x33≤0
G9x=1.42?106-2445.92x13x23x33≤0
4 建立數(shù)學(xué)優(yōu)化模型
高速級(jí)齒輪傳動(dòng)多目標(biāo)優(yōu)化設(shè)計(jì)的數(shù)學(xué)模型為:(ω1 取0.6,ω2取0.4)
Fun(x)=min[ω1? 1+3.2x1x22 +ω2? x1x2x3]
X=m,z1,?dT=x1,x2,x3T
G1x=2-x1≤0
G2x=x1-1.5≤0
G3x=17-x2≤0
G4x=x3-1.15≤0
G5x=0.7-x3≤0
G6x=1.04?107-2.916?105x13x23x33≤0
G7x=1.04?107-8.95?106x13x23x33≤0
G8x=1.51?106-303.57x13x23x33≤0
G9x=1.42?106-2445.92x13x23x33≤0
5 編寫(xiě)程序并運(yùn)行結(jié)果
目標(biāo)函數(shù)M文件:
function f=zhwm(x)
f=0.6*2.1*x(1)*x(2)+0.4*x(1)*x(2)*x(3);
約束函數(shù)M文件:
function [c ceq]=zhwy(x)
c(1)=1.04*10^7-2.916*10^5*(x(1)*x(2))^3*x(3);
c(2)=1.04*10^7-8.95*10^6*(x(1)*x(2))^3*x(3);
c(3)=1.51*10^6-303.57*x(1)^3*x(2)^2*x(3);
c(4)=1.42*10^6-2445.92*x(1)^3*x(2)^2*x(3);
ceq=[];
優(yōu)化函數(shù)M文件:
x0=[2 32 1];
lb=[1.5 17 0.7];
ub=[2 inf 1.15];
u=[];
[x,fval]=fmincon(@zhwm,x0,[],[],[],[],lb,ub,@zhwy)
約束函數(shù)
目標(biāo)函數(shù)
經(jīng)過(guò)Matlab優(yōu)化并圓整后的齒輪參數(shù)如下:
設(shè)計(jì)參數(shù)
模數(shù)
m/mm
齒數(shù)
z1
齒寬系數(shù)
?d
中心距
/mm
普通設(shè)計(jì)
2.5
30
1
157.5
MATLAB優(yōu)化
1.7911
27.4377
1.1499
84.5254
圓整后參數(shù)
1.75
30
1
117.6
經(jīng)過(guò)計(jì)算,最小體積為87.15。
四、課程學(xué)習(xí)心得
從懶懶散散的寒假到匆匆忙忙的考試周,仿佛只是在彈指一揮間。然而我們就在這段時(shí)間內(nèi),又學(xué)了幾門(mén)課程,而這些課程中,最有趣,最好玩的當(dāng)然就是《機(jī)械優(yōu)化設(shè)計(jì)了》
《機(jī)械優(yōu)化設(shè)計(jì)》是一門(mén)理論性非常強(qiáng)的一門(mén)課,剛開(kāi)始的時(shí)候不得要領(lǐng),但是在王衛(wèi)榮老師的帶領(lǐng)下,逐漸登堂入室,漸漸有所了解。
首先,這門(mén)課所依托的最強(qiáng)武器便是數(shù)學(xué)。數(shù)學(xué)即是方法,思維,和邏輯。其次所依托的便是算法程序語(yǔ)言。歸根結(jié)底的還是數(shù)學(xué),因?yàn)閿?shù)學(xué)賦予了算法以邏輯的力量,分析的過(guò)程,以及所能解決的一切問(wèn)題。還好我的數(shù)學(xué)基礎(chǔ)還算可以,邏輯思維還算通順,再加上老師所給予的方法,學(xué)習(xí)這門(mén)課程,一路上雖跌跌撞撞,但也有所收獲。
所謂收獲,從方法論的角度上講,即時(shí)通過(guò)一個(gè)通用模型,解決一系列的問(wèn)題,這是數(shù)學(xué)建模給我們的要求嗎,同時(shí)也是《優(yōu)化》這門(mén)課所賦予的核心思想。大二的時(shí)候,特別想搞建模,可是由于種種原因,其中最重要的原因就是懶惰,與之失之交臂。《優(yōu)化》這門(mén)課則彌補(bǔ)了我的部分遺憾。因?yàn)闆](méi)有建模的要求高,于是上手比較容易,同時(shí)又與我們自己的機(jī)械方面的課程緊密地結(jié)合在一起,過(guò)程輕車(chē)熟路。于是《優(yōu)化》真是一門(mén)寓學(xué)于樂(lè)的科目,只恨課程太多時(shí)間太少,不然真要好好地研究一番。
說(shuō)道大作業(yè),那可是真的難,第一問(wèn)和第二問(wèn)還好一點(diǎn),第三問(wèn)就不行了。說(shuō)來(lái)慚愧,連桿機(jī)構(gòu)問(wèn)題是借鑒了上屆學(xué)長(zhǎng)的做法才學(xué)會(huì)的。因?yàn)樘y了,所以就沒(méi)有用fortran語(yǔ)言做這些問(wèn)題,全部換成了matlab。真要感謝《優(yōu)化設(shè)計(jì)》這門(mén)課程,如果不是這門(mén)課程的話(huà),即使MATLAB已經(jīng)學(xué)過(guò)了,我估計(jì)也不會(huì)回過(guò)頭來(lái)復(fù)習(xí),是《優(yōu)化設(shè)計(jì)》讓我重新拾起matlab,并且我可以說(shuō),凡是在優(yōu)化大作業(yè)中使用過(guò)的算法,程序,我已經(jīng)忘不掉了。
因?yàn)閒ortran語(yǔ)言是一種相對(duì)陌生的語(yǔ)言,所以使用fortran變成的話(huà)有些力不從心,而我又是一個(gè)刨根究底的人,對(duì)于0.618的算法和單位矩陣的生成,我都是用的兩種算法,這樣保證思維的發(fā)散性。Matlab真的是一款很強(qiáng)大的軟體,他講機(jī)會(huì)用到的所有常見(jiàn)數(shù)學(xué)模型全部都涵括了,所以,我們,親切地稱(chēng)它為,萬(wàn)能數(shù)學(xué)工具。
當(dāng)學(xué)習(xí)變成一種樂(lè)趣的時(shí)候,每當(dāng)我們想做這種游戲的時(shí)候,時(shí)間,精力,甚至思路,仿佛全部有了,這就是積極所帶來(lái)的意義。學(xué)習(xí)《優(yōu)化設(shè)計(jì)》,傳達(dá)出這樣的信號(hào):重要的不是考試的結(jié)果,而是解決問(wèn)題的過(guò)程。所以,我覺(jué)得《優(yōu)化設(shè)計(jì)》這門(mén)課的評(píng)價(jià)方式,在我進(jìn)入大學(xué)以來(lái),是第一次遇到,大作業(yè),小作業(yè)的比值,竟然超過(guò)了考試成績(jī)的比值。換句話(huà)說(shuō),老師認(rèn)為,即使考試能考的很好,但是大作業(yè),小作業(yè)不行,說(shuō)明這只是一個(gè)會(huì)考試的工具,對(duì)于解決實(shí)際問(wèn)題的能力還是有所欠缺。對(duì)!這樣的評(píng)價(jià)很接地氣。
《優(yōu)化設(shè)計(jì)》這門(mén)課已經(jīng)結(jié)課了,考試已經(jīng)結(jié)束了。把大作業(yè)交上去,仿佛這門(mén)課與我們就沒(méi)有什么瓜葛了一樣。不,絕對(duì)不是。解決問(wèn)題的能力才剛剛開(kāi)始。
五、附列程序文本
黃金分割法求極值點(diǎn)的matlab程序
%%
%fun.m:黃金分割法求極值點(diǎn)
%輸入數(shù)據(jù)
% a –搜索區(qū)間下限
% b –搜索區(qū)間上限
% e – 精度
%輸出數(shù)據(jù):
% x – 極小值點(diǎn)
%其他常量:
% c1,c2,c3 – 區(qū)間
% r –黃金分割比例0.618
%%
%定義函數(shù)
function x=fun(a,b,e)
r=0.618;
c1=b-r*(b-a);c2=a+r*(b-a);
y1=f(c1);y2=f(c2);
while (abs((b-a)/b)>e)&&(abs((y2-y1)/y2)>e)
if y1>=y2
a=c1;c1=c2;y1=y2;
c2=a+r*(b-a);y2=f(c2);
else
b=c2;c2=c1;y2=y1;
c1=b-r*(b-a);y1=f(c1);
end
end
x=0.5*(a+b);
end
對(duì)f函數(shù)的確立
①function y=f(x)
y=(x-2)^2+3;
end
②function y=f(x)
y=cosx
end
黃金分割法求極值點(diǎn)的C語(yǔ)言程序
#include <stdio.h>
#define K 0.618
double f(double); /*****函數(shù)值計(jì)算函數(shù)聲明*****/
void main(void)
{
double a,b,size;
double a1,a2;
int i;
printf("請(qǐng)輸入?yún)^(qū)間兩端點(diǎn)(端點(diǎn)值應(yīng)大于0):");
scanf("%lf,%lf",&a,&b); /*****輸入端點(diǎn)值*****/
printf("請(qǐng)輸入精度:");
scanf("%lf",&size); /*****輸入精度*****/
printf("區(qū)間為(%lf,%lf),精度為%lf\n",a,b,size);
printf("序號(hào)\t a1\t\t a2\t\t f(a1)\t\t f(a2)\n");
for(i=0;i<64;i++)
printf("-");
printf("\n");
i=0;
while((b-a)>size) /*****用精度控制循環(huán)次數(shù)*****/
{
i++;
a1=b-K*(b-a); /*****按0.618法插入兩點(diǎn)*****/
a2=a+K*(b-a);
printf("%2d:\t%f\ta%f\t%f\t%f\n",i,a1,a2,f(a1),f(a2));
/*****輸出每次計(jì)算后a1,a2,f(a1),f(a2)的值*****/
if(f(a1)>=f(a2))
a=a1;
else
b=a2;
}
printf("所求極小值點(diǎn)為:x=%lf\t極小值f(x)=%f\n",a,f(b));
}
double f(double x) /*****函數(shù)值計(jì)算函數(shù)*****/
{
double f;
f=(x-2)*(x-2)+3;
return(f);
}
對(duì)于y=cosx,須在程序中加一個(gè)#include(math.h)頭程序,以示我要調(diào)用函數(shù)語(yǔ)句。再將倒數(shù)第三行函數(shù)改為y=cos(x),再次編譯運(yùn)算即可。
單位矩陣的matlab程序
eye(x)
單位矩陣的C語(yǔ)言程序
#include <stdio.h>
int main() {
int I,j,n;
while(scanf(“%d”,&n) == 1) {
for(I = 0; I < n; ++i) {
for(j = 0; j < n; ++j)
printf(“%d “,I == j);
printf(“\n”);
}
}
return 0;
連桿機(jī)構(gòu)的fortran語(yǔ)言
C ======================
SUBROUTINE FFX(N,X,FX)
C ======================
DIMENSION X(N)
COMMON /ONE/I1,I2,I3,I4,NFX,I6
NFX=NFX+1
P0=ACOS(((1.0+X(1))**2-X(2)**2+25.0)/(10.0*(1.0+X(1))))
Q0=ACOS(((1.0+X(1))**2-X(2)**2-25.0)/(10.0*X(2)))
T=90.0*3.1415926/(180.0*30.0)
FX=0.0
DO 10 K=0,30
PI=P0+K*T
QE=Q0+2.0*(PI-P0)**2/(3.0*3.1415926)
D=SQRT(26.0-10.0*COS(PI))
AL=ACOS((D*D+X(2)*X(2)-X(1)*X(1))/(2.0*D*X(2)))
BT=ACOS((D*D+24.0)/(10.0*D))
IF(PI.GE.0.0 .AND. PI.LT.3.1415926) THEN
QI=3.1415926-AL-BT
ELSE
QI=3.1415926-AL+BT
END IF
IF(K.NE.0 .OR. K.NE.30)THEN
FX=FX+(QI-QE)**2*T
ELSE
FX=FX+(QI-QE)**2*T/2.0
END IF
10 CONTINUE
RETURN
END
C =========================
SUBROUTINE GGX(N,KG,X,GX)
C =========================
DIMENSION X(N),GX(KG)
GX(1)=-X(1)
GX(2)=-X(2)
GX(3)=-(X(1)+X(2))+6.0
GX(4)=-(X(2)+4.0)+X(1)
GX(5)=-(4.0+X(1))+X(2)
GX(6)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.0
GX(7)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.0
RETURN
END
C =========================
SUBROUTINE HHX(N,KH,X,HX)
C =========================
DIMENSION X(N),HX(KH)
X(1)=X(1)
RETURN
END
自選機(jī)構(gòu)的matlab語(yǔ)言
目標(biāo)函數(shù)M文件:
function f=zhwm(x)
f=0.6*2.1*x(1)*x(2)+0.4*x(1)*x(2)*x(3);
約束函數(shù)M文件:
function [c ceq]=zhwy(x)
c(1)=1.04*10^7-2.916*10^5*(x(1)*x(2))^3*x(3);
c(2)=1.04*10^7-8.95*10^6*(x(1)*x(2))^3*x(3);
c(3)=1.51*10^6-303.57*x(1)^3*x(2)^2*x(3);
c(4)=1.42*10^6-2445.92*x(1)^3*x(2)^2*x(3);
ceq=[];
優(yōu)化函數(shù)M文件:
x0=[2 32 1];
lb=[1.5 17 0.7];
ub=[2 inf 1.15];
u=[];
[x,fval]=fmincon(@zhwm,x0,[],[],[],[],lb,ub,@zhwy)
六、進(jìn)步,努力,建議
首先我感覺(jué)最大的進(jìn)步,就是數(shù)學(xué)思維的提高。
比如。我以前解決問(wèn)題的時(shí)候,總是想要用最精確的解,于是總是每一步都跟著公式來(lái),殊不知,很多公式都是化簡(jiǎn)過(guò)的。所以適當(dāng)?shù)氖÷砸恍┝浚瑢?duì)于計(jì)算還是建模都是非常有幫助的
還有,介紹牛頓法的弊端的時(shí)候,忽然想到以前總喜歡投機(jī)的方法解題,也許我們口中的“笨方法”才是解題的最優(yōu)化的方法,有其是引入計(jì)算機(jī)以后。
其次,是工具的應(yīng)用日漸純熟。
有其是MATLAB的應(yīng)用,我?guī)缀趺總€(gè)問(wèn)題都是用MATLAB解決的,因?yàn)槲矣X(jué)得MATLAB上手比較容易,其他的軟體可以慢慢學(xué),而如果想在短時(shí)間內(nèi)解決一些問(wèn)題的話(huà),MATLAB無(wú)疑是最好的選擇。
當(dāng)然,我也學(xué)會(huì)多種工具的使用。比如C語(yǔ)言,我就嘗試用他們解決了兩個(gè)問(wèn)題,只是由于我水平還不夠高,用法還不夠純熟,所以并沒(méi)有把他們做為我主要的解決工具,但是,C語(yǔ)言的自主性遠(yuǎn)遠(yuǎn)超過(guò)MATLAB,所以我相信,在不久的將來(lái),我就能將C語(yǔ)言運(yùn)用純熟。
最后是關(guān)于課堂的建議。
第一:絕對(duì)贊同老師板書(shū)的教學(xué)方式
第二:絕對(duì)崇拜老師嚴(yán)謹(jǐn)?shù)慕虒W(xué)作風(fēng)
第三:希望老師能夠布置一點(diǎn)給學(xué)弟學(xué)妹的編程題(嗚嗚嗚~~~我們做不到了),先是一題,有答案有解析,最好還有截圖,然后給一條簡(jiǎn)單的同類(lèi)型的題目,有答案沒(méi)解析,仿照前題練練手,再出一道,無(wú)答案無(wú)解析,然后給他們獨(dú)立思考的空間,我想,再做大作業(yè)的時(shí)候,就不會(huì)像我們這樣手忙腳亂了。
關(guān)于評(píng)價(jià),可以搞一個(gè)分組制度,即3~5人組成自己的Team member,然后舉組之力搞一個(gè)命題出來(lái),然后進(jìn)行評(píng)價(jià)。分組制度由老師來(lái)解決,盡量使能力均勻,這樣的話(huà)更容易考究區(qū)分度。命題的評(píng)價(jià)結(jié)果由老師評(píng)判,而小組成員在內(nèi)部的作用由小組成員自己評(píng)價(jià),分出檔次1,2,3,4,5(假如五個(gè)人的話(huà)),使得每個(gè)人的檔次不一樣,這樣每個(gè)人就會(huì)追求那個(gè)最高檔的,遴選擇優(yōu)出來(lái)。兩個(gè)方向同時(shí)進(jìn)行。
謝謝老師的悉心指導(dǎo)?。?!