Lagrange插值法
- 格式:doc
- 大小:104.50 KB
- 文档页数:9
数值分析实验报告
任课教师:马季骕 班级: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()
{