n_test=[1000 1500 2000 2500 3000 4000 5000 6000];%发动机转速向量 T_test=[135 148 158 163 162 160 163 151];%发动机转矩向量 figure(1) plot(n_test,T_test,'g'); hold on grid on p=polyfit(n_test,T_test,3); n=[1000:1:6000]; Ttq=polyval(p,n);报错显示无法执行赋值,因为左侧的索引与右侧的大小不兼容。
时间: 2024-02-29 17:51:05 浏览: 16
这个错误是因为 `Ttq` 数组的大小与 `n` 数组的大小不匹配。在使用 `polyval` 函数时,需要指定一个向量作为第一个输入参数,表示要计算多少个点的函数值。根据你的代码,`n` 向量的长度为 5001,因此你需要将 `Ttq` 向量的长度也设置为 5001。你可以使用下面的代码来解决这个问题:
```
n_test=[1000 1500 2000 2500 3000 4000 5000 6000];
T_test=[135 148 158 163 162 160 163 151];
figure(1)
plot(n_test,T_test,'g');
hold on
grid on
p=polyfit(n_test,T_test,3);
n=[1000:1:6000];
Ttq=zeros(1,length(n)); % 初始化 Ttq 向量
for i=1:length(n)
Ttq(i)=polyval(p,n(i));
end
```
这里我在 `Ttq` 向量之前添加了一行 `Ttq=zeros(1,length(n));`,用于初始化 `Ttq` 向量的大小。然后在 for 循环中计算 `Ttq` 向量的每个元素。
相关问题
Nmax=2300;%发动机最高转速 n_test=[500 2000 2500 3900 4700 6000 ];%发动机转速向量 T_test=[112 159 165 160 165 150 ];%发动机转矩向量 figure(1) p=polyfit(n_test,T_test,4); n=[600:1:2300]; Ttq=polyval(p,n); plot(n,Ttq,'k'); xlabel('发动机转速n(r/min)'); ylabel('发动机转矩Ttq(N*m)'); title('发动机转矩曲线'); legend('测试曲线','拟合曲线'); axis([0 6000 0 200]);在matlab中有什么问题吗
在这段代码中,没有明确指定 `n_test` 和 `T_test` 变量的长度,因此程序可能会在 `polyfit` 函数中出现错误。另外,`n` 的范围应该是从 0 开始而不是 600。最后,绘图时应该将 `axis` 函数的第一个参数设置为 `xlim`,将第二个参数设置为 `ylim`。下面是修改过的代码:
```
Nmax = 2300; % 发动机最高转速
n_test = [500 2000 2500 3900 4700 6000]; % 发动机转速向量
T_test = [112 159 165 160 165 150]; % 发动机转矩向量
p = polyfit(n_test, T_test, 4);
n = 0:Nmax;
Ttq = polyval(p, n);
figure(1)
plot(n_test, T_test, 'o', n, Ttq, 'k')
xlabel('发动机转速n(r/min)')
ylabel('发动机转矩Ttq(N*m)')
title('发动机转矩曲线')
legend('测试曲线', '拟合曲线')
xlim([0 Nmax])
ylim([0 200])
```
n_test=[1000 4000 6000 8000 10000];%发动机转速向量 T_test=[135 713 956 1020 1100 1100 1100 1080 989 872 787 737.1];%发动机转矩向量 figure(1) plot(n_test,T_test,'g'); hold on grid on p=polyfit(n_test,T_test,4); n=[600:1:2300]; Ttq=polyval(p,n); plot(n,Ttq,'k'); xlabel('发动机转速n(r/min)'); ylabel('发动机转矩Ttq(N*m)'); title('发动机转矩曲线'); legend('测试曲线','拟合曲线'); axis([500 2500 100 1500]);什么意思
这段代码是在进行发动机转矩曲线的拟合和绘制。首先,n_test和T_test是分别给出的发动机转速和转矩数据点。接着,使用plot(n_test,T_test,'g')将这些数据点用绿色线条进行绘制。然后,使用polyfit(n_test,T_test,4)对这些数据点进行4次多项式拟合,得到一个多项式系数向量p。接着,生成一个包含从600到2300的连续整数的向量n,并使用polyval(p,n)对n向量进行求值,得到对应的Ttq向量,这个向量包含了在拟合模型下,n向量中每个点对应的预测值。最后,使用plot(n,Ttq,'k')将预测值用黑色线条进行绘制,展示了拟合模型的结果。xlabel、ylabel和title函数分别设置了x轴、y轴和标题的标签。legend函数用于在图表上添加图例,axis函数用于设置坐标轴范围。整体来说,这段代码的作用是将发动机转速和转矩数据进行拟合,并绘制出拟合曲线和原始数据的对比图。