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

Matplotlib绘图结果与WolframAlpha不符的修正咨询

问题分析与修正方案

你的代码存在两个核心问题:

  1. 方程处理逻辑错误:原方程 y = 10ty + y²t + 20 是关于y的二次方程,不能直接通过赋值表达式计算y值,需要先整理为标准二次方程形式,再用求根公式求解y关于t(对应代码里的x)的表达式。
  2. 变量未定义:代码中计算y时直接使用了未初始化的变量y,这会导致运行错误或异常结果。

修正步骤

  1. 整理方程:将原方程移项整理为标准二次方程形式:

    ( t y^2 + (10t - 1)y + 20 = 0 )

  2. 求根公式求解y:对于一元二次方程 ( ay^2 + by + c = 0 ),解为 ( y = \frac{-b \pm \sqrt{b^2-4ac}}{2a} ),代入对应系数可得:

    ( y = \frac{-(10t-1) \pm \sqrt{(10t-1)^2 - 80t}}{2t} )

  3. 筛选有效t范围:根号内的判别式需非负才有实数解,计算得判别式 ( D=100t^2-100t+1 ),当 ( t \leq 0.0101 ) 或 ( t \geq 0.9899 ) 时,D≥0,存在实数y。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 定义t的范围(对应原代码的x)
t = np.linspace(-2, 2, 400)

# 计算判别式
discriminant = (10*t - 1)**2 - 80*t

# 筛选出判别式非负的t值(避免复数解)
valid_t = t[discriminant >= 0]
valid_disc = discriminant[discriminant >= 0]

# 计算两个y的解
y1 = [(-(10*t_val -1) + np.sqrt(d_val))/(2*t_val) for t_val, d_val in zip(valid_t, valid_disc)]
y2 = [(-(10*t_val -1) - np.sqrt(d_val))/(2*t_val) for t_val, d_val in zip(valid_t, valid_disc)]

# 创建绘图
fig = plt.figure(figsize=(10, 5))
plt.plot(valid_t, y1, label='y₁')
plt.plot(valid_t, y2, label='y₂')
plt.xlabel('t')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()

说明

  • 代码中通过列表推导式计算y值,避免t=0时的除零错误(t=0时原方程变为 -y +20=0,即y=20,若需要可单独添加这个点)。
  • 绘图结果会包含两条曲线,对应二次方程的两个解,与目标结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:40:26