首页 > 解决方案 > MATLAB,如何解决Index超过数组元素个数(1)?

问题描述

为什么我不能绘制以下代码?错误是:

索引超过数组元素的数量 (1)。

我想要实现的是用户输入一个标量值f(例如 1500)anfHtHr. 所以,我想找到 的值ahrLaccondingliy 然后绘制Lvs f。所以在f轴上我应该在轴上有 100,150,200,250,300,....,1500 和相应的值L

for i = 100:50:f
        cm = 0;
        ahr(i) = (1.1*log10(f(i))-0.7)*Hr-1.56*log10(f(i))-0.8;
        L(i) = 46.3+33.9*log10(f(i))-13.82*log10(Ht)-ahr+(44.9-6.55*log10(Hr))*log10(d)+cm;
        plot(f,L)
end

标签: matlabfor-loopplot

解决方案


使用矢量化方法评估绘图

假设d和是标量HtHr下面的代码应该可以工作。此脚本使用矢量化方法,其中f是用于计算方程的向量ahrL。方程ahrL现在将对每个元素进行评估,f结果 ahrL的长度与 相同f。这种方法消除了对 for 循环的需要,并与 MATLAB 的优势/功能一起使用。

命令窗口:用户输入

绘制 L 与 f 向量化方法

%Asking user for input values%
fmax = input("Please type in the maximum f: ");
Ht = input("Please type in the value of Ht: ");
Hr = input("Please type in the value of Hr: ");
cm = 0;
d = 1;

%Creating the vector of points to plot on%
f = (100:50:fmax);

ahr = (1.1*log10(f)-0.7)*Hr-1.56*log10(f) - 0.8;
L = 46.3 + 33.9*log10(f)-13.82*log10(Ht)-ahr+(44.9-6.55*log10(Hr))*log10(d);

clf;
plot(f,L,'Marker','.');
title("Plot L vs f");
xlabel("f"); ylabel("L");
xticks(f);
grid;

使用 MATLAB 2019b 运行


推荐阅读