数值分析实验插值函数文档格式.docx
《数值分析实验插值函数文档格式.docx》由会员分享,可在线阅读,更多相关《数值分析实验插值函数文档格式.docx(10页珍藏版)》请在冰点文库上搜索。
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementationprotected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSGDECLARE_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_MAPEND_MESSAGE_MAP()
//CLDlgdialog
CLDlg:
CLDlg(CWnd*pParent/*=NULL*/)
CDialog(CLDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CLDlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
voidCLDlg:
//{{AFX_DATA_MAP(CLDlg)
theClassWizardwilladdDDXandDDVcallshere
BEGIN_MESSAGE_MAP(CLDlg,CDialog)
//{{AFX_MSG_MAP(CLDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_LARGRI,OnLargri)
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)ON_BN_CLICKED(IDC_HERMITE,OnHermite)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CLDlgmessagehandlers
BOOLCLDlg:
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'
smainwindowisnotadialogSetIcon(m_hIcon,TRUE);
//SetbigiconSetIcon(m_hIcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;
//returnTRUE unlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
// todrawtheicon. ForMFCapplicationsusingthedocument/viewmodel,
// thisisautomaticallydoneforyoubytheframework.
OnPaint()
if(IsIconic())
CPaintDCdc(this);
//devicecontextforpaintingSendMessage(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;
//Drawtheicondc.DrawIcon(x,y,m_hIcon);
OnPaint();
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
// theminimizedwindow.
HCURSORCLDlg:
OnQueryDragIcon()
return(HCURSOR)m_hIcon;
OnOK()
intx00=300,y00=350,i,j;
doublex;
CDC*pDC=GetDC();
pDC->
SetMapMode(MM_LOMETRIC);
pDC->
SetViewportOrg(x00,y00);
//画坐标轴与原函数
for(i=-700;
i<
=700;
i++)
SetPixel(i,0,RGB(0,0,0));
SetPixel(0,i,RGB(0,0,0));
for(x=-1;
x<
=1;
x+=0.001)
doublej=400.0/(1+25*x*x);
SetPixel(x*500,j,RGB(360,0,0));
TextOut(-30,-10,"
0"
);
TextOut(-30,430,"
1"
TextOut(490,-10,"
TextOut(-490,-10,"
-1"
MoveTo(-10,680);
//x箭头
LineTo(0,700);
MoveTo(0,700);
LineTo(10,680);
MoveTo(680,10);
//y箭头
LineTo(700,0);
MoveTo(700,0);
LineTo(680,-10);
TextOut(-30,700,"
y"
TextOut(700,-10,"
x"
OnLargri()
//画坐标轴
doubleyx[]={-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1};
//拉格朗日差值的函数
doubleyy[12],lx[12],ly[12];
doublel_fenzi[12],l_fenmu[12];
doublel_x,l_y;
for(i=0;
=10;
yy[i]=1.0/(1+25*yx[i]*yx[i]);
l_fenmu[i]=1.0;
for(j=0;
j<
j++)
if(i!
=j)
l_fenmu[i]=l_fenmu[i]*(yx[i]-yx[j]);
doubleqq,pp;
for(qq=-1;
qq<
qq+=0.0003)
l_fenzi[i]=1.0;
l_fenzi[i]=l_fenzi[i]*(qq-yx[j]);
pp=0;
=11;
pp=pp+1.0/(1+25*yx[i]*yx[i])*l_fenzi[i]/l_fenmu[i];
SetPixel(qq*500,pp*390+5,RGB(132,112,225));
OnButton2()
doubleyy[14];
for(i=0;
// 线性分段差值的图像
CPenpen;
CPen*oldpen;
pen.CreatePen(PS_SOLID,5,RGB(0,0,0));
oldpen=pDC->
SelectObject(&
pen);
10;
MoveTo(yx[i]*480,yy[i]*400);
LineTo(yx[i+1]*480,yy[i+1]*400);
OnHermite()
doubleyy[12];
//分段三次Hermite差值的函数
doublex0,x1,yd1,yd0,y1,y0;
x0=yx[i],x1=yx[i+1];
y0=1.0/(1+25*x0*x0);
y1=1.0/(1+25*x1*x1);
yd0=-(50*x0)*1.0/((1+25*x0*x0)*(1+25*x0*x0));
yd1=-(50*x1)*1.0/((1+25*x1*x1)*(1+25*x1*x1));
for(doubleqq=x0;
x1;
qq+=0.005)
doublepp=y0*(1+2*(qq-x0)/(x1-x0))*(qq-x1)/(x0-x1)*(qq-x1)/(x0-x1)
+y1*(1+2*(qq-x1)/(x0-x1))*(qq-x0)/(x1-x0)*(qq-x0)/(x1-x0)
+yd0*(qq-x0)*(qq-x1)/(x0-x1)*(qq-x1)/(x0-x1)
+yd1*(qq-x1)*(qq-x0)/(x1-x0)*(qq-x0)/(x1-x0);
SetPixel(qq*500,pp*400,RGB(225,185,15));