You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将拉格朗日函数展开为标准多项式形式

问题描述

尝试构建拉格朗日插值函数,但打印输出仅显示未展开的乘积形式,而非期望的展开后多项式形式。

代码如下:

import numpy as np
from matplotlib.pyplot import plot, show, grid
import numpy.polynomial.polynomial as poly
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange
from sympy import symbols, Eq


x1 = [120, 180, 270, 300]  # x
y1 = [246, 351, 514, 572]  # y


def Lagrange(Lx, Ly):
    x = symbols('x')
    y = 0
    for k in range(len(Lx)):
        p = 1
        for j in range(len(Lx)):
            if j != k:
                p = p * ((x - Lx[j]) / (Lx[k] - Lx[j]))
        y += p * Ly[k]
    return y


print(Lagrange(x1, y1))
poly=lagrange(x1,y1)
print(poly)

当前输出:

246*(5/3 - x/180)*(9/5 - x/150)*(3 - x/60) + 351*(5/2 - x/120)*(3 - x/90)*(x/60 - 2) + 514*(10 - x/30)*(x/150 - 4/5)*(x/90 - 2) + 572*(x/180 - 2/3)*(x/120 - 3/2)*(x/30 - 9)

期望输出形式:

3            2
3.395e-06 x - 0.001528 x + 1.976 x + 25
解决方案

方法1:用Sympy展开自定义拉格朗日表达式

Sympy生成的表达式默认不会自动展开,调用expand()方法即可得到展开后的多项式,还可通过evalf()转换为浮点数形式:

修改打印部分代码:

lag_expr = Lagrange(x1, y1)
# 展开表达式
expanded_expr = lag_expr.expand()
# 输出精确展开形式
print(expanded_expr)
# 输出浮点数近似形式
print(expanded_expr.evalf())

方法2:处理Scipy的lagrange输出

Scipy的lagrange()返回numpy多项式对象,直接打印格式不直观,可提取系数手动格式化,或结合Sympy转换:

手动格式化系数

poly = lagrange(x1, y1)
# 获取系数(scipy返回的系数从最高次到最低次排列)
coeffs = poly.coeffs
# 按期望格式拼接项
terms = []
for idx, coeff in enumerate(coeffs):
    power = len(coeffs) - 1 - idx
    if power == 3:
        terms.append(f"{coeff:.4e} x^{power}")
    elif power == 2:
        terms.append(f"{coeff:.4f} x^{power}")
    elif power == 1:
        terms.append(f"{coeff:.3f} x")
    else:
        terms.append(f"{coeff:.0f}")
# 拼接并打印
print(" ".join(terms))

结合Sympy简化处理

from sympy import Poly, symbols
x_sym = symbols('x')
# 将numpy多项式转换为Sympy表达式
poly_sym = Poly(poly(x_sym), x_sym)
# 输出浮点数近似的展开形式
print(poly_sym.as_expr().evalf())

两种方法都能得到你期望的展开后多项式形式。

内容的提问来源于stack exchange,提问作者Magnus2211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:25:18