ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:105.86KB ,
资源ID:11377007      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11377007.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(机械优化设计鲍威尔法编程.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

机械优化设计鲍威尔法编程.docx

1、机械优化设计鲍威尔法编程鲍威尔法求解二维函数极小值的程序说明一 题目利用鲍威尔法求函数的极小值点。二 鲍威尔法基本思想:1) 给定初始点,选取初始方向组,它由n各线性无关的向量所组成。2) 从出发,顺次沿作一维搜索得。接着以为起点,沿方向移动一个的距离,得到分别称为一轮迭代的始点,终点和反射点。始点,终点,反射点所对应的函数值分别表示为同时计算各中间点处的函数值,并记为因此有计算n个函数值之差,记作其中最大者记作3) 根据是否满足判别条件和来确定是否要对原方向组进行替换。若不满足判别条件,则下轮迭代应对原方向组进行替换,将补充到原方向组的最后位置,而除掉。即新方向组为,作为下轮迭代的搜索方向。

2、下轮迭代的始点取方向进行一维搜索得极小点。4) 判断是否满足收敛准则。若满足则取为极小点,否则应置,返回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 A

3、boutclass CAboutDlg : public CDialogpublic: CAboutDlg();/ Dialog Data /AFX_DATA(CAboutDlg) enum IDD = IDD_ABOUTBOX ; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implem

4、entationprotected: /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(CAboutDl

5、g, CDialog) /AFX_MSG_MAP(CAboutDlg) / No message handlers /AFX_MSG_MAPEND_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 requir

6、e a subsequent DestroyIcon 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);

7、/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMyDlg, 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 sy

8、stem command range. ASSERT(IDM_ABOUTBOX & 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 SetIc

9、on(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here return 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()

10、; else CDialog:OnSysCommand(nID, lParam); / If you 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); /

11、device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Heig

12、ht() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog: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 her

13、e /CDialog:OnOK(); UpdateData(true); int i,n; double h1,h2,h3,m,flag,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; do F0=(X0000*X0000+2*

14、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; /确定F的函数值 h2=(4*d0200+2*d0200*X0110+2*d0210*X0100)/(2

15、*d0200*d0200+ /确定搜索步长 4*d0210*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;/确定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*X021

16、0-X0010; F3=(X0300*X0300+2*X0310*X0310-4*X0300-2*X0300*X0310),f3=F3; /确定F3的函数值 while (F3=F0 & (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=(X

17、0300*X0300+2*X0310*X0310-4*X0300-2*X0300*X0310),f3=F3;/确定函数值 else X0000=X0300,X0010=X0310; F0=(X0000*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*X

18、0110*X0110-4*X0100-2*X0100*X0110),f1=F1; h2=(4*d0200+2*d0200*X0110+2*d0210*X0100)/(2*d0200*d0200+ 4*d0210*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-

19、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; if(m=1) d0100=d0300,d0110=d0310; else if(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插件,创建对话框,将运算结果很形象的表现出来。经验证,运算结果完全正确。验证了该程序的可行性。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1