KP = 1; KI = [0.1, 0.2, 0.3, 0.4]; f = 85e3; s = logspace(-5, -4, 1000); H = zeros(length(s), length(KI)); for i = 1:length(KI) ki = KI(i); H(:,i) = (2.*KP.*f.*s+2.*KI.*f.^2)./(s.^2+2.*KP.*f.*s+2.*KI.*f.^2); end figure; plot(s, H(:,1), 'LineWidth', 2); hold on; plot(s, H(:,2), 'LineWidth', 2); plot(s, H(:,3), 'LineWidth', 2); plot(s, H(:,4), 'LineWidth', 2); legend('KI=0.1', 'KI=0.2', 'KI=0.3', 'KI=0.4'); xlabel('s'); ylabel('H');数组大小不兼容,s是时间变化量
时间: 2024-02-19 15:59:20 浏览: 119
如果s表示时间变化量,那么在计算传递函数时,s应该是一个复数变量,用来表示系统在复频域中的响应。此时,logspace函数生成的向量不再适用,需要使用linspace函数生成一个实数向量。
修正后的代码如下:
```matlab
KP = 1;
KI = [0.1, 0.2, 0.3, 0.4];
f = 85e3;
t = linspace(0, 1, 1000); % 生成一个时间向量,表示从0秒到1秒的时间变化量
H = zeros(length(t), length(KI));
for i = 1:length(KI)
ki = KI(i);
H(:,i) = (2.*KP.*f+2.*KI.*f.^2.*t)./(t.^2+2.*KP.*f.*t+2.*KI.*f.^2);
end
figure;
plot(t, H(:,1), 'LineWidth', 2);
hold on;
plot(t, H(:,2), 'LineWidth', 2);
plot(t, H(:,3), 'LineWidth', 2);
plot(t, H(:,4), 'LineWidth', 2);
legend('KI=0.1', 'KI=0.2', 'KI=0.3', 'KI=0.4');
xlabel('Time (s)');
ylabel('H');
```
这样,就可以正确地计算系统的传递函数,并绘制出随时间变化的曲线。需要注意的是,此时传递函数的值不再是复数,而是一个实数。
相关问题
KP = 1; KI = [0.1, 0.2, 0.3, 0.4]; f = 85e3; s = logspace(-5, -4, 1000); H = zeros(length(s), length(KI)); for i = 1:length(KI) ki = KI(i); H(:,i) = (2.*KP.*f.*s+2.*KI.*f.^2)./(s.^2+2.*KP.*f.*s+2.*KI.*f.^2); end figure; plot(s, H(:,1), 'LineWidth', 2); hold on; plot(s, H(:,2), 'LineWidth', 2); plot(s, H(:,3), 'LineWidth', 2); plot(s, H(:,4), 'LineWidth', 2); legend('KI=0.1', 'KI=0.2', 'KI=0.3', 'KI=0.4'); xlabel('s'); ylabel('H');数组大小不兼容
这段代码的作用是绘制一个系统的传递函数随频率变化的曲线。其中,KP和KI是控制系统的参数,f是系统的固有频率,s是一个频率向量,H是一个与s大小相同的数组,用于存储系统的传递函数。
这段代码的问题在于,H的大小是在循环中动态赋值的,但是它的大小在循环之前没有预先确定。因此,在第一次循环时,H的大小就被确定了,但是后面循环中赋值的大小不一定与第一次相同,导致“数组大小不兼容”的错误。
要解决这个问题,可以在循环之前先确定H的大小,例如可以使用以下代码:
```matlab
H = zeros(length(s), length(KI)); % 先将H的大小预先确定好
for i = 1:length(KI)
ki = KI(i);
H(:,i) = (2.*KP.*f.*s+2.*KI.*f.^2)./(s.^2+2.*KP.*f.*s+2.*KI.*f.^2);
end
```
这样就可以避免“数组大小不兼容”的错误了。
KP = 1; KI = [0.1, 0.2, 0.3, 0.4]; f = 85e3; t = linspace(0, 1, 1000); % 生成一个时间向量,表示从0秒到1秒的时间变化量 H = zeros(length(t), length(KI)); for i = 1:length(KI) ki = KI(i); H(:,i) = (2.*KP.*f+2.*KI.*f.^2.*t)./(t.^2+2.*KP.*f.*t+2.*KI.*f.^2); end figure; plot(t, H(:,1), 'LineWidth', 2); hold on; plot(t, H(:,2), 'LineWidth', 2); plot(t, H(:,3), 'LineWidth', 2); plot(t, H(:,4), 'LineWidth', 2); legend('KI=0.1', 'KI=0.2', 'KI=0.3', 'KI=0.4'); xlabel('Time (s)'); ylabel('H');数组大小不兼容
这段代码中的问题是数组大小不兼容,具体来说是 H 数组的维度与 KI 数组的长度不一致。在这段代码中,KI 是一个长度为 4 的数组,而 H 是一个大小为 (length(t), length(KI)) 的二维数组。因此,在 H 的第二个维度上,应该有 4 个元素,但是现在只有 1 个元素。要解决这个问题,可以将 H 的第二个维度大小设置为 4,例如可以在代码中添加一行:H = zeros(length(t), 4); 然后再将 H(:,i) 赋值即可。
阅读全文