如何正确绘制四次多项式向量场的分岔图?
解决Maxima绘制四次多项式向量场分岔图的问题
问题根源
你当前的代码存在两个核心问题:
- 未引入分岔参数
t,无法体现三个根绕原点旋转的分岔过程(你构造的p(z)=z(z² + z + e^(2πit))里的e^(2πit)完全没在代码中体现) - 直接使用复变量
z而未拆分为实部x和虚部y,Maxima的plotdf仅处理实平面的向量场,需要明确基于实变量的分量表达式
修正后的Maxima实现步骤
定义复变量与分岔参数
将复变量z拆分为实部x和虚部y,引入分岔参数t(范围[0,1),对应旋转一周):z: x + %i*y; t: 0.2; /* 可替换为0到1之间的任意值,观察分岔变化 */ p: z*(z^2 + z + exp(2*%i*%pi*t));提取向量场的实部和虚部分量
对p(z)展开后分离实部和虚部,得到平面向量场的两个分量:r: realpart(p); m: imagpart(p); /* 展开简化表达式,避免绘图时计算卡顿 */ r: expand(r); m: expand(m);优化绘图参数
调整plotdf的范围、箭头密度等参数,让分岔特征更清晰:plotdf([r, m], [x, y], xrange = [-2, 2], yrange = [-2, 2], fieldplot = true, /* 启用向量场箭头 */ arrowsize = 0.5, grid = [20, 20], /* 控制箭头密度 */ title = concat("t = ", float(t)));生成分岔动画(可选)
若要观察t变化时的分岔过程,可使用循环生成多帧图像或直接创建动画:for t_val from 0 step 0.05 thru 1 do ( p: z*(z^2 + z + exp(2*%i*%pi*t_val)), r: expand(realpart(p)), m: expand(imagpart(p)), plotdf([r, m], [x, y], xrange = [-2, 2], yrange = [-2, 2], fieldplot = true, arrowsize = 0.5, title = concat("t = ", float(t_val)), filename = concat("bifurcation_", string(t_val), ".png")) );
关键说明
- 当
t变化时,e^(2πit)会带动f(z)=z²+z+e^(2πit)的三个根绕原点旋转,对应向量场的奇点(根的位置)也会同步旋转,这就是分岔图的核心变化 - 建议将绘图范围限制在
[-2,2]×[-2,2],因为单位根的位置在这个范围内,能清晰展示奇点和轨线的变化
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

