鱼C论坛

 找回密码
 立即注册
查看: 1485|回复: 1

[作品展示] Lagrange插值,自写py代码

[复制链接]
发表于 2024-3-13 20:14:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import numpy as np

  2. class Interpolation:
  3.     def Lagrange(self, xx, x, y):
  4.         m = len(x)
  5.         n = len(y)
  6.         if m != n:
  7.             print("x与y维数不同")

  8.         s = np.ones(len(x))
  9.         for i in range(0, n):
  10.             d = 1
  11.             for j in range(0, n):
  12.                 if i != j:
  13.                     d = d * (xx - x[j]) / (x[i] - x[j])
  14.             s[i] = d
  15.         f = y * s
  16.         return sum(f)

  17. class Main:
  18.     def run(self):
  19.         input_str = input("请输入一个x列表(用空格分隔各元素): ")
  20.         x = [int(i) for i in input_str.split()]
  21.         
  22.         input_str = input("请输入一个y列表(用空格分隔各元素): ")
  23.         y = [int(i) for i in input_str.split()]

  24.         print("输入的列表为:\n", x, '\n', y)

  25.         interpolator = Interpolation()

  26.         while True:
  27.             a = input("是否输入插值点(Y/N)\n")
  28.             if a.lower() == 'n':
  29.                 break
  30.             xx = int(input("请输入插值点: "))
  31.             print(interpolator.Lagrange(xx, x, y))

  32. #如果以文件形式,文件内以元组((x1,y1),(x2,y2)...)形式传入
  33. '''
  34. class Main:
  35.     def read_data_from_file(self, file_path):
  36.         data = []
  37.         with open(file_path, 'r') as file:
  38.             lines = file.readlines()
  39.             for line in lines:
  40.                 line = line.strip()
  41.                 if line:
  42.                     pair = tuple(map(int, line.split(',')))
  43.                     data.append(pair)
  44.         return data

  45.     def run(self):
  46.         file_path = input("请输入包含数据的文件路径:")
  47.         data = self.read_data_from_file(file_path)

  48.         x = []
  49.         y = []
  50.         for pair in data:
  51.             x.append(pair[0])
  52.             y.append(pair[1])

  53.         print("输入的列表为:\n", x, '\n', y)

  54.         interpolator = Interpolation()

  55.         while True:
  56.             a = input("是否输入插值点(Y/N)\n")
  57.             if a.lower() == 'n':
  58.                 break
  59.             xx = int(input("请输入插值点: "))
  60.             print(interpolator.Lagrange(xx, x, y))
  61. '''

  62. if __name__ == "__main__":
  63.     main = Main()
  64.     main.run()
复制代码


本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-3-13 20:15:30 | 显示全部楼层
你好!下面是使用Lagrange插值方法的Python代码示例:

  1. import numpy as np

  2. class Interpolation:
  3.     def Lagrange(self, xx, x, y):
  4.         m = len(x)
  5.         n = len(y)
  6.         if m != n:
  7.             print("x与y维数不同")

  8.         s = np.ones(len(x))
  9.         for i in range(0, n):
  10.             d = 1
  11.             for j in range(0, n):
  12.                 if i != j:
  13.                     d = d * (xx - x[j]) / (x[i] - x[j])
  14.             s = s * d
  15.         f = y * s
  16.         return sum(f)

  17. class Main:
  18.     def run(self):
  19.         input_str = input("请输入一个x列表(用空格分隔各元素): ")
  20.         x = list(map(float, input_str.split()))

  21.         input_str = input("请输入一个y列表(用空格分隔各元素): ")
  22.         y = list(map(float, input_str.split()))

  23.         print("输入的列表为:\n", x, '\n', y)

  24.         interpolator = Interpolation()

  25.         while True:
  26.             a = input("是否输入插值点(Y/N)\n")
  27.             if a.lower() == 'n':
  28.                 break
  29.             xx = float(input("请输入插值点: "))
  30.             print(interpolator.Lagrange(xx, x, y))

  31. if __name__ == "__main__":
  32.     main = Main()
  33.     main.run()
复制代码


这段代码实现了Lagrange插值方法。在运行代码时,首先需要输入一个x列表和一个y列表,其中各元素之间用空格分隔。然后,程序会不断询问是否输入插值点,如果输入'Y'则继续,如果输入'N'则结束程序。如果需要输入插值点,则需要输入一个插值点的值。程序会根据输入的x列表、y列表和插值点的值,使用Lagrange插值方法计算出插值点对应的y值,并将结果输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表