版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 緒論◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆</p><p> 一.有限元方法和優(yōu)化方法的選擇◆◆◆◆</p><p> 二.大壩內(nèi)應(yīng)力分析◆◆◆◆◆◆◆◆◆◆◆◆</p><p> 2.1工程問(wèn)題◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆</p>
2、<p> 2.2解析法求解◆◆◆◆◆◆◆◆◆◆◆◆◆◆</p><p> 2.3有限元法求解◆◆◆◆◆◆◆◆◆◆◆◆◆</p><p> 2.4結(jié)果分析與比較◆◆◆◆◆◆◆◆◆◆</p><p> 三.鮑威爾法(powell)◆◆◆◆◆◆◆◆◆◆◆◆</p><p> 3.1鮑威爾法簡(jiǎn)介◆◆◆◆◆◆◆◆◆</p&
3、gt;<p> 3.2鮑威爾法計(jì)算框圖◆◆◆◆◆◆</p><p> 3.3問(wèn)題與結(jié)果◆◆◆◆◆◆◆◆◆◆◆</p><p> 附錄◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆</p><p> 參考文獻(xiàn)◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆</p><p><b> 緒論</b></p>
4、<p> 有限元法是一種高能效,常用的計(jì)算方法。有限元法在早期是以變分原理為基礎(chǔ)發(fā)展起來(lái)的,所以它廣泛的應(yīng)用于拉普拉斯方程和泊松方程所描述的各種物理場(chǎng)中。自從1969年以來(lái),,某些學(xué)者在流體力學(xué)中應(yīng)用加權(quán)余數(shù)法中的迦遼金法或最小二乘法等同樣獲得了有限元方程,因?yàn)橛邢拊梢詰?yīng)用于任何微分方程所描述的各種物理場(chǎng)中,而不再要求這類(lèi)物理場(chǎng)和泛函數(shù)的極值問(wèn)題有所聯(lián)系?;舅枷耄河薪饨o定的泊松方程化為求解泛函數(shù)的極值問(wèn)題。<
5、/p><p> 它的原理:將連續(xù)的求解或離散的的一組單元的組合體,用在每個(gè)單元內(nèi)假設(shè)的近似函數(shù)來(lái)分片的表示求解或?qū)蟮奈粗獔?chǎng)函數(shù)來(lái)表達(dá)。從而使一個(gè)連續(xù)的無(wú)限自由度問(wèn)題變成離散的有限自由度問(wèn)題</p><p> 經(jīng)過(guò)多年的發(fā)展,有限元法已經(jīng)成為現(xiàn)代結(jié)構(gòu)分析的有效方法和主要手段,它的應(yīng)用非常廣泛,如:對(duì)拱壩、渦輪葉片、飛機(jī)和船體等復(fù)雜結(jié)構(gòu)進(jìn)行應(yīng)力分析。由平衡問(wèn)題擴(kuò)展到穩(wěn)定問(wèn)題與動(dòng)力問(wèn)題。如:
6、對(duì)結(jié)構(gòu)在地震力與波浪力作用下的動(dòng)力反應(yīng)進(jìn)行分析,由彈性力學(xué)問(wèn)題擴(kuò)展到彈塑性與粘彈性問(wèn)題,如:土力學(xué)與巖石力學(xué)問(wèn)題、疲勞力學(xué)與脆性斷裂問(wèn)題;由固體力學(xué)擴(kuò)展到流體力學(xué)、滲流與固結(jié)理論,熱傳導(dǎo)與熱應(yīng)力問(wèn)題以及建筑聲學(xué)與噪聲問(wèn)題。由工程力學(xué)擴(kuò)展到力學(xué)的其他領(lǐng)域,如:冰川與地質(zhì)力學(xué),血管與眼球力學(xué)等。由結(jié)構(gòu)計(jì)算問(wèn)題擴(kuò)展到結(jié)構(gòu)優(yōu)化設(shè)計(jì)問(wèn)題和可靠性問(wèn)題。</p><p> 有限單元由假定的應(yīng)變方程式導(dǎo)出,有些單元可假設(shè)應(yīng)變是
7、常量,而另一些可采用更高階的函數(shù),利用給定單元的這些方程和實(shí)際幾何體,則可以寫(xiě)出外力和節(jié)點(diǎn)位移之間的平衡方程。對(duì)于單元的每個(gè)節(jié)點(diǎn)來(lái)說(shuō),每個(gè)自由度就有一個(gè)方程,這些方程被十分便利的寫(xiě)成矩陣的形式以用于計(jì)算機(jī)的演算中。</p><p> 近年來(lái),機(jī)械優(yōu)化設(shè)計(jì)的應(yīng)用俞來(lái)愈廣,但還面臨許多問(wèn)題需要解決。例如,機(jī)械產(chǎn)品設(shè)計(jì)中零部件的通用化、系列化和標(biāo)準(zhǔn)化,整機(jī)優(yōu)化模型及方法的研究,機(jī)械設(shè)計(jì)中離散變量?jī)?yōu)化方法的研究,更為有
8、效的優(yōu)化設(shè)計(jì)方法的發(fā)掘等一系列問(wèn)題,都需做比較大的努力才能適應(yīng)機(jī)械工業(yè)發(fā)展的需要。</p><p> 近年來(lái),在計(jì)算機(jī)輔助設(shè)計(jì)中,應(yīng)用優(yōu)化方法后,使得在設(shè)計(jì)過(guò)程中即能不斷選擇設(shè)計(jì)參數(shù)并選出最優(yōu)方案,又能加快設(shè)計(jì)速度,縮短設(shè)計(jì)周期。把優(yōu)化設(shè)計(jì)與計(jì)算機(jī)輔助設(shè)計(jì)結(jié)合起來(lái),使設(shè)計(jì)過(guò)程完全自動(dòng)化,已成為設(shè)計(jì)方法的一個(gè)發(fā)展趨勢(shì)。</p><p> 一. 有限元方法和優(yōu)化方法的選擇</p>
9、;<p> 1.有限元問(wèn)題:大壩利用ANSYS軟件進(jìn)行分析。</p><p> 2.優(yōu)化問(wèn)題:利用鮑威爾法求解最優(yōu)解。</p><p><b> 二.大壩內(nèi)應(yīng)力分析</b></p><p><b> 2.1工程問(wèn)題</b></p><p> 圖示為一水壩示意圖,水面高度為25
10、m,壩體材料彈性模量為50GPa,泊松比為0.3,試對(duì)壩體進(jìn)行應(yīng)力分析。</p><p><b> P=5KN</b></p><p><b> 2.2 解析法求解</b></p><p> 此問(wèn)題屬于線(xiàn)性靜力學(xué)問(wèn)題,由于大壩的跨度遠(yuǎn)大于其他尺寸的方向,因此分析過(guò)程中按平面應(yīng)變問(wèn)題求解。應(yīng)用有限元求解方法,,粗略劃分
11、有限元進(jìn)行求解,同后面軟件計(jì)算結(jié)果進(jìn)行比較。將均布載荷處的10*25劃分成兩個(gè)三角形單元,分別計(jì)算出兩個(gè)單元的剛度,受力等等,再整體求解。經(jīng)計(jì)算,單元1的計(jì)算數(shù)值是</p><p><b> m</b></p><p><b> I j</b></p><p> bi=-25 bj =25
12、 bm=0 ci=-10 cj=0 cm=10</p><p><b> 應(yīng)變矩陣</b></p><p> -5 0 5 0 0 0</p><p> [B]= 1/50 0 -2 0 0 0 2</p><p> -2 -5 0 5
13、 2 0</p><p><b> 單元載荷</b></p><p> [p]=125t[1/3 0 0 0 1/6 0]</p><p> 剛度矩陣 </p><p> 經(jīng)計(jì)算i、j,以及ij邊的位移均為零,在i節(jié)點(diǎn)處的應(yīng)力最大,為1.6*e6</p
14、><p> 2.3 有限元法求解</p><p> ?。ㄒ唬┙⒐ぷ魑募凸ぷ鳂?biāo)題</p><p> ?。?)選擇Utility Menu/File/ Change Jobname命令,出現(xiàn)Jobname對(duì)話(huà)框。在【FILNAM】Enter nee jobname輸入欄中輸入工作文件名xiti,單擊OK按鈕,關(guān)閉該對(duì)話(huà)框。</p><p>
15、?。?)Utility Menu /File/ change Tile命令,出現(xiàn)Change Tile對(duì)話(huà)框,在輸入欄中輸入A DAM UNDER THE PREESURE OF WATER,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p><b> ?。ǘ┒x單元類(lèi)型</b></p><p> ?。?)選擇main menue/preprocessor/elemen
16、t type |add/edit/delete命令,出現(xiàn)element types對(duì)話(huà)框,單擊add按鈕,出現(xiàn)library of element types對(duì)話(huà)框,在library of element types列表中選擇structural solid ,quad 8node 82,在element tyoe reference number輸入欄中輸入1,單擊ok 按鈕關(guān)閉該對(duì)話(huà)框。</p><p&g
17、t; ?。?)單擊element type 對(duì)話(huà)框上的options按鈕,出現(xiàn)plane82 element type option對(duì)話(huà)框,在element behavior K3下拉選項(xiàng)中選擇plane strain,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> ?。?)單擊elemen t type對(duì)話(huà)框上的close按鈕,關(guān)閉該對(duì)話(huà)框。</p><p> ?。ㄈ┒x材料性能參數(shù)&
18、lt;/p><p> ?。?)選擇main menu|preprocessor|material props|material models命令,出現(xiàn)define material mode behavior對(duì)話(huà)框。</p><p> ?。?)在material model available一欄中依次雙擊structural 、linear、elastic、isotroptiac選項(xiàng),出現(xiàn)
19、linear isotroptiac properties for material numeber1對(duì)話(huà)框,在EX輸入欄中輸入5E10,在PRXY輸入欄中輸入0.3,單擊OK按鈕掛壁該對(duì)話(huà)框。</p><p> (3)在define material model behavior對(duì)話(huà)框中選擇material|Exit命令,關(guān)閉該對(duì)話(huà)框。</p><p> ?。ㄋ模﹦?chuàng)建幾何模型、劃分網(wǎng)格
20、</p><p> ?。?)選擇main menu|preprocessor|modeling|creat|keypoint|in active CS命令,出現(xiàn)create keypoint in active coordinate systerm對(duì)話(huà)框。在NPT keypoint nember輸入欄中輸入1,在X,Y,Z location an active CS輸入欄中分別輸入0,0,0,如圖示,單擊ap
21、ply按鈕。</p><p> ?。?)參照上一步的操作步驟,依次創(chuàng)建一下關(guān)鍵點(diǎn)及其編號(hào):</p><p> 2(20,0,0);3(10,30,0);4(0,30,0);5(0,25,0)</p><p> ?。?)單擊create keypoint in ctive coordinate system對(duì)話(huà)框上的OK按鈕關(guān)閉該對(duì)話(huà)框。</p>&l
22、t;p> ?。?)選擇 main menu | preprocessor | modeling | create | areas |arbitrary|through kps命令,出現(xiàn)create area thru拾取菜單,在輸入欄中輸入1,2,3,4,5,單擊OK按鈕關(guān)閉該菜單。</p><p> ?。?)選擇main menu|preprocessor|meshing |size cntrls|
23、manualsize|lines|picked lines命令,出現(xiàn)elemennt size on picked lines拾取菜單,在輸入欄中輸入1,3,單擊OK按鈕,出現(xiàn)element size on picked lines 對(duì)話(huà)框,在NDIV No.of element divisions輸入欄中輸入30,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。如下圖示。</p><p> 提示:設(shè)置線(xiàn)段等份數(shù)。</p&g
24、t;<p> ?。?)選擇main menu|preprocessor|meshing| size cncrls |manualsize |lines |picked lines命令,出現(xiàn)elemennt size on picked lines拾取菜單,在輸入欄中輸入2, 單擊OK按鈕,出現(xiàn)element size on picked lines 對(duì)話(huà)框,在NDIV No.of element divisions輸入欄
25、中輸入60,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> ?。?)選擇main menu|preprocessor|meshing| size cncrls |manualsize |lines |picked lines命令,出現(xiàn)elemennt size on picked lines拾取菜單,在輸入欄中輸入4, 單擊OK按鈕,出現(xiàn)element size on picked lines 對(duì)話(huà)框,在NDIV
26、 No.of element divisions輸入欄中輸入10,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> ?。?)選擇main menu|preprocessor|meshing| size cncrls |manualsize |lines |picked lines命令,出現(xiàn)elemennt size on picked lines拾取菜單,在輸入欄中輸入5, 單擊OK按鈕,出現(xiàn)element size
27、 on picked lines 對(duì)話(huà)框,在NDIV No.of element divisions輸入欄中輸入50,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> (9)選擇main menu|preprocessor|meshing| mesh| areas| mapped |by corners命令。出現(xiàn)map mesh area by拾取菜單,在輸入欄中輸入1,單擊OK按鈕,再次出現(xiàn)map mesh a
28、reas by拾取菜單,,在輸入欄中輸入,4,3,2,1,單擊OK 按鈕關(guān)閉菜單。</p><p> ?。?0)選擇utility menu|select |everything命令。</p><p> ?。?1)選擇utility menu| plot |elements 命令,ansys顯示窗口顯示網(wǎng)格劃分結(jié)果。,如圖示,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p&g
29、t; ?。?2)選擇utility menu |file |save as命令,出現(xiàn)save database對(duì)話(huà)框,在save database to輸入欄中輸入xiti.db,保存操作過(guò)程,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p><b> ?。ㄎ澹┘虞d求解</b></p><p> ?。?)選擇main menu| solution |analysis ty
30、pe|new analysis命令,出現(xiàn)new analysis 對(duì)話(huà)框,選擇分析類(lèi)型為static,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> ?。?)選擇選擇main menu| solution |define loads |apply|functions|define/edit命令,出現(xiàn)function editor對(duì)話(huà)框,參照?qǐng)D進(jìn)行設(shè)置,選擇對(duì)話(huà)框上的FILE|save命令,出現(xiàn)“另存為”對(duì)話(huà)框,將所
31、做函數(shù)取名為FUNC保存在ANSYS工作目錄下,單擊:“保存”按鈕關(guān)閉該對(duì)話(huà)框,在function editor對(duì)話(huà)框上選擇file|close按鈕關(guān)閉該對(duì)話(huà)框。</p><p><b> 函數(shù)編輯器對(duì)話(huà)框</b></p><p> ?。?)選擇main menu| solution |define loans |apply |functions |read fil
32、e命令,出現(xiàn)“打開(kāi)”對(duì)話(huà)框,選擇FUNC.func,單擊“打開(kāi)”按鈕,出現(xiàn) function loader對(duì)話(huà)框,在table parameter name輸入欄中輸入PRES1,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> ?。?)選擇main menu |solution |define loads |apply | structural| on lines |命令,出現(xiàn)apply PRES on line
33、s 拾取菜單,在輸入欄中輸入5,單擊OK按鈕,出現(xiàn)apply PRES on lines對(duì)話(huà)框,在【SFL】 apply PRES on lines as a下拉選框中選擇existing table,單擊OK按鈕,出現(xiàn)apply PRES on lines對(duì)話(huà)框,在列表框中選擇PRES1,如圖所示</p><p> ?。?)選擇main menu| solution |define loads| apply
34、|structural | displacement |on lines命令,出現(xiàn)apply U,ROT on L拾取菜單,在輸入欄中輸入1,單擊OK按鈕,出現(xiàn)applyU,ROT on lines對(duì)話(huà)框,參照下圖設(shè)置,單擊OK 按鈕關(guān)閉該對(duì)話(huà)框。</p><p> (6)選擇utility menu |file | save as 命令,出現(xiàn)save database to輸入欄中輸入xiti.db,保存操作
35、過(guò)程,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p> ?。?)選擇main menu|solution |sove|current LS命令,單擊sove current load step對(duì)話(huà)框上的OK按鈕,ansys開(kāi)始求解計(jì)算。求解結(jié)束后,ansys顯示窗口出現(xiàn)NOTE提示框,單擊close按鈕關(guān)閉該對(duì)話(huà)框。</p><p> (8)選擇utility menu |file| sav
36、e as命令,出現(xiàn)save database to 輸入欄中輸入xiti.db,保存求解結(jié)果,單擊OK按鈕關(guān)閉該對(duì)話(huà)框。</p><p><b> ?。┎榭辞蠼饨Y(jié)果</b></p><p> ?。?)選擇main menu |general postproc| contour plot |nodal solu 命令,出現(xiàn)contour nodal solution
37、 data對(duì)話(huà)框。選擇nodal solution} displacement vector sum,單擊OK按鈕,ANSYS顯示窗口顯示合位移等值線(xiàn)圖。</p><p> ?。?)選擇main menu |general postproc| contour plot |nodal solu命令,出現(xiàn)contour nodal solution data對(duì)話(huà)框,選擇nodal solution |stess| v
38、on mises stress,單擊OK按鈕,ANSYS顯示窗口顯示等效應(yīng)力場(chǎng)等值線(xiàn)圖</p><p> 。 合位移等值線(xiàn)圖</p><p><b> 等效應(yīng)力場(chǎng)等效線(xiàn)圖</b></p><p> (3)選擇utility menu|list |nodes,出現(xiàn)各個(gè)節(jié)點(diǎn)的信息。</p>&l
39、t;p> ?。?)選擇utility menu| file|exit命令,出現(xiàn)EXITfrom ansys對(duì)話(huà)框,選擇Quit-No Save!,單擊OK按鈕,關(guān)閉ANSYS.</p><p> 2.4 結(jié)果分析與比較</p><p> 由于計(jì)算量很大,在此只計(jì)算比較了節(jié)點(diǎn)I處的位移與應(yīng)力,通過(guò)理論計(jì)算的結(jié)果與ansys軟件計(jì)算的結(jié)果相對(duì)比,位移結(jié)果相同。應(yīng)力結(jié)果有所偏差,是在計(jì)
40、算過(guò)程中的有效數(shù)字取舍導(dǎo)致,可認(rèn)為結(jié)果一致。</p><p> 三 鮑威爾法( Powell法)</p><p><b> 3.1鮑威爾法簡(jiǎn)介</b></p><p> 兩次平行搜索產(chǎn)生一個(gè)共軛方向,Powell法也是一種共軛方向法,能在有限步長(zhǎng)內(nèi)極小化一個(gè)二次函數(shù),是直接搜索方法中使用效果最佳的一種方法。</p><
41、p> 對(duì)于維數(shù)n<20的目標(biāo)函數(shù)求最優(yōu)化問(wèn)題,此法可獲得滿(mǎn)意效果。</p><p> ?、瘛ⅤU威爾法基本原理、迭代格式</p><p> 原始的Powell法是沿著逐步產(chǎn)生的共軛方向進(jìn)行一維搜索的。</p><p> 現(xiàn)以二維二次目標(biāo)函數(shù)為例來(lái)說(shuō)明。</p><p> 如下圖所示,選定初始點(diǎn)X0(1),初始方向:</
42、p><p> S1(1)=e1=[1,0]T </p><p> S2(1)=e2=[0,1]T</p><p> 由圖可知點(diǎn)X0(2) 、X2(2)是先后兩次沿S(1)方向一維搜索的極小點(diǎn)。</p><p> 由共軛性質(zhì)知:連接X(jué)0(2) ,X2(2)構(gòu)成的矢量S(2) 與S(1)對(duì)H共軛。</p><p>
43、從理論上講,二維二次正定函數(shù)經(jīng)過(guò)這組共軛方向的一維搜索,迭代點(diǎn)已達(dá)到函數(shù)的極小點(diǎn)X* 。</p><p> 將此結(jié)構(gòu)推廣至n維二次正定函數(shù),即依次沿n個(gè)(S(1) ,S(2),…,S(n))共軛方向一維搜索就能達(dá)到極小點(diǎn)。</p><p><b> ?、颉ⅤU威爾法缺陷</b></p><p> 當(dāng)某一循環(huán)方向組中的矢量系出現(xiàn)線(xiàn)性相關(guān)的情況(
44、退化、病態(tài))時(shí),搜索過(guò)程在降維的空間進(jìn)行,致使計(jì)算不能收斂而失敗。</p><p> 為了避免鮑威爾法缺陷,提出了修正算法。</p><p> 和原始Powell法的主要區(qū)別在于:在構(gòu)成第k+1次循環(huán)方向組時(shí),不用淘汰前一循環(huán)中的第一個(gè)方向S1(k)的辦法,而是計(jì)算函數(shù)值并根據(jù)是否滿(mǎn)足條件計(jì)算:</p><p> f1=f(Xk(0))</p>
45、<p> f2=f(Xk(n))</p><p> f3=f(Xk(n+2))</p><p> 找出前一輪迭代法中函數(shù)值下降最多的方向m及下降量△m,即:</p><p> △m=max{[f(Xk(i))-f(Xk(i+1))](i=0,1,…,n-1)}</p><p> = f(Xk(m-1))-f(Xk(m))&
46、lt;/p><p> 可以證明:若 f3 <f1</p><p> (f1 -2f2+f3)(f1-f2- △m)2< 0.5△m(f1-f3)2</p><p><b> 同時(shí)成立</b></p><p> 表明方向Sk(n)與原方向組成線(xiàn)性無(wú)關(guān),可以用來(lái)替換對(duì)象△m所對(duì)應(yīng)的方向Sk(m)。否則仍用原方
47、向組進(jìn)行第k+1輪搜索。</p><p> 3.2鮑威爾法計(jì)算框圖</p><p><b> 3.3問(wèn)題與結(jié)果</b></p><p><b> 附錄(源程序)</b></p><p> #include "stdio.h"</p><p> #
48、include "stdlib.h"</p><p> #include "math.h"</p><p> double objf(double x[])</p><p> {double ff;</p><p> ff=x[0]*x[0]+2*x[1]*x[1]-4*x[0]-2*x[0]*
49、x[1];</p><p> return(ff);</p><p><b> }</b></p><p> void jtf(double x0[],double h0,double s[],int n,double a[],double b[])</p><p><b> {int i;</b
50、></p><p> double *x[3],h,f1,f2,f3;</p><p> for(i=0;i<3;i++)</p><p> x[i]=(double *)malloc(n*sizeof(double));</p><p><b> h=h0;</b></p><p
51、> for(i=0;i<n;i++)</p><p> *(x[0]+i)=x0[i];</p><p> f1=objf(x[0]);</p><p> for(i=0;i<n;i++)</p><p> *(x[1]+i)=*(x[0]+i)+h*s[i];</p><p> f2=o
52、bjf(x[1]);</p><p> if(f2>=f1)</p><p><b> {h=-h0;</b></p><p> for(i=0;i<n;i++)</p><p> *(x[2]+i)=*(x[0]+i);</p><p><b> f3=f1;&l
53、t;/b></p><p> for(i=0;i<n;i++)</p><p> {*(x[0]+i)=*(x[1]+i);</p><p> *(x[1]+i)=*(x[2]+i);</p><p><b> }</b></p><p><b> f1=f2;&l
54、t;/b></p><p><b> f2=f3;</b></p><p><b> }</b></p><p><b> for(;;)</b></p><p><b> {h=2*h;</b></p><p>
55、for(i=0;i<n;i++)</p><p> *(x[2]+i)=*(x[1]+i)+h*s[i];</p><p> f3=objf(x[2]);</p><p> if(f2<f3) break;</p><p><b> else</b></p><p> { f
56、or(i=0;i<n;i++)</p><p> {*(x[0]+i)=*(x[1]+i);</p><p> *(x[1]+i)=*(x[2]+i);</p><p><b> }</b></p><p><b> f1=f2;</b></p><p><
57、;b> f2=f3;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(h<0)</b></p><p> for(i=0;i<n;i++)</p><
58、p> {a[i]=*(x[2]+i);</p><p> b[i]=*(x[0]+i);</p><p><b> }</b></p><p><b> else</b></p><p> for(i=0;i<n;i++)</p><p> {a[i]
59、=*(x[0]+i);</p><p> b[i]=*(x[2]+i);</p><p><b> }</b></p><p> for(i=0;i<3;i++)</p><p> free(x[i]);</p><p><b> }</b></p>
60、;<p> double gold(double a[],double b[],double eps,int n,double xx[])</p><p><b> {int i;</b></p><p> double f1,f2,*x[2],ff,q,w;</p><p> for(i=0;i<2;i++)<
61、;/p><p> x[i]=(double *)malloc(n*sizeof(double));</p><p> for(i=0;i<n;i++)</p><p> {*(x[0]+i)=a[i]+0.618*(b[i]-a[i]);</p><p> *(x[1]+i)=a[i]+0.382*(b[i]-a[i]);</
62、p><p><b> }</b></p><p> f1=objf(x[0]);</p><p> f2=objf(x[1]);</p><p><b> do</b></p><p> {if(f1>f2)</p><p> {for(
63、i=0;i<n;i++)</p><p> {b[i]=*(x[0]+i);</p><p> *(x[0]+i)=*(x[1]+i);</p><p><b> }</b></p><p><b> f1=f2;</b></p><p> for(i=0;i
64、<n;i++)</p><p> *(x[1]+i)=a[i]+0.382*(b[i]-a[i]);</p><p> f2=objf(x[1]);</p><p><b> }</b></p><p><b> else</b></p><p> { for
65、(i=0;i<n;i++)</p><p> {a[i]=*(x[1]+i);</p><p> *(x[1]+i)=*(x[0]+i);}</p><p><b> f2=f1;</b></p><p> for(i=0;i<n;i++)</p><p> *(x[0]+i
66、)=a[i]+0.618*(b[i]-a[i]);</p><p> f1=objf(x[0]);</p><p><b> }</b></p><p><b> q=0;</b></p><p> for(i=0;i<n;i++)</p><p> q=q+
67、(b[i]-a[i])*(b[i]-a[i]);</p><p> w=sqrt(q);</p><p> }while(w>eps);</p><p> for(i=0;i<n;i++)</p><p> xx[i]=0.5*(a[i]+b[i]);</p><p> ff=objf(xx);&
68、lt;/p><p> for(i=0;i<2;i++)</p><p> free(x[i]);</p><p> return(ff);</p><p><b> }</b></p><p> double oneoptim(double x0[],double s[],double
69、 h0,double epsg,int n,double x[])</p><p> {double *a,*b,ff;</p><p> a=(double *)malloc(n*sizeof(double));</p><p> b=(double *)malloc(n*sizeof(double));</p><p> jtf(
70、x0,h0,s,n,a,b);</p><p> ff=gold(a,b,epsg,n,x);</p><p><b> free(a);</b></p><p><b> free(b);</b></p><p> return (ff);</p><p><
71、b> }</b></p><p> double powell(double p[],double h0,double eps,double epsg,int n,double x[])</p><p> {int i,j,m;</p><p> double *xx[4],*ss,*s;</p><p> dou
72、ble f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;</p><p> ss=(double *)malloc(n*(n+1)*sizeof(double));</p><p> s=(double *)malloc(n*sizeof(double));</p><p> for(i=0;i<n;i++)</p><
73、;p> {for(j=0;j<=n;j++)</p><p> *(ss+i*(n+1)+j)=0;</p><p> *(ss+i*(n+1)+i)=1;</p><p><b> }</b></p><p> for(i=0;i<4;i++)</p><p> x
74、x[i]=(double *)malloc(n*sizeof(double));</p><p> for(i=0;i<n;i++)</p><p> *(xx[0]+i)=p[i];</p><p><b> for(;;)</b></p><p> {for(i=0;i<n;i++)</p&
75、gt;<p> {*(xx[1]+i)=*(xx[0]+i);</p><p> x[i]=*(xx[1]+i);</p><p><b> }</b></p><p> f0=f1=objf(x);</p><p><b> dlt=-1;</b></p>&
76、lt;p> for(j=0;j<n;j++)</p><p> {for(i=0;i<n;i++)</p><p> {*(xx[0]+i)=x[i];</p><p> *(s+i)=*(ss+i*(n+1)+j);</p><p><b> }</b></p><p&g
77、t; f=oneoptim(xx[0],s,h0,epsg,n,x);</p><p><b> df=f0-f;</b></p><p> if(df>dlt)</p><p><b> {dlt=df;</b></p><p><b> m=j;</b>&l
78、t;/p><p><b> }</b></p><p><b> }</b></p><p><b> sdx=0;</b></p><p> for(i=0;i<n;i++)</p><p> sdx=sdx+fabs(x[i]-(*(xx
79、[1]+i)));</p><p> if(sdx<eps)</p><p> {free(ss);</p><p><b> free(s);</b></p><p> for(i=0;i<4;i++)</p><p> free(xx[i]);</p>&l
80、t;p> return(f);</p><p><b> }</b></p><p> for(i=0;i<n;i++)</p><p> *(xx[2]+i)=x[i];</p><p><b> f2=f;</b></p><p> for(i=0
81、;i<n;i++)</p><p> {*(xx[3]+i)=2*(*(xx[2]+i)-(*(xx[1]+i)));</p><p> x[i]=*(xx[3]+i);</p><p><b> }</b></p><p> fx=objf(x);</p><p><b>
82、; f3=fx;</b></p><p> q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt);</p><p> d=0.5*dlt*(f1-f3)*(f1-f3);</p><p> if((f3<f1)||(q<d))</p><p> {if(f2<=f3)</p
83、><p> for(i=0;i<n;i++)</p><p> *(xx[0]+i)=*(xx[2]+i);</p><p><b> else</b></p><p> for(i=0;i<n;i++)</p><p> *(xx[0]+i)=*(xx[3]+i);</p
84、><p><b> }</b></p><p><b> else</b></p><p> {for(i=0;i<n;i++)</p><p> {*(ss+(i+1)*(n+1))=x[i]-(*(xx[1]+i));</p><p> *(s+i)=*(ss
85、+(i+1)*(n+1));</p><p><b> }</b></p><p> f=oneoptim(xx[0],s,h0,epsg,n,x);</p><p> for(i=0;i<n;i++)</p><p> *(xx[0]+i)=x[i];</p><p> for(
86、j=m+1;j<=n;j++)</p><p> for(i=0;i<n;i++)</p><p> *(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j);</p><p><b> }</b></p><p><b> }</b></p><p
87、> void main()</p><p> {double p[]={1,2};</p><p> double ff,x[2];</p><p> ff=powell(p,0.3,0.001,0.0001,2,x);</p><p> printf("x[0]=%f,x[1]=%f,ff=%f\n",x
88、[0],x[1],ff);</p><p> getchar();</p><p><b> }</b></p><p><b> 運(yùn)行結(jié)果:</b></p><p><b> 參考文獻(xiàn)</b></p><p> 1.《現(xiàn)代機(jī)械設(shè)計(jì)方法》 化
89、學(xué)工業(yè)出版社 倪洪啟、谷耀新主編</p><p> 2.《材料力學(xué)》 高等教育出版社 劉鴻文主編</p><p> 3.《有限元分析理論與工程應(yīng)用》 電子工業(yè)出版社 張朝暉、李樹(shù)奎主編</p><p> 4.《C語(yǔ)言程序設(shè)計(jì)》 清華大學(xué)出版社 譚浩強(qiáng)主編</p><p> 5.《ANSYS>工程應(yīng)用實(shí)例解析》
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代設(shè)計(jì)方法課程設(shè)計(jì)
- 《現(xiàn)代信號(hào)處理》課程設(shè)計(jì)
- 現(xiàn)代通信原理課程設(shè)計(jì)
- 現(xiàn)代交換課程設(shè)計(jì)
- 現(xiàn)代控制技術(shù)及plc控制課程設(shè)計(jì)
- 頻域法的課程設(shè)計(jì)
- 課程設(shè)計(jì)----現(xiàn)代橡膠配方優(yōu)化設(shè)計(jì)
- 債市啟明系列鮑威爾證詞釋放了那些信號(hào)
- 常數(shù)變易法及應(yīng)用課程設(shè)計(jì)
- 11081.論奧托鮑威爾的國(guó)家觀
- 現(xiàn)代控制理論課程設(shè)計(jì)
- 鮑威爾紐約經(jīng)濟(jì)俱樂(lè)部午餐會(huì)講話(huà)點(diǎn)評(píng)實(shí)錘了鮑威爾“鴿”派發(fā)言,加息進(jìn)程或降緩
- 滅菌方法的設(shè)計(jì)課程設(shè)計(jì)
- 現(xiàn)代通信網(wǎng)課程設(shè)計(jì)
- 采礦方法課程設(shè)計(jì)
- 煤礦開(kāi)采方法課程設(shè)計(jì)
- 采礦方法課程設(shè)計(jì)
- 采礦方法課程設(shè)計(jì)
- 采礦方法課程設(shè)計(jì)
- 現(xiàn)代通信電路課程設(shè)計(jì)--am傳輸系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論