分段线性插值法_第1页
分段线性插值法_第2页
分段线性插值法_第3页
分段线性插值法_第4页
分段线性插值法_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

. 数值分析实验报告实验序号:实验五 实验名称: 分段线性插值法 1、 实验目的:随着插值节点的增加,插值多项式的插值多项式的次数也增加,而对于高次的插值容易带来剧烈的震荡,带来数值的不稳定(Runge现象)。为了既要增加插值的节点,减小插值的区间,以便更好的逼近插值函数,又要不增加插值多项式的次数以减少误差,可采用分段线性插值。2、 实验内容:求一个函数(x)用来近似函数f(x),用分段线性插值的方法来求解近似函数(x)并画出近似函数图像及原函数图像。设在区间a,b上,给定n+1个插值节点和相应的函数值,求一个插值函数,满足以下条件:(1) ; (2) 在每一个小区间上是线性函数。对于给定函数。在区间上画出f(x)和分段线性插值函数的函数图像。1. 分段线性插值的算法思想:分段线性插值需要在每个插值节点上构造分段线性插值基函数,然后再作它们的线性组合。分段线性插值基函数的特点是在对应的插值节点上函数值取 1,其它节点上函数值取0。插值基函数如下: 设在节点ax0x1LoadIcon(IDR_MAINFRAME);void CLDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CLDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_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_MAPEND_MESSAGE_MAP()/ CLDlg message handlersBOOL CLDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system 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 dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CLDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog: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 CLDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (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_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CLDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CLDlg:OnOK() int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC-SetMapMode(MM_LOMETRIC);pDC-SetViewportOrg(x00,y00); /画坐标轴与原函数for(i=-700; iSetPixel(i,0,RGB(0,0,0);pDC-SetPixel(0,i,RGB(0,0,0);for(x=-1; xSetPixel(x*500,j,RGB(255,0,0);pDC-TextOut(-30,-10,0); pDC-TextOut(-30,430,1); pDC-TextOut(490,-10,1); pDC-TextOut(-490,-10,-1); pDC-MoveTo(-10,680); /x箭头pDC-LineTo(0,700);pDC-MoveTo(0,700);pDC-LineTo(10,680); pDC-MoveTo(680,10); /y箭头pDC-LineTo(700,0);pDC-MoveTo(700,0);pDC-LineTo(680,-10);pDC-TextOut(-30,700,y);pDC-TextOut(700,-10,x);void CLDlg:OnLargri() int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC-SetMapMode(MM_LOMETRIC);pDC-SetViewportOrg(x00,y00);/画坐标轴for(i=-700; iSetPixel(i,0,RGB(0,0,0);pDC-SetPixel(0,i,RGB(0,0,0);double yx=-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1;pDC-TextOut(-30,-10,0); pDC-TextOut(-30,430,1); pDC-TextOut(490,-10,1); pDC-TextOut(-490,-10,-1); pDC-MoveTo(-10,680); /x箭头pDC-LineTo(0,700);pDC-MoveTo(0,700);pDC-LineTo(10,680); pDC-MoveTo(680,10); /y箭头pDC-LineTo(700,0);pDC-MoveTo(700,0);pDC-LineTo(680,-10);pDC-TextOut(-30,700,y);pDC-TextOut(700,-10,x);/ 拉格朗日差值的函数double yy12,lx12,ly12;double l_fenzi12,l_fenmu12; double l_x,l_y;for(i=0; i=10; i+)yyi=1.0/(1+25*yxi*yxi);for(i=0; i=10; i+)l_fenmui=1.0;for(j=0; j=10; j+)if(i!=j)l_fenmui=l_fenmui*(yxi-yxj); double qq,pp;for(qq=-1; qq=1; qq+=0.0003)for(i=0; i=10; i+)l_fenzii=1.0; for(j=0; j=10; j+)if(i!=j) l_fenzii=l_fenzii*(qq-yxj);pp=0;for(i=0; iSetPixel(qq*500,pp*390+5,RGB(132,112,225);void CLDlg:OnButton2() int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC-SetMapMode(MM_LOMETRIC);pDC-SetViewportOrg(x00,y00); /画坐标轴与原函数for(i=-700; iSetPixel(i,0,RGB(0,0,0);pDC-SetPixel(0,i,RGB(0,0,0);double yx=-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1;double yy14;for(i=0; iTextOut(-30,-10,0); pDC-TextOut(-30,430,1); pDC-TextOut(490,-10,1); pDC-TextOut(-490,-10,-1); pDC-MoveTo(-10,680); /x箭头pDC-LineTo(0,700);pDC-MoveTo(0,700);pDC-LineTo(10,680); pDC-MoveTo(680,10); /y箭头pDC-LineTo(700,0);pDC-MoveTo(700,0);pDC-LineTo(680,-10);pDC-TextOut(-30,700,y);pDC-TextOut(700,-10,x);/ 线性分段差值的图像CPen pen;CPen*oldpen;pen.CreatePen(PS_SOLID,5,RGB(0,0,0);oldpen=pDC-SelectObject(&pen);for(i=0; iMoveTo(yxi*480,yyi*400); pDC-LineTo(yxi+1*480,yyi+1*400); void CLDlg:OnHermite() int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC-SetMapMode(MM_LOMETRIC);pDC-SetViewportOrg(x00,y00);/画坐标轴与原函数for(i=-700; iSetPixel(i,0,RGB(0,0,0);pDC-SetPixel(0,i,RGB(0,0,0);double yx=-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1;double yy12;for(i=0; iTextOut(-30,-10,0); pDC-TextOut(-30,430,1); pDC-TextOut(490,-10,1); pDC-TextOut(-490,-10,-1); pDC-MoveTo(-10,680); /x箭头pDC-LineTo(0,700);pDC-MoveTo(0,700);pDC-LineTo(10,680); pDC-MoveTo(680,10); /y箭头pDC-LineTo(700,0);pDC-MoveTo(700,0);pDC-LineTo(680,-10);pDC-TextOut(-30,700,y);pDC-TextOut(700,-10,x);/分段三次Hermite差值的函数double x0,x1,yd1,yd0,y1,y0;for(i=0; i10; i+)x0=yxi,x1=yxi+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(double qq=x0; qqSetP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论