Lagrange插值法

  • 格式:doc
  • 大小:104.50 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告

任课教师:马季骕 班级:11级计算机科学与技术

1 实验目的及要求

2 程序的源代码

3 实验操作

4 实验结果及分析

1 实验目的及要求

使用Lagrange 插值的方法求原函数的逼近函数。在数学分析中,用y=f (x )来描述一条平面直线,但是在实际问题中,函数y=f (x )往往是通过观测得到的一组数据来给出的,只是已知个别点的函数值,而非在整个区间上,插值法是应用十分广泛的一种方法。本实验是用拉格朗日法来逼近被逼近函数,并画出其图像。

当给出了n+1个节点上f (x )的一张函数表后,用Lagrange 插值法求一个函数ϕ(x ),并满足以下两个条件:

(1)ϕ(x )是一个不超过n 次的多项式;

(2)在给定点)(n 0,1,i x i ⋯=上与)(i x f 取相同值,即)(i x ϕ=)(i x f (i=0,1,2…n )

。 当插值节点取的足够多时逼近函数ϕ(x )能够很好的逼近被逼近函数f (x )。而插值函数ϕ(x )的次数就会相应地升高,高次的插值多项式就不一定收敛到相应的被逼近函数,就会产生Runge 现象,本实验可以从函数的图像上清楚地看到这一现象。

2 程序的源代码

// 数值分析Dlg.cpp : implementation file

//

#include "stdafx.h"

#include "数值分析.h"

#include "数值分析Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)

: CDialog(CMyDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMyDlg)

// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CMyDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMyDlg)

// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

//{{AFX_MSG_MAP(CMyDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_NEW, OnNew)

ON_BN_CLICKED(IDC_LAG, OnLag)

ON_BN_CLICKED(IDC_LINE, OnLine)

ON_BN_CLICKED(IDC_HER, OnHer)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()

{