Lagrange插值多项式算法

本文介绍Lagrange插值多项式的基本概念、构造原理及其优缺点,并提供了一个使用C++实现的Lagrange插值多项式算法示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:Lagrange插值多项式算法

一.公式介绍

Lagrange多项式公式:
L[n](u) =  累加符号 l[i](u) * y[i] {i = 0,1,...,n}

Lagrange因子公式 :
 l[i](u) = 累乘符号(u-x[j])/(x[i]-x[j]) {i != j , j = 0,1...,n}

L[n](u)称为f(u)的n次多项式插值的Lagrange公式
l[i](u)称为n次多项式插值问题的基函数(Lagrange因子)

二.构造插值函数的目的以及优缺点

目的:由已知一些点的坐标,构造出一个符合这些坐标的函数,并能推测出未知坐标
的函数值。
优点:公式的形式对称,结构紧凑,容易编程,便于理论分析和许多数值计算公式的
推导。
缺点:没有承袭性,增加新的节点时,所有的Lagrange因子必须重新计算,造成计算
的浪费。

注:至少需要n+1个坐标点才能构造出L[n](x),或者说L[n](x)至少有n+1个根。

三.算法流程
在这里插入图片描述
在这里插入图片描述
注意:下述代码实现中的 i 与 j 互换

四.Lagrange插值多项式算法c++代码实现

#include<iostream>
#include<algorithm>
#include<cstring> 
using namespace std;

template <typename T>
void input(T n){//输入每个点的坐标 
	double x[n];
	double y[n];
	for(int i = 0 ; i < n ; i ++){
		cout<<"请输入第"<<i+1<<"个点的坐标:"; 
		cin>>x[i]>>y[i];
	}
	
	T u;
	cout<<"请输入插值点横坐标:"; 
	cin>>u;//输入插值点横坐标 
	
	double v = 0;//Lagrange是一个叠加的过程,所以令横坐标所对应的函数初始值(纵坐标)为 0 
	double l[n];//n-1次多项式插值问题的基函数(Lagrange因子)
	fill(l, l + n, 1);//Lagrange因子是叠乘的过程,所有的因子赋值为1
	for(int i = 0 ; i < n ; i ++){
			for(int j = 0 ; j < n ; j ++){
				if(i != j){
					l[i] *= (u - x[j])/(x[i] - x[j]);
				}
			}
		v = v + l[i]*y[i];//求出l[k]的同时,直接叠加,不必再开新的循环	 
	}
	
	cout<<"通过插值公式求得的u所对应的函数值V为:"<<v;
}

//通过已知的坐标点,构造Lagrange插值函数,计算插值点 u 的函数坐标值 v
int main(){ 
	int n;
	//n 个坐标点(根)确定一个 f(x) 的 n-1 次多项式插值的Lagrange公式 
	cout<<"请输入坐标点的个数:";
	cin>>n;
	
	input(n);
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值