MATLAB,如何求解索引超过数组元素数(1)的问题?

MATLAB,如何求解索引超过数组元素数(1)的问题?,matlab,for-loop,plot,Matlab,For Loop,Plot,为什么我不能绘制以下代码?错误是: 索引超过数组元素数(1) 我试图实现的是,用户输入标量值f(例如1500)和Ht和Hr。因此,我想找到ahr和L的值,然后绘制L与f的对比图。所以在f轴上,I应该有100150200250300,…,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

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

索引超过数组元素数(1)

我试图实现的是,用户输入标量值
f
(例如1500)和
Ht
Hr
。因此,我想找到
ahr
L
的值,然后绘制
L
f
的对比图。所以在
f
轴上,I应该有100150200250300,…,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
使用矢量化方法评估地块 假设
d
Ht
Hr
是标量,那么下面的代码应该可以工作。此脚本使用矢量化方法,其中
f
是用于计算公式
ahr
L
的矢量。现在将为
f
中的每个元素计算方程
ahr
L
,从而使
ahr
L
的长度与
f
相同。这种方法消除了for循环的需要,并与MATLAB的优势/功能相结合

使用MATLAB 2019b运行

%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;