机械优化设计鲍威尔法编程Word文件下载.docx

上传人:b****2 文档编号:182672 上传时间:2023-04-28 格式:DOCX 页数:16 大小:105.61KB
下载 相关 举报
机械优化设计鲍威尔法编程Word文件下载.docx_第1页
第1页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第2页
第2页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第3页
第3页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第4页
第4页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第5页
第5页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第6页
第6页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第7页
第7页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第8页
第8页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第9页
第9页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第10页
第10页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第11页
第11页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第12页
第12页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第13页
第13页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第14页
第14页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第15页
第15页 / 共16页
机械优化设计鲍威尔法编程Word文件下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

机械优化设计鲍威尔法编程Word文件下载.docx

《机械优化设计鲍威尔法编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《机械优化设计鲍威尔法编程Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。

机械优化设计鲍威尔法编程Word文件下载.docx

,…,

作为下轮迭代的搜索方向。

下轮迭代的始点取

方向进行一维搜索得极小点

4)判断是否满足收敛准则。

若满足则取

为极小点,否则应置

,返回2,继续进行下一轮迭代。

改进后的鲍威尔法程序框图如下:

三用鲍威尔法求函数

程序如下:

//鲍威尔法Dlg.cpp:

implementationfile

//

#include"

stdafx.h"

鲍威尔法.h"

鲍威尔法Dlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

IDD)

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

voidCAboutDlg:

DoDataExchange(CDataExchange*pDX)

CDialog:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

//CMyDlgdialog

CMyDlg:

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;

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->

LoadIcon(IDR_MAINFRAME);

voidCMyDlg:

//{{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);

BEGIN_MESSAGE_MAP(CMyDlg,CDialog)

//{{AFX_MSG_MAP(CMyDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//CMyDlgmessagehandlers

BOOLCMyDlg:

OnInitDialog()

OnInitDialog();

//Add"

About..."

menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&

0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<

0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->

AppendMenu(MF_SEPARATOR);

AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'

smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);

//Setbigicon

SetIcon(m_hIcon,FALSE);

//Setsmallicon

//TODO:

Addextrainitializationhere

returnTRUE;

//returnTRUEunlessyousetthefocustoacontrol

OnSysCommand(UINTnID,LPARAMlParam)

if((nID&

0xFFF0)==IDM_ABOUTBOX)

CAboutDlgdlgAbout;

dlgAbout.DoModal();

else

CDialog:

OnSysCommand(nID,lParam);

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

OnPaint()

if(IsIconic())

CPaintDCdc(this);

//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&

rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

OnPaint();

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCMyDlg:

OnQueryDragIcon()

return(HCURSOR)m_hIcon;

OnOK()

Addextravalidationhere

//CDialog:

OnOK();

UpdateData(true);

 

inti,n;

doubleh1,h2,h3,m,flag,X00[2][1],d01[2][1],d02[2][1],d03[2][1];

//确定键的执行程序

doubleX01[2][1],X02[2][1],X03[2][1];

doubleF0,F1,F2,F3,e1,e2,em;

doubleX[2][1];

doublef0,f1,f2,f3;

X00[0][0]=m_x01;

//对初始搜索点进行赋值

X00[1][0]=m_x02;

d01[0][0]=1,d01[1][0]=0;

//初始索索方向的确定

d02[0][0]=0,d02[1][0]=1;

i=1;

do

F0=(X00[0][0]*X00[0][0]+2*X00[1][0]*X00[1][0]-4*X00[0][0]-2*X00[0][0]*X00[1][0]),f0=F0;

//初始点函数值

h1=(4*d01[0][0]+2*d01[0][0]*X00[1][0]+2*d01[1][0]*X00[0][0])/(2*d01[0][0]*d01[0][0]+//确定搜索方向

4*d01[1][0]*d01[1][0]-4*d01[1][0]*d01[0][0]);

X01[0][0]=X00[0][0]+h1*d01[0][0],X01[1][0]=X00[1][0]+h1*d01[1][0];

F1=(X01[0][0]*X01[0][0]+2*X01[1][0]*X01[1][0]-4*X01[0][0]-2*X01[0][0]*X01[1][0]),f1=F1;

//确定F的函数值

h2=(4*d02[0][0]+2*d02[0][0]*X01[1][0]+2*d02[1][0]*X01[0][0])/(2*d02[0][0]*d02[0][0]+//确定搜索步长

4*d02[1][0]*d02[1][0]-4*d02[1][0]*d02[0][0]);

X02[0][0]=X01[0][0]+h2*d02[0][0];

X02[1][0]=X01[1][0]+h2*d02[1][0];

F2=(X02[0][0]*X02[0][0]+2*X02[1][0]*X02[1][0]-4*X02[0][0]-2*X02[0][0]*X02[1][0]),f2=F2;

//确定F2的函数值

e1=f0-f1;

//进行判定

e2=f1-f2;

if(e1>

e2)em=e1,m=1;

elseem=e2,m=2;

//////////////////////////////////////////////////////////////////////////////

d03[0][0]=X02[0][0]-X00[0][0];

d03[1][0]=X02[1][0]-X00[1][0];

X03[0][0]=2*X02[0][0]-X00[0][0];

X03[1][0]=2*X02[1][0]-X00[1][0];

F3=(X03[0][0]*X03[0][0]+2*X03[1][0]*X03[1][0]-4*X03[0][0]-2*X03[0][0]*X03[1][0]),f3=F3;

//确定F3的函数值

while(F3>

=F0&

&

(F0-2*F2+F3)*(F0-F2-em)*(F0-F2-em)>

=0.5*(F0-F3)*(F0-F3))//不满足判别条件

i++;

if(F2<

F3)

{

X00[0][0]=X02[0][0],X00[1][0]=X02[1][0];

//以函数最小者作为下轮迭代的始点

F0=(X00[0][0]*X00[0][0]+2*X00[1][0]*X00[1][0]-4*X00[0][0]-2*X00[0][0]*X00[1][0]),f0=F0;

//进行第二轮搜索

h1=(4*d01[0][0]+2*d01[0][0]*X00[1][0]+2*d01[1][0]*X00[0][0])/(2*d01[0][0]*d01[0][0]+//确定步长

X01[0][0]=X00[0][0]+h1*d01[0][0],X01[1][0]=X00[1][0]+h1*d01[1][0];

F1=(X01[0][0]*X01[0][0]+2*X01[1][0]*X01[1][0]-4*X01[0][0]-2*X01[0][0]*X01[1][0]),f1=F1;

//确定函数值

h2=(4*d02[0][0]+2*d02[0][0]*X01[1][0]+2*d02[1][0]*X01[0][0])/(2*d02[0][0]*d02[0][0]+

//确定步长

X02[0][0]=X01[0][0]+h2*d02[0][0];

F2=(X02[0][0]*X02[0][0]+2*X02[1][0]*X02[1][0]-4*X02[0][0]-2*X02[0][0]*X02[1][0]),f2=F2;

e1=f0-f1;

e2=f1-f2;

if(e1>

//进行判断

elseem=e2,m=2;

d03[0][0]=X02[0][0]-X00[0][0];

//确定新的搜索方向

d03[1][0]=X02[1][0]-X00[1][0];

X03[0][0]=2*X02[0][0]-X00[0][0];

X03[1][0]=2*X02[1][0]-X00[1][0];

F3=(X03[0][0]*X03[0][0]+2*X03[1][0]*X03[1][0]-4*X03[0][0]-2*X03[0][0]*X03[1][0]),f3=F3;

}

else

X00[0][0]=X03[0][0],X00[1][0]=X03[1][0];

h1=(4*d01[0][0]+2*d01[0][0]*X00[1][0]+2*d01[1][0]*X00[0][0])/(2*d01[0][0]*d01[0][0]+

if(m=1)d01[0][0]=d03[0][0],d01[1][0]=d03[1][0];

if(m=2)

d02[0][0]=d03[0][0],d02[1][0]=d03[1][0];

h3=(4*d03[0][0]+2*d03[0][0]*X02[1][0]+2*d03[1][0]*X02[0][0])/(2*d03[0][0]*d03[0][0]+

4*d03[1][0]*d03[1][0]-4*d03[1][0]*d03[0][0]);

X00[0][0]=X02[0][0]+h3*d03[0][0];

X00[1][0]=X02[1][0]+h3*d03[1][0];

if(i=2)break;

}while(abs(X02[0][0]-X00[0][0])>

0.001&

abs(X02[1][0]-X00[1][0])>

0.001);

//输出极小值点

X[0][0]=X00[0][0],X[1][0]=X00[1][0];

m_x1=X[0][0];

m_x2=X[1][0];

UpdateData(false);

程序运行结果:

四结论

由该程序的运行结果可知,要求函数的极小值的在(10,5)处。

该程序利用VC++6.0下的MFC插件,创建对话框,将运算结果很形象的表现出来。

经验证,运算结果完全正确。

验证了该程序的可行性。

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

当前位置:首页 > 总结汇报 > 学习总结

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

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