如何判断f(x)与g(x)取值相等时的x值并调试现有Python代码
现有代码问题排查
- 语法错误:
f(x)函数里的减号用了非标准的Unicode特殊减号−,不是Python可识别的半角减号-,运行会直接触发语法报错。 - 逻辑错误:
g(x)函数没有写return返回语句,Python中无显式返回的函数默认返回None,永远无法得到x+5的计算结果。 - 缺失核心逻辑:仅定义了两个基础函数,没有实现复合函数相等的求解、结果输出的代码。
正确实现方式
首先明确求解的等式要求:将对应参数代入两个函数后返回值相等,即 f(x**2 + 4*x -7) = g(x+5),代入修正后的函数展开后为一元四次方程,可以直接通过符号计算库求解精确解,也可以通过多项式求根工具计算数值解。
方式1:符号计算求精确解(推荐)
需要先安装sympy库,执行pip install sympy即可,代码如下:
import sympy as sp # 修正后的基础函数 def f(x): return x**2 + 4*x - 7 def g(x): return x + 5 # 定义符号变量并列等式 x = sp.symbols('x') equal_equation = sp.Eq(f(x**2 + 4*x -7), g(x+5)) # 求解所有根 result = sp.solve(equal_equation, x) print("满足条件的x取值:") for i, sol in enumerate(result, 1): print(f"解{i}:精确表达式为{sol},浮点近似值为{round(float(sol.evalf()), 6)}")
运行后会输出4个解,包含2个实根、2个复根,如果只需要实根,加一层虚部判断过滤即可。
方式2:numpy数值求解
把等式整理为标准多项式形式x⁴ + 8x³ + 6x² - 41x + 9 = 0,用numpy的多项式求根工具计算即可,安装numpy执行pip install numpy:
import numpy as np # 多项式系数按x次数从高到低排列 poly_coeff = [1, 8, 6, -41, 9] all_roots = np.roots(poly_coeff) print("满足条件的实根:") for root in all_roots: # 过滤浮点计算产生的虚部误差,仅保留实根 if abs(root.imag) < 1e-6: print(round(root.real, 6))
内容的提问来源于stack exchange,提问作者Elwilo3
相关产品推荐
相关产品推荐

