QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2947|回复: 0
打印 上一主题 下一主题

拉格朗日插值 python实现

[复制链接]
字体大小: 正常 放大

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-14 11:02 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
让我们逐步解析和详细解释这段代码。  G9 v4 F: c7 c5 _
1. 导入必要的库
  1. import numpy as np
    6 L: J. a4 _! J
  2. 0 @# L. X! }% b/ V
  3. from scipy.interpolate import lagrange, ]! F. q! `- I4 A6 W

  4. % C4 O  B$ O; S- A6 \
  5. import matplotlib.pyplot as plt
复制代码
1.numpy: 一个强大的数学库,用于处理数组和矩阵等高级数学运算。# E2 f1 r  y( F- E' ^
2.scipy.interpolate.lagrange: 从 SciPy 库中导入的,用于执行拉格朗日多项式插值的函数。+ N* C- D1 n! m/ v9 x
3.matplotlib.pyplot: 用于数据可视化的库,可以绘制图表和图形。% e2 x8 d1 V" T% l5 c
4 o6 m2 ^$ G& F" W5 k2 i) v
2. 源数据
  1. x = np.array([4, 5, 6])
    6 N: A) w7 w$ L5 d7 ?) w; a; m

  2. # N* _6 X+ c4 j- m7 S7 O1 J
  3. y = np.array([10, 5.25, 1])
复制代码
这里定义了两个数组 x 和 y,代表了三个数据点的坐标:(4, 10), (5, 5.25), 和 (6, 1)。这些数据点将用于拉格朗日插值。
' L: m5 `+ f  [! T- q" ^3. 拉格朗日插值
  1. poly = lagrange(x, y)
    8 x$ z/ `! V1 d\" D! D) H' ~
  2. / c' }% l, H% i* u8 m: ]( @6 h6 s& X6 A9 \
  3. res = poly(18)
复制代码
4.使用 lagrange(x, y) 创建一个拉格朗日插值多项式 poly。这个多项式是基于给定的数据点 x 和 y 计算出来的,它能够逼近这些点构成的曲线。. k  M3 b; m5 H, A0 t/ I) r
5.poly(18) 计算了在 x = 18 时的插值结果 res。这是通过将 x = 18 代入到拉格朗日多项式中得到的。
# s4 G6 _( ~+ z+ H( w
& h' `' w, B: h9 x( R4 Q4. 打印多项式和插值结果
  1. print('poly =\n', poly)3 M  [8 g, x* O
  2. 7 C/ l5 p: M( D9 z5 ?
  3. print('res =', res)
复制代码
这里打印了插值多项式 poly 和在 x = 18 处的插值结果 res。5 `9 T; m' [: B5 p. o9 x! p
5. 数据可视化
  1. x1 = [i for i in range(-5, 20)]
    / B; ~- \8 f1 ^9 g; |

  2. ; [- F# c7 E# [3 N/ g% w9 X
  3. y1 = []
    8 f: M5 h6 ^( t/ v

  4. 7 f3 G0 X  O. ?$ h; ]  a
  5. for each in x1:
    * ?( A\" P% ], E+ k5 r0 ^! S

  6. - k8 S& l; k' A2 v/ U- r7 r- S
  7.     y1.append(poly(each))
    5 l9 d4 g: y9 F! e\" @, {% w1 \
  8. 4 B0 W6 P: _0 w7 u2 R' G4 e8 y$ q
  9. . g0 l. v4 p5 ^* n8 T

  10. ( O& A+ i0 P0 }4 i
  11. plt.plot(x1, y1)- N( k6 x' e0 B6 f. K( U; j! M
  12. # O, C0 c, E/ X3 B9 G$ w9 W
  13. plt.scatter(x, y)7 p1 N$ r% [3 k+ G/ z* \) B
  14. # A  O+ y8 ?* z8 J+ W# u
  15. plt.scatter(18, res)
复制代码
6.首先,创建了一个 x 值列表 x1,范围是从 -5 到 19。然后,对于 x1 中的每个 x 值,都计算对应的拉格朗日插值多项式的 y 值,并将这些 y 值存储在列表 y1 中。& ?) X" @) L( [) W1 I# J
7.使用 plt.plot(x1, y1) 绘制插值多项式形成的曲线。% a" S# _' W9 e& U3 P7 Q
8.使用 plt.scatter(x, y) 在图上标记原始数据点。8 {, V6 C5 G. n% C
9.使用 plt.scatter(18, res) 在图上标记 x = 18 处的插值结果点。
3 Z0 r* O7 A0 i4 z8 o# ]4 j+ k$ a% V9 W* Y$ A1 F, g8 B& M
这样,你就得到了一幅图形,显示了原始数据点、插值曲线,以及在 x = 18 处的插值点。这个过程展示了如何使用拉格朗日插值方法根据一组给定的数据点来估计函数在特定点上的值,并将结果可视化。
* D, L8 C; M- Q: o8 q
4 U( M; }$ T) Q$ i7 W- I: i& Z( _' b& @7 u  n5 k* W9 R2 P

09.lagrange_interpolation.py

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-11 09:32 , Processed in 1.782119 second(s), 55 queries .

回顶部