首页 分段线性插值.doc

分段线性插值.doc

举报
开通vip

分段线性插值&#46;doc分段线性插值.doc 1、 实验目的: 设在区间[a,b]上,给定n+1个插值节点a=X0=-1&&x1=ax[i-1]&&x1ax[i]&&x1ax[19]&&x1<=ax[20]) { n=ay[20]*((x1-ax[19])-(ax[20]-ax[19]));//计算 并和相应的函数值组合 m=n+m; } } } } } } 3、 实验结果截图: 在[-1,1]区间上选取了21个等分节点的分段线性插值函数的图像如下: 2 / 14 4、 程序代码 // SHIYAN...

分段线性插值&#46;doc
分段线性插值.doc 1、 实验目的: 设在区间[a,b]上,给定n+1个插值节点a=X0=-1&&x1<=-0.9) { n=ay[0]*((x1-ax[1])/(ax[0]-ax[1])); //计算 并和相应的函数值组合 m=n+m; } else 1 / 14 { if(x1>=ax[i-1]&&x1<=ax[i]) //计算 并和相应的函数值组合 { n=ay[i]*((x1-ax[i-1])/(ax[i]-ax[i-1])); m=n+m; } else { if(x1>ax[i]&&x1<=ax[i+1]) { n=ay[i]*((x1-ax[i+1])/(ax[i]-ax[i+1])); m=m+n; } else { if(i==19&&x1>ax[19]&&x1<=ax[20]) { n=ay[20]*((x1-ax[19])-(ax[20]-ax[19]));//计算 并和相应的函数值组合 m=n+m; } } } } } } 3、 实验结果截图: 在[-1,1]区间上选取了21个等分节点的分段线性插值函数的图像如下: 2 / 14 4、 程序代码 // SHIYAN456View.cpp : implementation of the CSHIYAN456View class // #include "stdafx.h" #include "SHIYAN456.h" #include "SHIYAN456Doc.h" #include "SHIYAN456View.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSHIYAN456View 3 / 14 IMPLEMENT_DYNCREATE(CSHIYAN456View, CView) BEGIN_MESSAGE_MAP(CSHIYAN456View, CView) //{{AFX_MSG_MAP(CSHIYAN456View) ON_COMMAND(ID_FFunction, OnFFunction) ON_COMMAND(ID_Lagrange, OnLagrange) ON_COMMAND(ID_Subsection, OnSubsection) ON_COMMAND(ID_Hermite, OnHermite) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSHIYAN456View construction/destruction CSHIYAN456View::CSHIYAN456View() { // TODO: add construction code here } CSHIYAN456View::~CSHIYAN456View() { } BOOL CSHIYAN456View::PreCreateWindow(CREATESTRUCT& cs) 4 / 14 { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CSHIYAN456View drawing void CSHIYAN456View::OnDraw(CDC* pDC) { CSHIYAN456Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here AfxGetMainWnd()->SetWindowText("实验四五六函数图像"); for(int k=650;k<=690;k++) { pDC->SetPixel(k,55,RGB(255,0,0)); pDC->SetPixel(k,85,RGB(0,255,0)); pDC->SetPixel(k,115,RGB(0,0,255)); pDC->SetPixel(k,145,RGB(0,255,255)); } pDC->TextOut(700,50,"原函数图像"); pDC->TextOut(700,80,"Lagrange插值函数图像"); pDC->TextOut(700,110,"分段线性插值函数图像"); pDC->TextOut(700,140,"Hermite插值函数图像"); for(int i=6;i<=600;i++) pDC->SetPixel(400,i,RGB(0,0,0)); pDC->TextOut(395,4,"y"); 5 / 14 for(int j=100;j<=700;j++) pDC->SetPixel(j,500,RGB(0,0,0)); pDC->TextOut(700,500,"x"); //pDC->MoveTo(400,500); } ///////////////////////////////////////////////////////////////////////////// // CSHIYAN456View printing BOOL CSHIYAN456View::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CSHIYAN456View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CSHIYAN456View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CSHIYAN456View diagnostics #ifdef _DEBUG void CSHIYAN456View::AssertValid() const 6 / 14 { CView::AssertValid(); } void CSHIYAN456View::Dump(CDumpContext& dc) const { CView::Dump(dc); } CSHIYAN456Doc* CSHIYAN456View::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSHIYAN456Doc))); return (CSHIYAN456Doc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CSHIYAN456View message handlers void CSHIYAN456View::OnFFunction() { // TODO: Add your command handler code here CClientDC dr(this); COLORREF rgb=RGB(255,0,0); double x1,y1,x,y; x1=-1.0;y1=1/(1+25*x1*x1); x=x1*200+400; y=-y1*200+500; while(x1<=1) { 7 / 14 dr.MoveTo(int(x),int(y)); x1=x1+0.00001; y1=1/(1+25*x1*x1); x=x1*200+400; y=-y1*200+500; dr.SetPixel(int(x),int(y),rgb); } } void CSHIYAN456View::OnLagrange() { // TODO: Add your command handler code here CClientDC dr(this); COLORREF rgb=RGB(0,255,0); int i,j; double x1=0,y1=0,x=0,y=0,m=0,n=0,ax[100],ay[100]; for(i=0;i<=10;i++) { ax[i]=-1+((2/10.0)*i); ay[i]=1.0/(1+25*ax[i]*ax[i]); } x1=-1;y1=1/(1+25*x1*x1); x=x1*200+400; y=-y1*200+500; dr.MoveTo(int(x),int(y)); while(x1<=1) { m=0; for(i=0;i<=10;i++) { 8 / 14 n=1; for(j=0;j<=10;j++) { if(i!=j) n=((x1-ax[j])/(ax[i]-ax[j]))*n; } m=ay[i]*n+m; } x=x1*200+400; y=-m*200+500; dr.SetPixel(int(x),int(y),rgb); x1=x1+0.00001; } } void CSHIYAN456View::OnSubsection() { // TODO: Add your command handler code here CClientDC dr(this); COLORREF rgb=RGB(0,0,255); int i; double x1=0,y1=0,x=0,y=0,m=0,n=0,ax[100],ay[100]; for(i=0;i<=20;i++) { ax[i]=-1+((2/20.0)*i); ay[i]=1.0/(1+25*ax[i]*ax[i]); } x1=-1; y1=1/(1+25*x1*x1); 9 / 14 x=x1*200+400; y=-y1*200+500; dr.MoveTo(int(x),int(y)); while(x1<=1) { m=0; x1=x1+0.00001; for(i=0;i<=20;i++) { if(i==0&&x1>=-1&&x1<=-0.9) { n=ay[0]*((x1-ax[1])/(ax[0]-ax[1])); m=n+m; } else { if(x1>=ax[i-1]&&x1<=ax[i]) { n=ay[i]*((x1-ax[i-1])/(ax[i]-ax[i-1])); m=n+m; } else { if(x1>ax[i]&&x1<=ax[i+1]) { n=ay[i]*((x1-ax[i+1])/(ax[i]-ax[i+1])); m=m+n; } else { 10 / 14 if(i==19&&x1>ax[19]&&x1<=ax[20]) { n=ay[20]*((x1-ax[19])-(ax[20]-ax[19])); m=n+m; } } } } } x=x1*200+400; y=-m*200+500; dr.SetPixel(int(x),int(y),rgb); } } void CSHIYAN456View::OnHermite() { // TODO: Add your command handler code here CClientDC dr(this); COLORREF rgb=RGB(0,255,255); int i; double x1=0,y1=0,x=0,y=0,m=0,n=0,tt=0,tt1=0,h=0,ax[100],ay[100],a[100]; for(i=0;i<=10;i++) { ax[i]=-1+((2/10.0)*i); ay[i]=1.0/(1+25*ax[i]*ax[i]); a[i]=(-50*ax[i])/((1+25*ax[i]*ax[i])*(1+25*ax[i]*ax[i])); } x1=-1; 11 / 14 y1=1/(1+25*x1*x1); x=x1*200+400; y=-y1*200+500; dr.MoveTo(int(x),int(y)); while(x1<=1) { m=0; x1=x1+0.00001; for(i=0;i<=10;i++) { if(i==0&&x1>=ax[0]&&x1<=ax[1]) { n=(1+2*((x1-ax[0])/(ax[1]-ax[0])))*((x1-ax[1])/(ax[0]-ax[1])) *((x1-ax[1])/(ax[0]-ax[1])); tt=ay[0]*n; h=(x1-ax[0])*((x1-ax[1])/(ax[0]-ax[1]))*((x1-ax[1])/(ax[0]-ax[1])); tt1=a[0]*h; m=tt+tt1+m; } else { if(x1>=ax[i-1]&&x1<=ax[i]) { n=(1+2*((x1-ax[i])/(ax[i-1]-ax[i])))*((x1-ax[i-1])/(ax[i]-ax[i-1])) *((x1-ax[i-1])/(ax[i]-ax[i-1])); tt=ay[i]*n; h=(x1-ax[i])*((x1-ax[i-1])/(ax[i]-ax[i-1]))*((x1-ax[i-1]) /(ax[i]-ax[i-1])); tt1=a[i]*h; m=tt+tt1+m; 12 / 14 } else { if(x1>ax[i]&&x1<=ax[i+1]) { n=(1+2*((x1-ax[i])/(ax[i+1]-ax[i])))*((x1-ax[i+1]) /(ax[i]-ax[i+1]))*((x1-ax[i+1])/(ax[i]-ax[i+1])); tt=ay[i]*n; h=(x1-ax[i])*((x1-ax[i+1])/(ax[i]-ax[i+1]))*((x1-ax[i+1]) /(ax[i]-ax[i+1])); tt1=a[i]*h; m=tt+tt1+m; } else { if(i==9&&x1>ax[9]&&x1<=ax[10]) { n=(1+2*((x1-ax[10])/(ax[9]-ax[10])))*((x1-ax[9]) /(ax[10]-ax[9]))*((x1-ax[9])/(ax[10]-ax[9])); tt=ay[i]*n; h=(x1-ax[10])*((x1-ax[9])/(ax[10]-ax[9]))*((x1-ax[9]) /(ax[10]-ax[9])); tt1=a[i]*h; m=tt+tt1+m; } } } } } x=x1*200+400; 13 / 14 y=-m*200+500; dr.SetPixel(int(x),int(y),rgb); } } 5、 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 体会 针灸治疗溃疡性结肠炎昆山之路icu常用仪器的管理名人广告失败案例两会精神体会 分段线性插值的方法克服了Lagrange插值法当节点不断加密时,构造的插值多项式的次数不断升高,高次多项式虽然是连续的,但是不一定都收敛到相应的被插函数而产生Runge现象。分段线性插值因为在每一段小区间上都是线性插值而极大地降低了插值多项式的次数,从几何图形上可以看出,当节点取得较多时插值函数的逼近效果还是很好的,但是所求函数是一条以型值点为顶点的折线,这也表现出了它的缺点就是所求得的插值函数的光滑性较差,这就要求一种更好的方法来克服这一缺点了。 14 / 14
本文档为【分段线性插值&#46;doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_482581
暂无简介~
格式:doc
大小:48KB
软件:Word
页数:16
分类:生活休闲
上传时间:2017-09-30
浏览量:70