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');数组大小不兼容,如何修改
时间: 2024-02-19 13:59:22 浏览: 27
为了解决这个问题,可以将 H 的第二个维度大小设置为 4,例如可以在代码中添加一行:
```
H = zeros(length(t), 4);
```
然后再将 H(:,i) 赋值即可。修改后的代码如下:
```
KP = 1;
KI = [0.1, 0.2, 0.3, 0.4];
f = 85e3;
t = linspace(0, 1, 1000); % 生成一个时间向量,表示从0秒到1秒的时间变化量
H = zeros(length(t), 4); % 修改 H 的第二个维度大小为 4
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; t = linspace(0, 1, 1000); % 生成一个时间向量,表示从0秒到1秒的时间变化量 H = zeros(length(t), 4); % 修改 H 的第二个维度大小为 4 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 的第二个维度大小设置为 4,例如可以在代码中添加一行:
```
H = zeros(length(t), 4);
```
然后再将 H(:,i) 赋值即可。修改后的代码如下:
```
KP = 1;
KI = [0.1, 0.2, 0.3, 0.4];
f = 85e3;
t = linspace(0, 1, 1000); % 生成一个时间向量,表示从0秒到1秒的时间变化量
H = zeros(length(t), 4); % 修改 H 的第二个维度大小为 4
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');数组大小不兼容,s是时间变化量
如果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');
```
这样,就可以正确地计算系统的传递函数,并绘制出随时间变化的曲线。需要注意的是,此时传递函数的值不再是复数,而是一个实数。