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

Mathematica笛卡尔叶形线切线求解与绘图报错问题求助

笛卡尔叶形线切线求解与绘图报错排查

原函数定义

x[t_] := (12 t)/(1 + t^3)
y[t_] := (12 t^2)/(1 + t^3)

报错原因分析

报错【Power: Infinite expression 1/0 encountered】源于两个核心问题:

  1. 参数t=-1时,分母1+t^3=0,函数x[t]、y[t]无定义,但原代码的t范围包含该点;
  2. 求解垂直切线时直接用D[y[t],t]/D[x[t],t]==Infinity,计算过程中会触发除以零的异常,正确逻辑应为导数分母为0且分子不为0。

修正后的求解代码

1. 垂直切线求解

垂直切线对应参数t满足D[x[t],t]==0且t≠-1(排除无定义点):

vt = Solve[{D[x[t], t] == 0, t != -1}, t, Reals]

结果为t->1/2,对应垂直切线x=8。

2. 水平切线求解

水平切线对应参数t满足D[y[t],t]==0且t≠-1:

ht = Solve[{D[y[t], t] == 0, t != -1}, t, Reals]

结果为t->0,对应水平切线y=0。

修正后的绘图代码

Show[
  ParametricPlot[{x[t], y[t]}, {t, -100, 100}, 
    PlotRange -> {{-10, 10}, {-10, 10}}, 
    AxesLabel -> {x, y},
    Exclusions -> t == -1  (* 明确排除无定义点 *)
  ],
  Epilog -> {
    Thick, Red,
    PointSize[.05],
    Point[{x[0], y[0]}], Point[{x[1], y[1]}], Point[{x[1/2], y[1/2]}],  (* 只保留有定义的关键点 *)
    Line[{{-10, y[t] /. ht[[1]]}, {10, y[t] /. ht[[1]]}}],  (* 水平切线 *)
    Line[{{x[t] /. vt[[1]], -10}, {x[t] /. vt[[1]], 10}}]   (* 垂直切线 *)
  }
]

Mathematica调试方法
  • 分步执行:将复杂表达式拆分为小单元单独运行,比如先计算D[x[t],t]确认导数正确性;
  • 打印中间值:用Print[]输出关键变量或计算结果,例如Print["x的导数:", D[x[t],t]];
  • 跟踪计算过程:使用Trace[]查看每一步计算逻辑,比如Trace[Solve[D[x[t],t]==0, t]],定位异常触发点;
  • 检查定义域:用Domain[x[t]]查看函数有效定义域,避免代入无定义参数;
  • 绘图排除异常点:在ParametricPlot中加入Exclusions参数,直接跳过无定义的t值。

补充问题:图形基元报错解决

你写的Point[({x[#], y[#]} & /@ {-1, 0, 1}) /. t -> #] &是一个纯函数,但Epilog只接受图形基元(如Point、Line)或绘图指令,不能直接传入函数。

正确写法

直接生成具体的点坐标,两种方式均可:

(* 方式1:单个Point包裹多个点坐标 *)
PointSize[.05],
Point[{x[0], y[0]}, {x[1], y[1]}, {x[1/2], y[1/2]}]

(* 方式2:生成多个Point元素 *)
PointSize[.05],
Map[Point[{x[#], y[#]}] &, {0, 1, 1/2}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:43:10