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

编写牛顿法程序时f(x)输入重复触发问题求助

问题根源

你的f(x)函数定义存在逻辑错误:每次调用f(x)都会执行input("f(x):"),这意味着所有调用f(x)的场景都会触发用户输入——比如计算导数时调用f(x)会弹一次输入,while循环里每轮迭代调用f(x0)又会弹一次,自然会重复出现输入请求。

修正方案

让用户只输入一次函数表达式,用这个表达式统一定义函数和计算导数,避免重复输入。修正后的代码如下:

import sympy as smp

x = smp.symbols('x')
x0 = float(input("Initial Value:"))
k = 1
n = int(input("Number of iterations:"))

# 只让用户输入一次函数表达式
expr_str = input("f(x):")
expr = smp.sympify(expr_str)

# 将符号表达式转为可调用的数值函数
f = smp.lambdify(x, expr)
# 计算导数并转为数值函数
f_prime = smp.lambdify(x, smp.diff(expr, x))

while k <= n:
    r = x0 - (f(x0) / f_prime(x0))
    print(f"root: {r}, iteration: {k}")
    k += 1
    x0 = r
关键改动说明
  • 提前获取用户输入的函数表达式,存入expr_str,再转为sympy的符号表达式expr
  • 用lambdify把符号表达式转成可以直接传入数值计算的函数f和f_prime,避免每次调用都触发输入
  • 求导直接基于符号表达式expr,不再调用会触发输入的f(x)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:40:15