日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优化设计鲍威尔法c语言,机械优化设计鲍威尔法编程

發布時間:2024/8/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优化设计鲍威尔法c语言,机械优化设计鲍威尔法编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《機械優化設計鮑威爾法編程》由會員分享,可在線閱讀,更多相關《機械優化設計鮑威爾法編程(13頁珍藏版)》請在人人文庫網上搜索。

1、鮑威爾法求解二維函數極小值的程序說明題目224x1 2x1x2 的極小值點。利用鮑威爾法求函數 f (x1,x2) x12 2x22鮑威爾法基本思想 :1)給定初始點 x0 ,選取初始方向組,它由n 各線性無關的向量0 0 0di ,d2.dn所組成。2)k接著以 xn 為起點,沿方向dnkk kiXnX0移動一個 xnkkx0k 的距離,得到kc kXn i 2Xnkx0k k k k k k k從xo出發,順次沿di ,d2 ,.dn作一維搜索得Xi,X2,.Xn 。kkk終點,反射點所對應x0k , xnk , xnk 1分別稱為一輪迭代的始點,終點和反射點。始點,的函數值分別表示為k 。

2、k kF0f (xk),F2f (xnk), F3f(xnk 1)同時計算各中間點處的函數值,并記為i f ( xik )( i 0,1,2,.n)因此有 F0 f0,F2計算 n 個函數值之差,記作其中最大者記作m maX3)根據是否滿足判別條件F3 F02F3)2(F0 2F2 F3)(F0 F2 m )2 0.5 m(F0來確定是否要對原方向組進行替換。 若不滿足判別條件, 則下輪迭代應對原方向組進行替換,將dn1補充到原方向組的最后位置,而除掉dm。即新方向組為dk dk . dm1 dm1 . d n d n i作為下輪迭代的搜索方向。下輪迭代的始點取d n 1方向進行一維搜索得極小。

3、點k 1Xo k i、.4)判斷是否滿足收斂準則。若滿足則取Xo為極小點,否則應置 k k 1 ,返回2,繼續進行下一輪迭代。三 用鮑威爾法求函數程序如下:/ 鮑威爾法 Dlg.cpp : implementation file/#include stdafx.h#include 鮑威爾法 .h#include 鮑威爾法 Dlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = __FILE__;#endif/ CAboutDlg dialog used for App Aboutclass C。

4、AboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data /AFX_DATA(CAboutDlg) enum IDD = IDD_ABOUTBOX ; /AFX_DATA/ ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected:/ DDX/DDV supportvirtual void DoDataExchange(CDataExchange* pDX); /AFX_VIRTUAL/ Implementation protec。

5、ted:/AFX_MSG(CAboutDlg)/AFX_MSG DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg) /AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CAboutDlg) /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog) /AFX_M。

6、SG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAP END_MESSAGE_MAP()/ CMyDlg dialogCMyDlg:CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg:IDD, pParent)/AFX_DATA_INIT(CMyDlg)m_x01 = 0.0f;m_x02 = 0.0f;m_x1 = 0.0f;m_x2 = 0.0f;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon 。

7、in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CMyDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CMyDlg) DDX_Text(pDX, IDC_x01, m_x01);DDX_Text(pDX, IDC_x02, m_x02);DDX_Text(pDX, IDC_x1, m_x1);DDX_Text(pDX, IDC_x2, m_x2);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(C。

8、MyDlg, CDialog)/AFX_MSG_MAP(CMyDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT()ON_WM_QUERYDRAGICON() /AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg message handlersBOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTB。

9、OX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialog SetIcon(m_hIcon, TRUE);/ Set big iconSetIcon。

10、(m_hIcon, FALSE); / Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CMyDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout; dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If y。

11、ou add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CMyDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERAS。

12、EBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_。

13、hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMyDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMyDlg:OnOK()/ TODO: Add extra validation here/CDialog:OnOK();UpdateData(true);int i,n;double h1,h2,h3,m,flag,。

14、X0021,d0121,d0221,d0321; / 確定鍵的執行程序 double X0121,X0221,X0321;double F0,F1,F2,F3,e1,e2,em;double X21;double f0,f1,f2,f3;X0000=m_x01; / 對初始 搜索點進行賦值X0010=m_x02;d0100=1,d0110=0; / 初始索索方 向的確定d0200=0,d0210=1;i=1;doF0=(X0000*X0000+2*X0010*X0010-4*X0000-2*X0000*X0010),f0=F0;/ 初始點函數值h1=(4*d0100+2*d0100*X0010。

15、+2*d0110*X0000)/(2*d0100*d0100+ / 確定搜索方向4*d0110*d0110-4*d0110*d0100);X0100=X0000+h1*d0100,X0110=X0010+h1*d0110;F1=(X0100*X0100+2*X0110*X0110-4*X0100-2*X0100*X0110),f1=F1; / 確定 F 的函數值h2=(4*d0200+2*d0200*X0110+2*d0210*X0100)/(2*d0200*d0200+/ 確定搜索步長4*d0210*d0210-4*d0210*d0200);X0200=X0100+h2*d0200 ;X02。

16、10=X0110+h2*d0210;F2=(X0200*X0200+2*X0210*X0210-4*X0200-2*X0200*X0210),f2=F2;/確定F2的函數值e1=f0-f1;/ 進行判定e2=f1-f2;if(e1e2) em=e1,m=1;else em=e2,m=2;/d0300=X0200-X0000;d0310=X0210-X0010;X0300=2*X0200-X0000;X0310=2*X0210-X0010;F3=(X0300*X0300+2*X0310*X0310-4*X0300-2*X0300*X0310),f3=F3;/確定F3的函數值while (F3=F。

17、0 & (F0-2*F2+F3)*(F0-F2-em)*(F0-F2-em)=0.5*(F0-F3)*(F0-F3) / 不滿足判別條件i+;if (F2e2) em=e1,m=1;/ 進行判斷else em=e2,m=2;d0300=X0200-X0000;/ 確定新的搜索方向d0310=X0210-X0010;X0300=2*X0200-X0000;X0310=2*X0210-X0010;F3=(X0300*X0300+2*X0310*X0310-4*X0300-2*X0300*X0310),f3=F3; / 確定函數值elseX0000=X0300,X0010=X0310;F0=(X00。

18、00*X0000+2*X0010*X0010-4*X0000-2*X0000*X0010),f0=F0;h1=(4*d0100+2*d0100*X0010+2*d0110*X0000)/(2*d0100*d0100+4*d0110*d0110-4*d0110*d0100);X0100=X0000+h1*d0100,X0110=X0010+h1*d0110;F1=(X0100*X0100+2*X0110*X0110-4*X0100-2*X0100*X0110),f1=F1;h2=(4*d0200+2*d0200*X0110+2*d0210*X0100)/(2*d0200*d0200+4*d021。

19、0*d0210-4*d0210*d0200);X0200=X0100+h2*d0200 ;X0210=X0110+h2*d0210;F2=(X0200*X0200+2*X0210*X0210-4*X0200-2*X0200*X0210),f2=F2; e1=f0-f1;e2=f1-f2;if(e1e2) em=e1,m=1;else em=e2,m=2;d0300=X0200-X0000;d0310=X0210-X0010;X0300=2*X0200-X0000;X0310=2*X0210-X0010;F3=(X0300*X0300+2*X0310*X0310-4*X0300-2*X0300*。

20、X0310),f3=F3;if(m=1) d0100=d0300,d0110=d0310;elseif(m=2) d0200=d0300,d0210=d0310;h3=(4*d0300+2*d0300*X0210+2*d0310*X0200)/(2*d0300*d0300+4*d0310*d0310-4*d0310*d0300);X0000=X0200+h3*d0300;X0010=X0210+h3*d0310;if(i=2) break; while (abs(X0200-X0000)0.001&abs(X0210-X0010)0.001);/ 輸出極小值點X00=X0000,X10=X0010;m_x1=X00;m_x2=X10;UpdateData(false);程序運行結果:四結論由該程序的運行結果可知,要求函數的極小值的在(10,5)處。該程序利用 VC+6.0下的MFC插件,創建對話框,將運算結果很形象的表現出來。經驗證, 運算結果完全正確。驗證了該程序的可行性。

總結

以上是生活随笔為你收集整理的优化设计鲍威尔法c语言,机械优化设计鲍威尔法编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。