注册 登录
编程论坛 Python论坛

python+数值分析绘图求解

郭阳yang 发布于 2022-03-31 17:14, 1276 次点击
只有本站会员才能查看附件,请 登录
3 回复
#2
古1232022-03-31 19:41
不怎么懂拉格朗日多项式插值,你看看对不对
程序代码:
import numpy as np
import matplotlib.pyplot as plt
from pylab import *

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(xlim=[-5,5],ylim=[0,2])

def lagrange(x, y, num_points, x_test):
    '''
        不太懂拉格朗日多项式插值,网上找到一个函数,不知道对不对
        函数网址:https://zhuanlan. :param x:
    :param y:
    :param num_points:
    :param x_test:
    :return:
   
'''
    # 所有的基函数值,每个元素代表一个基函数的值
    l = np.zeros(shape=(num_points, ))

    # 计算第k个基函数的值
    for k in range(num_points):
        # 乘法时必须先有一个值
        # 由于l[k]肯定会被至少乘n次,所以可以取1
        l[k] = 1
        # 计算第k个基函数中第k_个项(每一项:分子除以分母)
        for k_ in range(num_points):
            # 这里没搞清楚,书中公式上没有对k=k_时,即分母为0进行说明
            # 有些资料上显示k是不等于k_的
            if k != k_:
                # 基函数需要通过连乘得到
                l[k] = l[k]*(x_test-x[k_])/(x[k]-x[k_])
            else:
                pass
    # 计算当前需要预测的x_test对应的y_test值
    L = 0
    for i in range(num_points):
        # 求所有基函数值的和
        L += y[i]*l[i]
    return L

# 绘制函数图形
fun_x = np.linspace(-5,5,1000)
fun_y = [1/(1+i**2) for i in fun_x]

plt.plot(fun_x,fun_y)

# 当n取不同值的时候,使用不同颜色
color = {2:'red',4:'black',6:'green',8:'yellow',10:'purple'}
for n in [2,4,6,8,10]:
    x = []
    y = []
    # 计算Xk
    for k in range(n+1):
        xk = -5 + (10 / n) * k
        x.append(xk)
    # 计算y
    for i in x:
        y.append(1 / (1+i**2))

    # -5到5等距分n+1节点
    x_test = list(np.linspace(-5,5,n+1))
    y_predict = [lagrange(x,y,len(x),x_i) for x_i in x_test]

    plt.scatter(x_test,y_predict,color=color.get(n),marker='+')
plt.show()
#3
郭阳yang2022-04-01 09:39
回复 2楼 古123
可是要在一张图上画出所有的L(x)和f(x)的图形啊
我再研究研究

[此贴子已经被作者于2022-4-1 09:48编辑过]

#4
pvm20002022-12-31 01:25
回复 2楼 古123
厉害
1