如何在Maxima CAS中绘制二维向量场?代码报错求解
问题解决步骤
核心原因
报错是因为plotdf要求向量场表达式只能依赖x和y,但你的p仍包含未替换的变量z——虽然你后来定义了z:x+y*i,但这个定义在p创建之后,导致p里的z没有被替换为x和y的表达式,最终plotdf识别到额外变量z。另外注意:Maxima的标准虚数单位是%i,用i会被当作普通变量,导致计算异常。
修正后的代码
display2d:false; kill(all); // 先定义z为x+y的复平面表达式(使用Maxima标准虚数单位%i) z: x + y*%i; t: 0.75*%i; // 基于已定义的z计算p,此时p会自动展开为x和y的函数 p: z*(z^3 - 1.5^3*%e^(2*%pi*%i*t)); // 求解根的逻辑保持不变 s: solve([p],[z]); s: map(rhs,s); s: map('float,s); s: map('rectform,s); // 直接取p的实部和虚部(此时p已仅含x、y) r: realpart(p); m: imagpart(p); // 调用plotdf绘图 plotdf([r,m],[x,y], [trajectory_at,realpart(s[2]), imagpart(s[2])], [direction,forward]);
关键修正点
- 调整变量定义顺序:先定义
z: x + y*%i,再计算p,确保p中的z被替换为x和y的表达式,让realpart和imagpart能正确解析出仅含x、y的实值函数。 - 替换虚数单位:把代码中的
i改为Maxima标准的%i,避免被当作普通变量处理。 - 移除多余操作:无需额外调用
rectform(p),因为基于z:x+y*%i计算的p已经是可直接解析的形式。
运行修正后的代码,r和m会变成仅依赖x和y的表达式,plotdf就能正常绘制向量场和指定轨迹。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

