Python实现拉格朗日插值法

已知sinx的一组x,y对应关系,用拉格朗日插值法估计sin(0.3367)的值.

x x0.32 0.34 0.36
y 0.314567 0.333487 0.352274

/
/

class Interpolation:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def func(self, X):
        s = 0
        for i in range(len(self.x)):
            W = 1
            w = (X - self.x[i])
            for j in range(len(self.x)):
                W *= (X - (self.x[j]))
                if i == j:
                    continue
                else:
                    w *= (self.x[i] - self.x[j])
            L = self.y[i] * W / w
            s += L
        print(round(s, 8))

while (True):
    x=input(‘x:‘)
    y=input(‘y:‘)
    X=input(‘X:‘)
    if x==‘Q‘ or y==‘Q‘ or X==‘Q‘:
        break
    else:
        p1 = Interpolation(eval(x),eval(y))   # 前面是x的取值,后面是y的取值;
        p1.func(eval(X))   # 现在要计算的是  sin(0.3367)  的值

程序还有好多不足的问题需要改进(^o^),

原文地址:http://blog.51cto.com/13747953/2301643

时间: 2024-11-10 14:53:49

Python实现拉格朗日插值法的相关文章

数值分析Python实现系列—— 一、拉格朗日插值法

一.拉格朗日插值法 1.原理: 拉格朗日插值法:给定n个观测值(xk,yk)找到一组(n个)基函数 lk(x)  , 使得L(x) 为这组基函数的线性组合,并且使得L(x)是经过这些点的多项式 我们发现其中的一种找发是  :  满足这样线性组合的系数 是 观测值yk (n个) 满足这样线性组合的基函数形如: 2.Python实现: 思路: 1.观察发现基函数的分母与x无关,是观测值x的组合,可以先计算出来,留着以后用 2.每一个预测值先计算分子,再把每一个分子乘以每一个预测值,除以每一个分母,最

MATLAB实现拉格朗日插值法

开始学习MATLAB(R和Python先放一放...),老师推荐一本书,看完基础就是各种算法...首先是各种插值.先说拉格朗日插值法,这原理楼主完全不懂的,查的维基百科,好久才看懂.那里讲的很详细,这里就不在赘述了.关于MATLAB的实现,查了很多资料,下面的版本最好理解. %lagran1.m %求拉格朗日插值多项式和基函数 %输入的量:n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量X,纵坐标向量Y %输出的量:n次拉格朗日插值多项式L,基函数l functi

在Java中实现拉格朗日插值法

拉格朗日插值法的定义(引自维基百科) 对某个多项式函数,已知有给定的k + 1个取值点: (x0,y0),(x1,y1),(x2,y2),??,(xk,yk) 其中xj对应着自变量的位置,而yj对应着函数在这个位置的取值. 假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: 具体的Java代码: 1 import java.util.Scanner; 2 3 4 public class Lagr

codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法

题目链接 求sigma(i : 1 to n)i^k. 为了做这个题这两天真是补了不少数论, 之前连乘法逆元都不知道... 关于拉格朗日插值法, 我是看的这里http://www.guokr.com/post/456777/, 还挺有趣... 根据题目给出的例子我们可以发现, k次方的通项公式的最高次是k+1次, 根据拉格朗日插值法, 构建一个k+1次的方程需要k+2项. 然后公式是  , 对于这个题, p[i]就是i^k+(i-1)^k+(i-2)^k+.....+1^k, 这部分可以预处理出

拉格朗日插值法(图文详解)

在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法.许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解.如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值.这样的多项式称为拉格朗日(插值)多项式.数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数.拉格朗日插值法最早被英国数学家爱德华·华林于1779年发现[1

拉格朗日插值法

1 #拉格朗日插值法 2 import pandas as pd #导入模块 3 from scipy.interpolate import lagrange 4 5 inputfile = r'M:\pycache\pythonData\pythondata\chapter4\chapter4\demo\data\catering_sale.xls' 6 outputfile =r'M:\pycache\pythonData\pythondata\chapter4\chapter4\demo\

【BZOJ3453】XLkxc [拉格朗日插值法]

XLkxc Time Limit: 20 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定 k,a,n,d,p f(i)=1^k+2^k+3^k+......+i^k g(x)=f(1)+f(2)+f(3)+....+f(x) 求(g(a)+g(a+d)+g(a+2d)+......+g(a+nd))mod p Input 第一行数据组数,(保证小于6) 以下每行四个整数 k,a,n,d Output 每行一个结果

4559[JLoi2016]成绩比较 容斥+拉格朗日插值法

4559: [JLoi2016]成绩比较 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 261  Solved: 165[Submit][Status][Discuss] Description G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M- 1的整数.一位同学在必修课上可以获得的分数是1到Ui中的一个整数.如果在每门课上A获得的成绩均小于等于B获 得的成绩,则称A被B碾压.在B

The Sum of the k-th Powers()Educational Codeforces Round 7F+拉格朗日插值法)

题目链接 传送门 题面 题意 给你\(n,k\),要你求\(\sum\limits_{i=1}^{n}i^k\)的值. 思路 根据数学知识或者说题目提示可知\(\sum\limits_{i=1}^{n}i^k\)可以被一个\(k+1\)次多项式表示. 由拉格朗日插值法(推荐学习博客)的公式:\(L(x)=l(x)\sum\limits_{i=1}^{k+2}y_i\frac{w_i}{x-x_i},\text{其中}l(x)=\prod\limits_{i=1}^{k+2}(x-i),y_i=\