import numpy as np
import matplotlib.pyplot as pltdef inter_x(a, b, n):""":param a: 插值区间左端点:param b: 插值区间右端点:param n: 插值点个数:return: 插值节点向量"""x = np.zeros(n+1)h = (b - a) / nfor i in range(n+1):x[i] = a + i * hreturn xdef inter_y(x, f):""":param x: 插值节点向量:param f: 插值函数:return: 对应节点上的函数值向量"""n = np.size(x)y = np.zeros(np.size(x))for i in range(n):y[i] = f(x[i])return ydef fun(x):return np.exp(np.abs(x))def lagrange(x, inx, iny):a0 = (x - inx[1]) * (x - inx[2]) * (x - inx[3])b0 = (inx[0] - inx[1]) * (inx[0] - inx[2]) * (inx[0] - inx[3])a1 = (x - inx[0]) * (x - inx[2]) * (x - inx[3])b1 = (inx[1] - inx[0]) * (inx[1] - inx[2]) * (inx[1] - inx[3])a2 = (x - inx[0]) * (x - inx[1]) * (x - inx[3])b2 = (inx[2] - inx[0]) * (inx[2] - inx[1]) * (inx[2] - inx[3])a3 = (x - inx[0]) * (x - inx[1]) * (x - inx[2])b3 = (inx[3] - inx[0]) * (inx[3] - inx[1]) * (inx[3] - inx[2])return (a0 / b0) * iny[0] + (a1 / b1) * iny[1] + (a2 / b2) * iny[2] + (a3 / b3) * iny[3]def my_lagrange(x, inx, iny):""":param x: 拉格朗日插值多项式自变量:param inx: 插值节点x:param iny: 插值节点对应的函数值f(x):return: 插值多项式在x处的值P(x)"""num = np.zeros(np.size(inx))    # 序号数组for i in range(np.size(inx)):num[i] = imul11, mul12, mul21, mul22 = 1, 1, 1, 1ploy = 0for i in range(np.size(iny)):arr1 = num[:i]      # (起始 ~ i-1)arr2 = num[i+1:]    # (i+1 ~ 末尾)for j in range(np.size(arr1)):temp1 = int(arr1[j])mul11 *= (x - inx[temp1])       # 分子相乘mul12 *= (inx[i] - inx[temp1])  # 分母相乘for j in range(np.size(arr2)):temp2 = int(arr2[j])mul21 *= (x - inx[temp2])mul22 *= (inx[i] - inx[temp2])a = mul11 * mul21   # 分子前后两部分(即除去i)乘起来b = mul12 * mul22   # 分母前后两部分(即除去i)乘起来m = a / bploy = ploy + m * iny[i]mul11, mul12, mul21, mul22 = 1, 1, 1, 1return ploydef chebyshev_inter_x(a, b, n):x = np.zeros(n+1)for i in range(n):x[i] = np.cos((2 * i + 1) * np.pi / (2 * n))x = x * (b - a) / 2 + (a + b) / 2return xdef chebyshev_inter_y(x, f):n = np.size(x)y = np.zeros(np.size(x))for i in range(n):y[i] = f(x[i])return yif __name__ == '__main__':A = -1B = 1N = 10# 生成插值点x和计算f(x)inter_x = inter_x(A, B, N)inter_y = inter_y(inter_x, fun)chebyshev_inter_x = chebyshev_inter_x(A, B, N)chebyshev_inter_y = chebyshev_inter_y(chebyshev_inter_x, fun)# 画出插值点plt.plot(inter_x, inter_y, 'b*', markersize=10, label="inter_point")plt.plot(chebyshev_inter_x, chebyshev_inter_y, 'r*', markersize=10,label="chebyshev_inter_point")X = np.linspace(A, B, 2000)# 画出原函数与插值多项式plt.plot(X, fun(X), linewidth=2, linestyle="-", color="black", label="orig_function")plt.plot(X, my_lagrange(X, inter_x, inter_y), linestyle="-", color="blue", label="inter_poly")plt.plot(X, my_lagrange(X, chebyshev_inter_x, chebyshev_inter_y), linestyle="-", color="red",label="chebyshev_inter_poly")# 画出插值误差f(x)-P(x)plt.plot(X, fun(X) - my_lagrange(X, inter_x, inter_y), linestyle="--", color="blue", label="inter_poly_error")plt.plot(X, fun(X) - my_lagrange(X, chebyshev_inter_x, chebyshev_inter_y), linestyle="--", color="red",label="chebyshev_inter_poly_error")plt.legend(loc="upper center")plt.show()

均匀节点插值与切比雪夫插值以及龙格现象相关推荐

  1. 拉格朗日插值和牛顿插值的龙格现象

    文章目录 一.实验目的 二.实验设备信息 三.实验内容 (一)拉格朗日插值多项式 (二)牛顿插值多项式 四.实验步骤 (一)拉格朗日插值函数实现 (二)牛顿插值函数实现 (三)观察拉格朗日插值和牛顿插 ...

  2. 数值分析:研究高次插值的龙格现象

    1 实验目的 研究高次插值的龙格现象.考虑函数在某区间范围内,构造拉格朗日插值多项式L(x),分别画出不同n值下的拉格朗日插值函数. 2 实验内容 2.1 实验1.1 研究高次插值的龙格现象.考虑函数 ...

  3. 解决龙格现象matlab,matlab实现Lagrange多项式插值观察龙格现象

    Matlab进行Lagrange多项式插值 拉格朗日插值法对函数y=1./(1+25*x.^2)在区间[-1,1]进行5次.10次.15次插值观察龙格现象 主程序 1.拉格朗日 function [c ...

  4. MATLAB编写拉格朗日插值与龙格现象

    插值与龙格现象 在区间[-1,1]上对函数 ,选取不同的插值节点构造插值多项式,比较他们的误差. (1) 取等距节点,n=5,10,15,20. (2) 取节点 ,k=0,1,2,-n:分别取n=5, ...

  5. 拉格朗日插值验证龙格现象python

    拉格朗日(Lagrange)插值原理 拉格朗日(Lagrange)插值公式的基本思想是把的构造问题转化为 n+1 个插值基函数 .很多人可能觉得样本数据越多,得到的插值数据会越精确,这样想法是不正确的 ...

  6. MATLAB 用拉格朗日插值验证龙格现象

    命令行代码 x=[-5:1:5]; y=1./(1+x.^2); x0=[-5:0.001:5]; y0=lagrange(x,y,x0); y1=1./(1+x0.^2); plot(x0,y0,' ...

  7. matlab插值龙格实验,实验二 拉格朗日插值龙格现象

    汕 头 大 学 实 验 报 告 学院: 工学院系: 计算机系专业: 计算机科学与技术年级:2010 姓名: 林金正学号:2010101032完成实验时间: 5月24日 一.实验名称:拉格朗日插值的龙格 ...

  8. matlab插值龙格实验,实验二 拉格朗日插值龙格现象.doc

    实验二 拉格朗日插值龙格现象 汕 头 大 学 实 验 报 告 学院: 工学院 系: 计算机系 专业: 计算机科学与技术 年级: 2010 姓名: 林金正 学号: 2010101032 完成实验时间: ...

  9. 插值MATLAB实现(牛顿差商、插值误差、龙格现象、切比雪夫插值)

    牛顿差商 function [c,y] = newtondd(a,b,x) n=length(a); for i=1:nv(i,1)=b(i); end for j=2:nfor i=1:n-j+1v ...

最新文章

  1. hdu 1599 find the mincost route(找无向图最小环)(floyd求最小环)
  2. 当程序崩溃的时候怎么办
  3. ubuntu14 + nginx + php
  4. android新建多个java,Java-如何在Android的警报对话框中添加多项选...
  5. 手机MODEM 开发(26)---LTE切换和重选参数中文详解
  6. Ajax get请求示例
  7. 【一天一个C++小知识】007.C++中的struct、enum和union以及内存对齐与大小端问题
  8. IIS安装与部署,站点的部署与配置
  9. 智能制造与数字化工厂
  10. 很值得看看的中文翻译The Django Book
  11. java实现马尔科夫链_马尔科夫链 Markov Chains(示例代码)
  12. win10 怎么进入dos,并且通过路径运行可操作程序
  13. 上海市提取公积金攻略
  14. Dice Loss,balanced cross entropy,Focal Loss
  15. 使用 Springboot websocket 实现聊天室
  16. BZOJ 3039 玉蟾宫
  17. php微信一次性订阅消息demo,微信一次性订阅消息公众号或网页接入文档说明
  18. Ubuntu下安装NS3
  19. ⾯板数据分析、空间计量、空间杜宾模型学习资料
  20. ipv6学习之旅--组播侦听发现协议(MLD)

热门文章

  1. y7000电池固件_联想 拯救者Y7000P 怎么拿出电池?
  2. 实时守护重要物件,异常情况及时推送,VOC智能保管箱G300上手
  3. C#生成条形码图片的简单方法
  4. SQLServer update语句用法
  5. IEC61499开源项目FORTE部分源码分析
  6. 无人驾驶小车调试笔记(三)--小车启动及初始化设置
  7. (4.3C)神奇的口袋
  8. 文件流,gzip解压,压缩
  9. 文字的纵向显示的问题 cdc drawtext
  10. Java内存模型的抽象结构