Mathematica笛卡尔叶形线切线求解与绘图报错问题求助
笛卡尔叶形线切线求解与绘图报错排查
原函数定义
x[t_] := (12 t)/(1 + t^3) y[t_] := (12 t^2)/(1 + t^3)
报错原因分析
报错【Power: Infinite expression 1/0 encountered】源于两个核心问题:
- 参数
t=-1时,分母1+t^3=0,函数x[t]、y[t]无定义,但原代码的t范围包含该点; - 求解垂直切线时直接用
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
相关产品推荐
相关产品推荐

