import numpy as np
from sympy.abc import x,y
import sympy as sy
y=np.sin(np.linspace(0,8,1000))
x=np.linspace(0,8,1000)
n=3
for a in [y[i:i+n]for i in range (0,len(y),n)]:
input_x=a
for b in [x[i:i+n]for i in range (0,len(x),n)]:
input_y=b
#用于控制输出的有效数字长度
def printM(expr, num_digits):
return expr.xreplace({n.evalf() : round(n, num_digits) for n in expr.atoms(sy.Number)})
#定义拟合的系数 L0, L1, L2
def L0(input_x,x):
l0=(x-input_x[1])/(input_x[0]-input_x[1])*(x-input_x[2])/(input_x[0]-input_x[2])
return l0
def L1(input_x,x):
l1=(x-input_x[0])/(input_x[1]-input_x[0])*(x-input_x[2])/(input_x[1]-input_x[2])
return l1
def L2(input_x,x):
l1=(x-input_x[0])/(input_x[2]-input_x[0])*(x-input_x[1])/(input_x[2]-input_x[1])
return l1
#组合最终的拟合函数
def Lfunc(input_y,input_x,x):
answer=input_y[0]*L0(input_x,x)+input_y[1]*L1(input_x,x)+input_y[2]*L2(input_x,x)
return answer
#输出拟合函数表达式, 调用前面定义的控制有效数字函数
print("最终拟合 表达式为:", printM(sy.simplify(Lfunc(input_x, input_y, x)), 2))
x的范围是0到8