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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

分段线性插值法.docx

1、分段线性插值法 数值分析实验报告实验序号:实验五 实验名称: 分段线性插值法 1、实验目的:随着插值节点的增加,插值多项式的插值多项式的次数也增加,而对于高次的插值容易带来剧烈的震荡,带来数值的不稳定(Runge现象)。为了既要增加插值的节点,减小插值的区间,以便更好的逼近插值函数,又要不增加插值多项式的次数以减少误差,可采用分段线性插值。2、 实验内容:求一个函数(x)用来近似函数f(x),用分段线性插值的方法来求解近似函数(x)并画出近似函数图像及原函数图像。设在区间a,b上,给定n+1个插值节点和相应的函数值,求一个插值函数,满足以下条件:(1); (2)在每一个小区间上是线性函数。对于

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 an

3、d 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 hand

4、lersBOOL 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); /

5、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 icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here return TRUE; / return TRUE unless you set the focus to a cont

6、rolvoid CLDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); 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

7、/view model,/ this is automatically done for you by the framework.void CLDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon =

8、 GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - 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 min

9、imized 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*50

10、0,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,

11、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-TextOu

12、t(-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,

13、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;

14、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(

15、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-

16、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

17、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,

18、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,

19、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; qqSetPixel(qq*500,pp*400,RGB(225,185,15); 4.实验截图 5. 实验结果分析:分析: 分段线性插值的方法克服了Lagrange插值法当节点不断加密时,构造的插值多项式的次数不断升高,高次多项式虽然是连续的,但是不一定都收敛到相应的被插函数而产生Runge现象。分段线性插值因为在每一段小区间上都是线性插值而极大地降低了插值多项式的次数,从几何图形上可以看出,当节点取得较多时插值函数的逼近效果还是很好的,但是所求函数是一条以型值点为顶点的折线,这也表现出了它的缺点就是所求得的插值函数的光滑性较差,这就要求一种更好的方法来克服这一缺点了。

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

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