Mathematica中Poincare映射函数正常但绘图异常的调试请求
问题调试方案
你的代码问题出在Poincare函数的返回值格式以及不必要的求解区间上,调整后即可正常绘图:
问题原因
NDSolveValue里指定返回{x[2 Pi]},得到的是列表类型结果,但Plot需要单个数值作为输入,列表无法被绘图函数解析。- 求解区间设为
{t, 0, 30}完全多余,我们只需要计算到t=2Pi的值,多余的计算会浪费资源。
修正后的代码
poincare[x0_] := NDSolveValue[ {x'[t] == 1/4*x[t]*(1 - x[t]^2) + 1/5*Sin[t], x[0] == x0}, x[2 Pi], (* 去掉外层大括号,返回单个数值 *) {t, 0, 2 Pi} (* 求解区间缩短到需要的2Pi即可 *) ] Plot[poincare[x], {x, -2, 2}]
验证说明
- 单独调用
poincare[1]会直接返回单个数值,而非列表; - 运行修正后的代码,Plot就能正常生成庞加莱映射的图像。
内容的提问来源于stack exchange,提问作者Stone xms
相关产品推荐
相关产品推荐

