You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab R2018b绘制特征值(根轨迹)出现空白图问题咨询

解决Matlab绘制特征值根轨迹空白图的问题

嘿,我帮你找出了代码里导致空白图的几个关键问题,咱们逐个梳理并修正:

1. 最核心的错误:变量计算位置不对

你把A2、A1、A0这三个依赖于U的表达式放在了循环外面,这时候U还没被赋值(循环里的U是循环变量,和外面未定义的U不是一回事),所以这三个变量全是无效值(要么NaN,要么报错),后续算出来的特征值自然没法正常绘制。

2. 绘图时没有保持图窗

每次循环调用plot时,Matlab默认会清空当前图重新画,就算前面计算没问题,最后也只会显示最后一次循环的点,运气不好的话最后一次点异常就直接空白了。

3. 漏掉了一个特征值

你的特征方程是二次的,应该有两个根,但你只算了带加号的那个根,另一个带减号的根完全没处理,这样根轨迹是不完整的。

4. 疑似表达式笔误

看A0里的(Cf*Lf-Cr*Lr^2),对比前面的m*(Cf*Lf-Cr*Lr),这里的Lr^2大概率是笔误,应该是Lr,否则物理模型逻辑不对,这个你得结合自己的实际模型确认下。

5. 未定义物理参数

代码里的m、J、Cf这些物理参数都没赋值,Matlab会把它们当未定义变量,要么直接报错,要么计算结果全是垃圾值。


修正后的完整代码

% 先给物理参数赋值(根据你的实际模型调整数值)
m = 1500;    % 车辆质量
J = 2000;    % 转动惯量
Cf = 30000;  % 前侧偏刚度
Cr = 35000;  % 后侧偏刚度
Lf = 1.2;    % 质心到前轴距离
Lr = 1.5;    % 质心到后轴距离

% 初始化图窗:保持绘图、打开网格、添加标签
figure; hold on; grid on;
xlabel('实部'); ylabel('虚部'); title('特征值根轨迹随前向速度U的变化');

% 遍历前向速度U计算特征值
for U = 1:80
    % 每次循环都重新计算A2/A1/A0,因为它们依赖当前U
    A2 = m*J;
    A1 = J*((Cf+Cr)/U) + m*((Cf*Lf^2 + Cr*Lr^2)/U^2);
    % 修正疑似笔误的A0项(如果确认是笔误的话)
    A0 = ((Cf+Cr)/U)*((Cf*Lf^2 + Cr*Lr^2)/U) - m*(Cf*Lf - Cr*Lr) - ((Cf*Lf - Cr*Lr)/U^2);
    
    % 计算二次方程的两个特征值
    lambda1 = (-A1 + sqrt(A1^2 - 4*A0*A2))/(2*A2);
    lambda2 = (-A1 - sqrt(A1^2 - 4*A0*A2))/(2*A2);
    
    % 绘制两个特征值,用不同颜色标记区分
    plot(real(lambda1), imag(lambda1), 'bo');  % 蓝色点标记第一个根
    plot(real(lambda2), imag(lambda2), 'ro');  % 红色点标记第二个根
end

hold off;

小建议

  • 如果想让根轨迹更平滑,可以把U = 1:80改成U = linspace(1,80,100),生成更密集的速度点。
  • 因为U从1开始,避免了除以0的问题,要是后续需要包含低速,记得加判断处理。
  • Matlab会自动处理复数的开根号,所以不用担心根号里为负的情况,real()和imag()能正确提取实部虚部。

内容的提问来源于stack exchange,提问作者mfarrell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:32:38