数学建模社区-数学中国

标题: 拉格朗日插值 python实现 [打印本页]

作者: 2744557306    时间: 2024-3-14 11:02
标题: 拉格朗日插值 python实现
让我们逐步解析和详细解释这段代码。
" r+ I7 {2 l3 J1. 导入必要的库
  1. import numpy as np
      @2 b4 I1 l4 }  s
  2. 8 l6 A) b1 |- r) }$ A
  3. from scipy.interpolate import lagrange
    , t! I9 A2 v' Y

  4. $ P* w  G9 O) Z7 j# j( ?/ z- U
  5. import matplotlib.pyplot as plt
复制代码
1.numpy: 一个强大的数学库,用于处理数组和矩阵等高级数学运算。( P/ {* ]( f# K0 r" n9 Z+ P. P
2.scipy.interpolate.lagrange: 从 SciPy 库中导入的,用于执行拉格朗日多项式插值的函数。9 V, D% a" \  x1 d; w$ M0 L" W4 n0 M
3.matplotlib.pyplot: 用于数据可视化的库,可以绘制图表和图形。  f/ |9 L% v" j2 e/ k* C
9 b' a: R- q7 m; L
2. 源数据
  1. x = np.array([4, 5, 6])
    ; o+ i( ~8 F% ]% _9 j2 |
  2. 6 y: l* F$ I: J* i4 c, s0 }
  3. y = np.array([10, 5.25, 1])
复制代码
这里定义了两个数组 x 和 y,代表了三个数据点的坐标:(4, 10), (5, 5.25), 和 (6, 1)。这些数据点将用于拉格朗日插值。
# I1 W" K4 @7 f1 U+ z% t, c3. 拉格朗日插值
  1. poly = lagrange(x, y)/ {0 }7 i/ D- r2 }2 p
  2. * e4 J4 [8 D) g+ D+ \3 z- D
  3. res = poly(18)
复制代码
4.使用 lagrange(x, y) 创建一个拉格朗日插值多项式 poly。这个多项式是基于给定的数据点 x 和 y 计算出来的,它能够逼近这些点构成的曲线。- n% A) I/ x6 z& i' g& A
5.poly(18) 计算了在 x = 18 时的插值结果 res。这是通过将 x = 18 代入到拉格朗日多项式中得到的。$ @* F# _% ~% W; u& E: }

# h5 y3 ^! B' R5 Q: {6 v4. 打印多项式和插值结果
  1. print('poly =\n', poly), z3 D7 I- t; \$ g' ?: g/ T% S

  2. * _0 L$ V- K$ R/ v
  3. print('res =', res)
复制代码
这里打印了插值多项式 poly 和在 x = 18 处的插值结果 res。
$ N+ {  r* _* q* |5. 数据可视化
  1. x1 = [i for i in range(-5, 20)]2 Q3 Q. g) p* K# J/ T
  2. ; J& Q( z- S6 s6 E" ?
  3. y1 = []
    . }+ \0 t" K/ ?. e1 k- ^7 A
  4. 6 ^' g' W5 G3 b; {2 T* C
  5. for each in x1:6 Z" E4 e& s: p5 w5 ^; z

  6. & S" W" D- W$ i. `# J  W! s: |
  7.     y1.append(poly(each))
    4 n. d4 G# g' v3 N

  8. ! g: E& h1 F* z, e* `8 X3 n

  9. . K+ M: C6 \% B! w% ^
  10. , q% ?! }! V2 }/ j* k
  11. plt.plot(x1, y1)/ r: n; U+ c3 f! o
  12. 0 D4 r+ Z$ Y, m4 t9 V3 i$ e
  13. plt.scatter(x, y)
    : {/ j4 O& a7 s0 H) G2 Z! e, v" }. W

  14. 4 y: e1 M! v# {9 r: e! `8 o+ H+ h4 u
  15. plt.scatter(18, res)
复制代码
6.首先,创建了一个 x 值列表 x1,范围是从 -5 到 19。然后,对于 x1 中的每个 x 值,都计算对应的拉格朗日插值多项式的 y 值,并将这些 y 值存储在列表 y1 中。
$ G! b- h" G0 p" x7.使用 plt.plot(x1, y1) 绘制插值多项式形成的曲线。
' Z1 s/ q0 e8 }1 @  c8.使用 plt.scatter(x, y) 在图上标记原始数据点。
4 G  w. k. u4 X" I- }4 e9.使用 plt.scatter(18, res) 在图上标记 x = 18 处的插值结果点。: O& n- d: Q3 q* V7 o9 C9 l
! H! ]. x6 m, o/ y3 A% i
这样,你就得到了一幅图形,显示了原始数据点、插值曲线,以及在 x = 18 处的插值点。这个过程展示了如何使用拉格朗日插值方法根据一组给定的数据点来估计函数在特定点上的值,并将结果可视化。# }0 ]% u6 H# l9 g7 m% x

1 A1 x$ v' c- w- F3 E3 M/ R! \( p0 [! p  p1 Y, M' e2 @

09.lagrange_interpolation.py

570 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5