如何在Julia中使用Plots正确绘制带箭头的解曲线?代码问题排查
问题解决:动态系统解曲线的箭头与螺旋显示问题
代码问题分析与修正
你的代码存在两个核心问题,导致箭头显示错误、螺旋曲线未呈现:
1. 箭头参数使用错误
Plots.jl中plot函数的arrow=:closed只会在整条曲线的终点添加箭头,而非沿曲线标注指向原点的运动方向。要显示符合需求的方向箭头,需要结合速度向量采样绘制。
2. 坐标轴范围限制导致螺旋被截断
你设置的xlims=(-0.1,1)和ylims=(-0.1,0.21)范围过窄,当t增大时,exp(-2t)快速衰减,曲线的螺旋收缩部分会被坐标轴范围截断,无法完整呈现。
修正后的代码
using MTH229, ForwardDiff, Plots, LaTeXStrings, SymPy gr() t = range(0, stop=21, length=10000) x = @. exp(-2t)*cos(t) y = @. exp(-2t)*sin(t) # 绘制基础曲线,调整坐标轴范围完整展示螺旋 p = plot(x, y, label=L"x(t)", xlims=(-1,1), ylims=(-1,1), linewidth=1.5) # 采样点绘制运动方向箭头 sample_t = range(0, stop=10, length=15) sample_x = @. exp(-2sample_t)*cos(sample_t) sample_y = @. exp(-2sample_t)*sin(sample_t) # 计算速度向量(解的导数)作为箭头方向 dx_dt = @. -2exp(-2sample_t)*cos(sample_t) - exp(-2sample_t)*sin(sample_t) dy_dt = @. -2exp(-2sample_t)*sin(sample_t) + exp(-2sample_t)*cos(sample_t) # 缩放箭头长度避免遮挡曲线 scale = 0.05 quiver!(p, sample_x, sample_y, quiver=(scale*dx_dt, scale*dy_dt), arrow=:closed, label="运动方向") display(p)
修正说明
- 调整坐标轴范围为
(-1,1),完整展示曲线螺旋收缩至原点的过程 - 使用
quiver!函数基于解的导数(速度向量)绘制箭头,准确指向运动方向(原点) - 对箭头向量做缩放处理,避免箭头过大干扰曲线展示
内容的提问来源于stack exchange,提问作者Freya the Goddess
相关产品推荐
相关产品推荐

