编辑代码

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
#print("Hello world!   -  python.jsrun.net .")
def create_polynomial(y_values):
    """根据输入的y值列表生成拉格朗日插值多项式函数"""
    n = len(y_values)
    x_points = list(range(1, n + 1))  # x取值为1, 2, 3,...,n
    
    def interpolated_function(x):
        total = 0.0
        for i in range(n):
            # 计算基函数L_i(x)
            term = y_values[i]
            for j in range(n):
                if j != i:
                    term *= (x - x_points[j]) / (x_points[i] - x_points[j])
            total += term
        return total
    return interpolated_function

# 获取用户输入并生成多项式函数
input_str = input("请输入以空格分隔的数值列表(例如:1 3 5 7 9):")
y_values = list(map(float, input_str.split()))
f = create_polynomial(y_values)

# 示例:输出多项式在整数点处的值
print("\n生成的多项式函数验证:")
for x in range(1, len(y_values) + 1):
    print(f"f({x}) = {f(x)}")

# 手动计算多项式展开的系数
def get_polynomial_coefficients(y_values):
    n = len(y_values)
    x_points = list(range(1, n + 1))
    coefficients = [0.0] * n  # 系数列表,从常数项开始
    
    for i in range(n):
        # 计算基函数L_i(x)的系数
        term_coefficients = [y_values[i]]  # 初始系数为y_values[i]
        for j in range(n):
            if j != i:
                # 展开 (x - x_points[j]) 并更新系数
                new_term = [0.0] * (len(term_coefficients) + 1)
                for k in range(len(term_coefficients)):
                    new_term[k] += term_coefficients[k] * (-x_points[j])
                    new_term[k + 1] += term_coefficients[k]
                term_coefficients = new_term
        
        # 将当前基函数的系数加到总系数中
        for k in range(len(term_coefficients)):
            if k < len(coefficients):
                coefficients[k] += term_coefficients[k]
            else:
                # 如果当前基函数的次数超过总次数,扩展系数列表
                coefficients.append(term_coefficients[k])
    
    # 调整系数顺序,从最高次项到常数项
    coefficients = coefficients[::-1]
    return coefficients

# 生成多项式表达式
def polynomial_expression(coefficients):
    expression = ""
    for i, coeff in enumerate(coefficients):
        if coeff == 0:
            continue
        power = len(coefficients) - 1 - i
        if power == 0:
            term = f"{coeff:.2f}"
        elif power == 1:
            term = f"{coeff:.2f}x"
        else:
            term = f"{coeff:.2f}x^{power}"
        if expression:
            if coeff >= 0:
                expression += f" + {term}"
            else:
                expression += f" - {abs(coeff):.2f}x^{power}"
        else:
            expression = term
    return expression

# 计算并输出多项式表达式
coefficients = get_polynomial_coefficients(y_values)
expression = polynomial_expression(coefficients)
print("\n多项式表达式:")
print(expression)