数值分析-拉格朗日插值法python3实现绘图

import matplotlib.pyplot as plot
import numpy as np
print('拉格朗日插值法:')
"""
10
拉格朗日插值法:(曲线差值法)
1.定义:找到一个在点xj取值为1,而在其他点取值都是0的多项式Lj(x)。这样,多项式在该点取值是yi,然后其他点取值都是0
2.差值基函数:拉格朗日基本多项式,在一个点取1,其他点取值为0.作为系数的取值
3.拉格朗日插值法和牛顿差值法结果是一样的,只是不同的表示形式
4.两者的互相推导:一阶实现
5.两种方式优缺点分析:
 ①牛顿差值法:
 一个差值点有误差会导致整个结果有偏差
 当多项式的次数很高时,数值不稳,会产生龙格现象
 解决:分段样条

"""
print('127,已知f(x)的观测数据:')
print('x=[1,2,3,4]')
print('f(x)=[0,-5,-6,3]')
print('构造插值多项式:')

print('----------------------------------------------------------------------------')

X=[1,3,2]#创建x列表存储数据x值
Y=[1,2,-1]#创建y列表存储数据的y值
A=[1,1,1]#创建存储系数的列表

def save(n):#声明和存储函数 n代表列表存储的数据个数
    global X,Y,A #全局变量声明需要注意
    X=[[]for i in range(n)]
    Y=[[]for j in range(n)]
    A=[[]for m in range(n)]
    print('输入',n,'对(x,y):')
    for k in range(n):
        X[k]=int(input())
        Y[k]=int(input())
        A[k]=1
        plot.scatter(X[k], Y[k], c='m')#画点




def result(q,n):#计算系数函数 n代表存入数据的个数 x代表外部传入的数值
    for i in range(n):
        for j in range(n):
            if(j!=i):
                A[i]= ((q-X[j])/(X[i]-X[j]))*A[i]
    sum = 0
    for i in range(n):
        sum=sum+A[i]*Y[i]
    return sum


def draw():#显示类表存储情况
    print('X=',X)
    print('Y=',Y)
    print('A=',A)


save(4)
print(result(1**(1),4))
draw()

x = 0
plot.title("Lagrange polynomial Method") #图形标题
x = np.linspace(0,6)
plot.xlim(0,6)# 固定坐标
plot.ylim(-10,10)

plot.plot(x,x**3-4*x**2+3)
plot.show()
"""
测试结果:
拉格朗日插值法:
127,已知f(x)的观测数据:
x=[1,2,3,4]
f(x)=[0,-5,-6,3]
构造插值多项式:
----------------------------------------------------------------------------
输入 4 对(x,y):
1
0
2
-5
3
-6
4
3
0.0
X= [1, 2, 3, 4]
Y= [0, -5, -6, 3]
A= [1.0, 0.0, -0.0, 0.0]

Process finished with exit code 0

"""

数值分析-拉格朗日插值法python3实现绘图_第1张图片

你可能感兴趣的:(python,机器学习)