yinda_peng 发表于 2024-3-13 20:14:18

Lagrange插值,自写py代码

import numpy as np

class Interpolation:
    def Lagrange(self, xx, x, y):
      m = len(x)
      n = len(y)
      if m != n:
            print("x与y维数不同")

      s = np.ones(len(x))
      for i in range(0, n):
            d = 1
            for j in range(0, n):
                if i != j:
                  d = d * (xx - x) / (x - x)
            s = d
      f = y * s
      return sum(f)

class Main:
    def run(self):
      input_str = input("请输入一个x列表(用空格分隔各元素): ")
      x =
      
      input_str = input("请输入一个y列表(用空格分隔各元素): ")
      y =

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

      interpolator = Interpolation()

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

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

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

      x = []
      y = []
      for pair in data:
            x.append(pair)
            y.append(pair)

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

      interpolator = Interpolation()

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

if __name__ == "__main__":
    main = Main()
    main.run()

FishC 发表于 2024-3-13 20:15:30

你好!下面是使用Lagrange插值方法的Python代码示例:

import numpy as np

class Interpolation:
    def Lagrange(self, xx, x, y):
      m = len(x)
      n = len(y)
      if m != n:
            print("x与y维数不同")

      s = np.ones(len(x))
      for i in range(0, n):
            d = 1
            for j in range(0, n):
                if i != j:
                  d = d * (xx - x) / (x - x)
            s = s * d
      f = y * s
      return sum(f)

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

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

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

      interpolator = Interpolation()

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

if __name__ == "__main__":
    main = Main()
    main.run()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Lagrange插值,自写py代码