Z1 = 20; % 主动轮齿数Z2 = 64; % 从动轮齿数m = 1.5; % 模数a = 20; % 压力角rc = linspace(14.11, 15.96, 100); % 点c到中心距离的范围d1 = m * Z1; % 主动轮直径d2 = m * Z2; % 从动轮直径alpha = deg2rad(a); % 压力角,弧度制gyc1 = m / 2 * d1 * sin(alpha) + sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2); % 主动轮齿顶与从动轮齿根的gycgyc2 = m / 2 * d1 * sin(alpha) - sqrt((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2); % 主动轮齿根与从动轮齿顶的gycgc = (d1 + d2) / 2 * cos(alpha); % 节点在啮合线上的距离% 生成曲线plot(rc, gyc1, 'b');hold on;plot(rc, gyc2, 'r');plot([rc(1), rc(end)], [gc, gc], 'k--');xlabel('rc');ylabel('gyc');legend('主动轮齿顶-从动轮齿根', '主动轮齿根-从动轮齿顶', '节点在啮合线上的距离');运行matlab时出现,警告: 复数 X 和/或 Y 参数的虚部已忽略 ,请修改
时间: 2024-03-12 09:48:34 浏览: 83
短距重载刮板输送机链传动啮合特性分析
这个警告一般是由于某些函数的输入参数要求是实数,而你传入的是复数或者包含复数的向量/矩阵。在这种情况下,MATLAB 会自动忽略虚部,只用实部进行计算。
这段代码中没有明显的复数运算,因此可能是 `sqrt()` 函数导致的问题。当函数输入参数为负实数时,`sqrt()` 函数会返回复数。因此,当 rc 的值小于 $(\frac{1}{2} d_1 \sin \alpha)$ 时,被开方的部分为负数,导致 `sqrt()` 函数返回复数。为了避免这个问题,可以使用 `abs()` 函数将被开方的数变成绝对值。修改后的代码如下:
```matlab
Z1 = 20; % 主动轮齿数
Z2 = 64; % 从动轮齿数
m = 1.5; % 模数
a = 20; % 压力角
rc = linspace(14.11, 15.96, 100); % 点c到中心距离的范围
d1 = m * Z1; % 主动轮直径
d2 = m * Z2; % 从动轮直径
alpha = deg2rad(a); % 压力角,弧度制
gyc1 = m / 2 * d1 * sin(alpha) + sqrt(abs((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2)); % 主动轮齿顶与从动轮齿根的gyc
gyc2 = m / 2 * d1 * sin(alpha) - sqrt(abs((m / 2 * d1 * sin(alpha))^2 - (m / 2 * d1)^2 + rc.^2)); % 主动轮齿根与从动轮齿顶的gyc
gc = (d1 + d2) / 2 * cos(alpha); % 节点在啮合线上的距离
% 生成曲线
plot(rc, gyc1, 'b');
hold on;
plot(rc, gyc2, 'r');
plot([rc(1), rc(end)], [gc, gc], 'k--');
xlabel('rc');
ylabel('gyc');
legend('主动轮齿顶-从动轮齿根', '主动轮齿根-从动轮齿顶', '节点在啮合线上的距离');
```
这样修改后,警告信息就不会再出现了。
阅读全文